深度解析:Android APP集成与拉起微信小程序开发全攻略

目录

一、背景以及功能介绍

二、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 。
        移动应用拉起小程序功能已向全体开发者开放,开发者在微信开放平台账号下申请移动应用并通过审核后,即可获得移动应用拉起小程序功能权限。

跳转规则

  1. 对于已通过认证的开放平台账号,其移动应用可以跳转至任何合法的小程序,且不限制跳转的小程序数量。
  2. 对于未通过认证的开放平台账号,其移动应用仅可以跳转至同一开放平台账号下小程序。

注意:若移动应用未上架,则最多只能跳转小程序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的可能。后面就不往下走啦,需要微信公众号平台账号(我当遗失了,暂时没时间搞先搁置),感兴趣有条件的朋友可以自己试试。

        iOS同理

相关推荐

APP拉起小程序功能-功能介绍 | 微信开放文档

讯飞、阿里云、腾讯云:Android 语音合成服务对比选择-CSDN博客

讯飞与腾讯云:Android 实时语音识别服务对比选择-CSDN博客

猜你喜欢

转载自blog.csdn.net/g984160547/article/details/143398956