2***@qq.com
2***@qq.com
  • 发布:2021-12-28 09:16
  • 更新:2021-12-28 11:43
  • 阅读:408

安卓离线打包,小程序无法回调到app

分类:HTML5+

需求流程:
用app打开小程序,进入小程序,支付功能成功/失败后,将参数传递到app。
现象:
用app打开小程序可顺利打开,进入小程序后要回调app时,安卓调试运行的时候可以,但离线打包不行,ios正常

用app打开小程序代码如下:(可顺利调起小程序)

let sweixin = null  
plus.share.getServices(function(s) {  
    let weixinArray = s.filter(el => el.id == 'weixin');  
    sweixin = weixinArray && weixinArray.length > 0 ? weixinArray[0] : null  
}, function(e) {  
    // plus.nativeUI.alert("获取分享服务列表失败: " + JSON.stringify(e));  
    plus.nativeUI.alert("获取分享服务列表失败");  
});  
function launchMiniProgram(params = {}) {  
    let options = {}  
    options.id = params.id || 'gh_************'  
    options.path = params.route  
               try {  
            let url2 = '***********.wxapi.WxLaunchApp'  
            var dlg = plus.android.newObject(url2);  
                        // uni-app调起小程序的时候,调用安卓原生方法,启动监听,安卓原生createWXAPI方法在下面  
            plus.android.invoke(dlg, 'createWXAPI')  
        } catch (e) {  
            console.log('e', e)  
        }  
    // 调起微信小程序  
     sweixin ? sweixin.launchMiniProgram(options) : plus.nativeUI.alert('当前环境不支持微信操作!');  
}

app端(安卓createWXAPI代码):

 public IWXAPI createWXAPI() {  
        Log.e(LOG_TAG,"createWXAPI");  
        String wx_appid = AndroidResources.getMetaValue("WX_APPID");  
        Log.e(LOG_TAG, "createWXAPI --> wx_appid: " + wx_appid);  
        // 通过WXAPIFactory工厂,获取IWXAPI的实例  
        IWXAPI iwxapi = WXAPIFactory.createWXAPI(this, wx_appid, true);  
        Log.e(LOG_TAG, "createWXAPI --> createWXAPIcreateWXAPI");  
        Log.e(LOG_TAG, "createWXAPI --> createWXAPIcreateWXAPI: " + wx_appid);  
//        iwxapi.handleIntent(this.getIntent(), this);  
        iwxapi.registerApp(wx_appid);  
        // 将应用的appId注册到微信  
        // 建议动态监听微信启动广播进行注册到微信  
        registerReceiver(new BroadcastReceiver() {  
            @Override  
            public void onReceive(Context context, Intent intent) {  
                Log.e(LOG_TAG, "createWXAPI --> registerReceiver: " + wx_appid);  

                // 将该app注册到微信  
                iwxapi.registerApp(wx_appid);  
            }  
        }, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP));  
        return iwxapi;  
    }

报错现象,调用安卓原生方法,启动监听的时候,WXAPIFactory.createWXAPI(this, wx_appid, true)方法报错:
NativeObject.execMethod createWXAPI method ; params=[]java.lang.reflect.InvocationTargetException

小程序回调app代码如下:(可顺利执行launchapp方法,但安卓离线打包,小程序无法调起app)
小程序端:

        <button open-type="launchApp" app-parameter="wechat" @launchapp="launchapp"  
          @error="launchAppError">打开APP</button>  

methods: {  
      launchapp(e) {  
        console.log('launchapp', e)  
      },  
      launchAppError(error) {  
        console.log('launchAppError', error)  
      }
2021-12-28 09:16 负责人:DCloud_Android_zl 分享
已邀请:
DCloud_Android_zl

DCloud_Android_zl

https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/share?id=%e5%be%ae%e4%bf%a1%e5%88%86%e4%ba%ab 对比一下离线打包配置是否都正确

  • 2***@qq.com (作者)

    你好。分享到微信的功能是可以的。但打开小程序后,小程序不能回调到app

    2021-12-28 11:51

  • DCloud_Android_zl

    回复 2***@qq.com: 稍等,我先排查一下

    2021-12-28 16:16

  • DCloud_Android_zl

    回复 DCloud_Android_zl: 重新测试了一下,包名及微信配置都正确的情况下,WXEntryActivity在Androidmanifest.xml中注册时,需要设置android:exported为true

    2021-12-28 16:56

  • 2***@qq.com (作者)

    回复 DCloud_Android_zl: 你好,可以提供离线打包的可打开小程序并且能回调app的demo吗?

    2021-12-28 21:39

  • DCloud_Android_zl

    回复 2***@qq.com: 这个是个人项目,目前不方便提供,你可以参考上面发的方法试一下

    2021-12-29 15:20

  • 2***@qq.com (作者)

    回复 DCloud_Android_zl: 那能提供下WXEntryActivity文件吗。。android:exported设置过了。小程序有触发launchapp事件,但app无法调起

    2021-12-30 15:03

  • DCloud_Android_zl

    回复 2***@qq.com: WXEntryActivity就是离线打包示例里面的,如果还不行,工程可以私信给我,我看一下

    2021-12-31 11:31

DCloud_Android_ST

DCloud_Android_ST

你这是自己调用微信SDK代码实现?

  • 2***@qq.com (作者)

    我用的是离线打包,uni app 有封装吗。看了button组件的文档,跳转的就是微信的sdk


    open-type="launchApp"时需要调起的APP接入微信OpenSDK详见

    https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/launchApp.html

    2021-12-28 11:49

该问题目前已经被锁定, 无法添加新回复