APP调用微信小程序,能拉起小程序,但是onResp回调不会被调用问题

	官方给的demo太简陋了,都没有一个正常能唤起小程序的demo(iOS却有...),网址的示例也没说 createWXAPI 时的appKey是自身app的还是小程序的;连回调的demo都写了一堆用不上的东西,都得自己试,看“微信开放社区”好多跟我一样遇到唤起app正常,但小程序回调app方法不走的情况...

微信开放文档:app拉起小程序 https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Launching_a_Mini_Program/Android_Development_example.html

1、app 拉起小程序
启动微信小程序代码片段

 //ConstantText.WX_APPKEY  app在开发平台申请的appKey
IWXAPI api = WXAPIFactory.createWXAPI(context,  ConstantText.WX_APPKEY);
WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
// 填小程序原始id
req.userName = ConstantText.WECHAT_CHECKIN;
// 可选打开 开发版,体验版和正式版
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW ;
api.sendReq(req);

2、小程序回调app
App端:
需要创建WXEntryActivty,实现IWXAPIEventHandler接口,重写onResp方法。注意Acitvity需要在Manifest文件中声明 android:exported=“true”,这样才可以被外部唤起

public void onResp(BaseResp resp) {
    if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
        WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp;
        String extraData =launchMiniProResp.extMsg; // 对应下面小程序中的app-parameter字段的value
    }
}

回调过程中遇到的问题:
1)、回调无反应,无法调起app
因为本身项目内有集成sharesdk,已有WXEntryActivty回调类,为了不修改它,就新建了WXEntryNewActivty;
结果回调不起作用,试着在WXEntryActivty实现IWXAPIEventHandler接口,发现就可以调起app了,但回调方法onResp不 走
2)、可以调起app,但回调方法onResp不 走
在网上查资料,遇到很多同样的情况,都没有给出明确的解决方案,其中
这个提问中的回答给了思路
回答
参考其中的思路,我对jar包进行了混淆保护,以及把demo回调类中对handleIntent的处理拷了过来,发现回调方法onResq就可以正常走了!对jar包的混淆保护,不确认是否必须的,没有再做把它去掉的测试!有时间可以试下!

      private IWXAPI api; 

  @Override 

    protected void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        api = WXAPIFactory.createWXAPI(this, ConstantText.WX_APPKEY); //自己app的appKey

//        api = WXAPIFactory.createWXAPI(this, ConstantText.WX_APPKEY, false); 

        try { 

            Intent intent = getIntent(); 

            api.handleIntent(intent, this); 

        } catch (Exception e) { 

            e.printStackTrace(); 

        } 

    } 

    @Override 

    protected void onNewIntent(Intent intent) { 

        super.onNewIntent(intent); 

        setIntent(intent); 

        api.handleIntent(intent, this); 

    } 

3、跳转规则

对于跳转规则的解析:认证账号跳转无限制,非认证账号必须对小程序进行绑定(应该就是其说的同一开放平台账号下)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
登录 要在Android应用程序中实现微信登录,您需要按照以下步骤进行操作: 1.在微信开放平台上注册并创建应用程序,以获得应用程序ID和密钥。 2.下载并集成微信SDK到您的Android应用程序中。 3.在您的应用程序的AndroidManifest文件中添加必要的权限和活动声明。 4.在您的应用程序中实现登录逻辑,包括调用微信登录API、处理登录结果和获取用户信息。 以下是一个简单的示例代码,展示了如何在Android应用程序中实现微信登录: ```java //在Activity中实现微信登录 public class LoginActivity extends AppCompatActivity implements IWXAPIEventHandler { private IWXAPI mWXApi; private String mAppId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAppId = "your_app_id"; //替换为您的应用程序ID mWXApi = WXAPIFactory.createWXAPI(this, mAppId, true); mWXApi.handleIntent(getIntent(), this); //注册应用程序 mWXApi.registerApp(mAppId); //调用微信登录 sendWeChatLoginRequest(); } private void sendWeChatLoginRequest() { final SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "wechat_login"; mWXApi.sendReq(req); } @Override public void onReq(BaseReq baseReq) { //处理请求结果 } @Override public void onResp(BaseResp baseResp) { if (baseResp.getType() == ConstantsAPI.COMMAND_SENDAUTH) { //处理登录结果 switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: //登录成功 String code = ((SendAuth.Resp) baseResp).code; getAccessToken(code); break; case BaseResp.ErrCode.ERR_USER_CANCEL: //用户取消登录 break; case BaseResp.ErrCode.ERR_AUTH_DENIED: //用户拒绝授权 break; default: //登录失败 break; } } } private void getAccessToken(String code) { //获取访问令牌 //... } } ``` 在上述示例中,您需要将“your_app_id”替换为您在微信开放平台上注册的应用程序ID。在onCreate()方法中,我们创建了一个IWXAPI实例并注册了我们的应用程序。然后,我们调用了sendWeChatLoginRequest()方法来发送微信登录请求。当用户完成登录后,onResp()方法将被调用,并根据登录结果执行适当的操作,例如获取访问令牌。请注意,此示例仅用于演示目的,并且可能需要根据您的应用程序的特定需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值