[toc]
Android原生与小程序进行交互
背景
公司项目主要是计步,之前只要是使用SensorEventListener传感器来获取步数,但是存在计步不是很准确的问题。
其实主要是和微信步数不一致,导致用户粉丝群里充斥着“ 为什么和微信步数不一致 ”之类的疑问,所以在2.7版本考虑添加同步微信步数的方法。
准备
依赖
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.3.1'
添加回调页面
注意如果有对应的uat,dev,pro,记得对应写上。
image.png
@Override
public void onResp(BaseResp baseResp) {
int type = baseResp.getType();
if (type == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) baseResp;
String extraData =launchMiniProResp.extMsg; //对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
Log.d("lht", "onResp: "+extraData);
StepUtil.saveWeChatStep(extraData);
}
}
当然 ,这里不止是这么简单,得看小程序返回的数据结构进行解析再存储。
页面逻辑
/**
* 从微信中获取用户的UnionID
*/
private void getUserUnionIdFromWeChat() {
if (UserManager.Instance().getUserInfo().getIfBindingWeixin() == 1) {
getUnionIdToPullUp();
} else {
getUnionIdToBind();
}
}
/**
* 拉去微信去绑定
*/
private void getUnionIdToBind() {
WechatHelper.getInstance().getData()
.setActionCode(WechatHelper.BINDWX)
.setWechatNotice(new BindWXNotice() {
@Override
public void hadCode(String code) {
WechatHelper.getInstance().getUnionIDByCode(PersonStepActivity.this, code);
}
@Override
public void toNext(String unionID) {
LoginEntry.Instance().setIfBindingWeixin(1);
}
}).upDateComplete().authorizeWechatPage(PersonStepActivity.this);
}
/**
* 获取unionId去拉起小程序
*/
private void getUnionIdToPullUp() {
WechatHelper.getInstance().getData()
.setActionCode(WechatHelper.BINDWX)
.setWechatNotice(new BindWXNotice() {
@Override
public void hadCode(String code) {
WechatHelper.getInstance().getUnionIDByCode(PersonStepActivity.this, code);
}
@Override
public void toNext(String unionID) {
pullUpTheApplet(unionID);
}
}).upDateComplete().authorizeWechatPage(PersonStepActivity.this);
}
/**
* 拉起小程序
*/
private void pullUpTheApplet(String UnionId) {
String userId = UserManager.Instance().getUserInfo().getUserId();
IWXAPI api = WXAPIFactory.createWXAPI(this, UrlConstants.APP_ID);
WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
req.userName = AppletConf.ORIGINAL_ID; // 填小程序原始id
req.path = "pages/step/step?userId=" + userId + "&appUnionid=" + UnionId;
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW;// 可选打开 开发版,体验版和正式版
api.sendReq(req);
}
因为这边封装了工具类,但是具体流程是:
- 拉起微信授权,获取code
- 通过code去服务器拿用户unionID
- 通过unionID拼接页面,拉起小程序
- 通过小程序的回调获取步数数据,回传app
网友评论