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

news2024/11/15 19:16:23

目录

一、背景以及功能介绍

二、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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stream学习

Stream流 定义 Steam流&#xff0c;用于操作集合或者数组中的数据&#xff0c;大量结合了Lamda表达式的语法风格&#xff0c;代码简洁。 重点&#xff1a; 流只能收集一次 ​ 获取Stream流 Stream流要与数据源建立连接。 1.list ​ 直接调用steam()即可 // list List<Stri…

python基础大杂烩

命令提示符程序&#xff0c;输入python&#xff0c;运行python程序 代码通过解释器程序翻译给计算机去执行 命令提示符输入的python本质上就是调用D:/dev/python/python3.12.5/python.exe这个解释器程序 有python程序将输入的代码翻译成二进制的0和1&#xff0c;去向计算机去运…

嵌入式硬件实战提升篇(一)-泰山派RK3566制作多功能小手机

引言&#xff1a;主要针对于嵌入式全栈内容的知识点汇总并对于linux等相关驱动知识点进行串联&#xff0c;用大家参考学习&#xff0c;并用到了嘉立创提供的泰山派RK3566作为学习的主控。 实物演示如下所示&#xff1a; 目录 一、硬件设计 1.转接电路 2.背光电路 3.音频接…

用两行命令快速搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),包含完整的 Docker 安装步骤

深度学习环境的配置过于繁琐&#xff0c;所以我制作了两个基础的镜像&#xff0c;希望可以帮助大家节省时间&#xff0c;你可以选择其中一种进行安装&#xff0c;版本说明&#xff1a; base 版本基于 pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel&#xff0c;默认 python 版本…

11个c语言编程练习题

0. 钞票和硬币 money.c 读取一个带有两个小数位的浮点数&#xff0c;代表货币价值。将该值分解为多种钞票和硬币的和&#xff0c;要求使用的钞票和硬币的总数量尽可能少。 货币面值有100&#xff0c;50&#xff0c;20&#xff0c;10&#xff0c;5&#xff0c;1&#xff0c;0.…

LaTeX之四:如何兼容中文(上手中文简历和中文论文)、在win/mac上安装新字体。

改成中文版 如果你已经修改了.cls文件和主文档&#xff0c;但编译后的PDF仍然显示英文版本&#xff0c;可能有以下几个原因&#xff1a; 编译器问题&#xff1a;确保你使用的是XeLaTeX或LuaLaTeX进行编译&#xff0c;因为它们对Unicode和中文支持更好。你可以在你的LaTeX编辑器…

K8S如何基于Istio实现全链路HTTPS

K8S如何基于Istio实现全链路HTTPS Istio 简介Istio 是什么?为什么选择 Istio?Istio 的核心概念Service Mesh(服务网格)Data Plane(数据平面)Sidecar Mode(边车模式)Ambient Mode(环境模式)Control Plane(控制平面)Istio 的架构与组件Envoy ProxyIstiod其他组件Istio 的流量管…

安全见闻-泷羽sec课程笔记

编程语言 C语言&#xff1a;一种通用的、面向过程的编程语言&#xff0c;广泛应用于系统软件和嵌入式开发。 C:在C语言基础上发展而来&#xff0c;支持面向对象编程&#xff0c;常用于尊戏开发、高性能计算等领域。 Java:一种广泛使用的面问对象编程语言&#xff0c;具有跨平台…

论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking 文章概括摘要I. INTRODACTIONII. 相关工作III. APPROACHA. 姿态跟踪工作流程B. VIPose网络 文章概括 引用&#xff1a; inproceedings{ge2021vipose,title{Vipose: Real-time visual-inertial 6d object pose tra…

LeetCode 热题100(八)【二叉树】(3)

目录 8.11二叉树展开为链表&#xff08;中等&#xff09; 8.12从前序与中序遍历序列构造二叉树&#xff08;中等&#xff09; 8.13路径总和III&#xff08;中等&#xff09; 8.14二叉树的最近公共祖先&#xff08;中等&#xff09; 8.15二叉树中的最大路径和&#xff08;困…

【C语言】Union

一.Union的用法 1.什么是Union? union 共用体名{ 成员列表 }; union&#xff0c;“联合体、共用体”&#xff0c;在某种程度上类似结构体struct的一种数据结构&#xff0c;共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 2.为什么使用union&#xff1…

Postgresql源码(138)alter table增加列的执行流程分析

alter table 逻辑比较繁琐&#xff0c;但并不复杂&#xff0c;这里以增加列为例简单梳理流程。 测试用例 drop table t_echo; create table t_echo(a int,b int); insert into t_echo select t.i, t.i*10 from generate_series(1,10) t(i); alter table t_echo add c varchar…

MobaXterm 软件及如何设置取消自动断开连接

MobaXterm 软件及如何设置取消自动断开连接 背景软件资料取消自动断开连接找打设置找到SSH Setting 背景 其实很容易找到类似的资料, 主要为了简单的记录一下, 还是写一下这个博客吧, 也算是自己的输出了. 当练习打字也行吧, 反正自己打字也是一坨, 打字太慢了. 软件资料 官…

【代码审计】常见漏洞专项审计-业务逻辑漏洞审计

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 0x01 漏洞介绍 1、 原理 业务逻辑漏洞是一类特殊的安全漏洞&#xff0c;业务逻辑漏洞属于设计漏洞而非实…

YOLOv11实战垃圾分类

本文采用YOLOv11作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv11以其高效的特征提取能力&#xff0c;在多个图像分类任务中展现出卓越性能。本研究针对4种垃圾数据集进行训练和优化&#xff0c;该数据集包含丰富的垃圾图像样本&am…

Kafka集群中数据的存储是按照什么方式存储的?

1&#xff09;Topic 数据的存储机制 Topic是逻辑上的概念&#xff0c;而partition是物理上的概念&#xff0c;每个partition对应于一个log文件&#xff0c;该log文件中存储的就是Producer生产的数据。Producer生产的数据会被不断追加到该log文件末端&#xff0c;为防止log文件…

渗透测试靶场 - vulhub -CVE漏洞 Weblogic 任意文件上传漏洞(CVE-2018-2894) 漏洞讲解 漏洞复现 亲测步骤能通过哟

漏洞说明 Weblogic管理端未授权的两个页面存在任意上传jsp文件漏洞&#xff0c;可直接获取服务器权限。 两个页面 /ws_utc/begin.do /ws_utc/config.do Oracle 在2018年7月更新中&#xff0c;修复了Weblogic Web Service Test Page中一处任意文件上传漏洞&#xff0c; Web Se…

使用 PyTorch 实现 AlexNet 进行 MNIST 图像分类

AlexNet 是一种经典的深度学习模型&#xff0c;它在 2012 年的 ImageNet 图像分类比赛中大放异彩&#xff0c;彻底改变了计算机视觉领域的格局。AlexNet 的核心创新包括使用深度卷积神经网络&#xff08;CNN&#xff09;来处理图像&#xff0c;并采用了多个先进的技术如 ReLU 激…

基于图的去中心化社会推荐过滤器

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月11日19点20分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17176636216843&uideba758a1550b46bb…

深度学习模型评价指标介绍

模型评价指标 模型评价指标1.混淆矩阵2.Overall Accuracy3.Average accuracy4.Kappa系数5.Recall6.Precision7.F18.PR曲线9.置信度10.IOU11.AP12.mAP 模型评价指标 在我们学习机器学习以及深度学习&#xff0c;甚至在计算机视觉领域&#xff0c;我们不可避免的要利用一些指标评…