目录
一、背景以及功能介绍
二、Android开发示例
2.1 下载 SDK
2.2 调用接口
2.3 获取小程序原始Id
2.4 报错提示:bad_param
2.4.1 错误日志
2.4.2 解决方案
相关推荐
一、背景以及功能介绍
需求:产品经理需要APP跳转到公司的小程序(最好指定页面),做到互联互通,结果在网上搜索几天没找到,事实证明咱的搜索描述有问题。虽然战略调整暂时不需要,但实际该储备还是要储备的,特此记录。
考虑到部分场景下 APP 需要通过小程序来承载服务,为此 OpenSDK 提供了移动应用(APP)拉起小程序功能。移动应用(APP)接入此功能后,用户可以在 APP 中跳转至微信某一小程序的指定页面,完成服务后再跳回至原 APP 。
移动应用拉起小程序功能已向全体开发者开放,开发者在微信开放平台账号下申请移动应用并通过审核后,即可获得移动应用拉起小程序功能权限。
跳转规则
对于已通过认证的开放平台账号,其移动应用可以跳转至任何合法的小程序,且不限制跳转的小程序数量。对于未通过认证的开放平台账号,其移动应用仅可以跳转至同一开放平台账号下小程序。注意:若移动应用未上架,则最多只能跳转小程序100次/天,用于满足调试需求。
二、Android开发示例
2.1 下载 SDK
在 build.gradle 文件中,添加如下依赖即可:dependencies { //两种方式都可以,我这边指定了版本 implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.30' //api 'com.tencent.mm.opensdk:wechat-sdk-android:+'}
由于 jCenter 服务关停,需要修改成引用 Maven Central,在项目的根 build.gradle 文件中,添加如下代码即可: buildscript { repositories { jcenter() // 原有 jCenter 引用可继续保留 mavenCentral() }}allprojects { repositories { jcenter() // 原有 jCenter 引用可继续保留 mavenCentral() }}
由于 jCenter 服务关停,需要修改成引用 Maven Central,在项目(高版本)的根 settings.gradle 文件中,添加如下代码即可: pluginManagement { repositories { google() mavenCentral() jcenter() // 原有 jCenter 引用可继续保留 gradlePluginPortal() }}dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() jcenter() // 原有 jCenter 引用可继续保留 maven { url 'https://jitpack.io' } }}
2.2 调用接口
SDK 下载成功后,直接引用即可。
调用接口:WXLaunchMiniProgram
移动应用跳转到小程序示例:
String appId = "wxd930ea5d5a258f4f"; // 填移动应用(App)的 AppId,非小程序的 AppID IWXAPI api = WXAPIFactory.createWXAPI(this, ""); WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req(); req.userName = "gh_e41deef720ad"; // 填小程序原始id req.path = ""; // path:拉起小程序页面的可带参路径,不填默认拉起小程序首页。 // 对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 可选打开 开发版,体验版和正式版 api.sendReq(req);
因此我们需要针对移动应用申请 AppID。
因为我仅是调试体验,因此没有移动应用AppId,如果乱填会有如下提示:
2.3 获取小程序原始Id
路径:进入小程序=>右上方【···(更多)】=>点击弹窗左上方小程序名称=>选择更多资料即可查看。
2.4 报错提示:bad_param
2.4.1 错误日志
launchWXUsingPendingIntent pendingIntent send failed: com.shenhua.zhihui.ai: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
百度翻译:launchWXUsingPendingIntent pendingIntent发送失败:com.shenhua.zhihui.ai:目标S+(版本31及以上)要求在创建pendingIntent时指定FLAG_IMUTABLE或FLAG_MUTTABLE之一。
强烈建议使用FLAG_IMUTABLE,只有当某些功能依赖于PendingIntent是可变的时,才使用FLAG_MUTTABLE,例如,如果它需要与内联回复或气泡一起使用。
2.4.2 解决方案
无论第三方应用targetSdkVersion是否升级为30,均需要进行微信 Android SDK版本升级适配。
targetSdkVersion升级到30的第三方应用,由于Android 11 软件包可见性 特性的影响,OpenSDK的接口可能无法正常拉起微信,从而无法使用微信的部分功能,需要在主工程的AndroidManifest.xml 中增加标签,代码如下:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> ... // 在应用的AndroidManifest.xml添加如下<queries>标签 <queries> <package android:name="com.tencent.mm" /> <!--指定微信包名--> </queries> ...</manifest>
测试结果:已经没有上面的错误了,但还是提示 bad_param,不排除我没有添加AppId的可能。后面就不往下走啦,需要