#Android原生与小程序进行交互

2019-03-11  本文已影响0人  间歇性丶神经病患者

[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);
    }

因为这边封装了工具类,但是具体流程是:

  1. 拉起微信授权,获取code
  2. 通过code去服务器拿用户unionID
  3. 通过unionID拼接页面,拉起小程序
  4. 通过小程序的回调获取步数数据,回传app
上一篇 下一篇

猜你喜欢

热点阅读