美文网首页
#Android原生与小程序进行交互

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

作者: 间歇性丶神经病患者 | 来源:发表于2019-03-11 09:59 被阅读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

    相关文章

      网友评论

          本文标题:#Android原生与小程序进行交互

          本文链接:https://www.haomeiwen.com/subject/iqcvpqtx.html