uniapp App跳转微信小程序并互相传递参数、接收微信小程序传递的参数

1、App端跳转微信小程序(注意id一定是小程序的原始ID,在小程序后台设置-基本设置里可以看到)

注意:与微信小程序跳转微信小程序不同,App端不支持 uni.navigateToMiniProgram,App平台打开微信小程序,需要使用plus.share的 launchMiniProgram

// App端跳转微信小程序
const appJumpMiniPro = () => {
    // 获取分享服务列表
    plus.share.getServices(
        res => {
            let sweixin: any = '';
            for (var i = 0; i < res.length; i++) {
                let t: any = res[i];
                if (t.id == 'weixin') {
                    sweixin = t;
                }
            }
            if (sweixin) {
                sweixin.launchMiniProgram(
                    {
                        id: 'gh_11af7705af70',  // 要跳转小程序的原始ID
 
<think>我们正在讨论的是在UniApp中不使用`plus.share`打开微信小程序的实现方法。根据之前的引用,我们知道通常使用`plus.share.getServices`来获取微信分享服务,然后通过`launchMiniProgram`方法打开小程序。但是用户现在要求不使用`plus.share`。 在UniApp中,除了使用`plus.share`模块,还可以考虑使用`uni.navigateToMiniProgram`(但注意这个API是用于小程序环境跳转另一个小程序的,在App端不可用)或者使用URL Scheme。 对于App端,微信提供了URL Scheme来打开小程序。我们可以通过生成微信小程序的URL Scheme,然后使用`plus.runtime.openURL`或`uni.openScheme`(HBuilderX 3.2.0+)来打开。 微信官方文档说明:自2021年5月20日起,URL Scheme调整,需要先获取scheme码。具体步骤如下: 1. 在微信开放平台(open.weixin.qq.com)中,为你的移动应用关联小程序申请开通URL Scheme权限。 2. 在开放平台后台的“应用详情-开发信息”中,找到“URL Scheme”区域,点击“申请”按钮,填写申请表单。申请通过后,即可生成URL Scheme。 生成的URL Scheme格式为:`weixin://dl/business/?t=xxxxxx`(其中t为时间戳,实际使用时需要替换为申请到的具体参数)。 但是,注意:微信小程序的URL Scheme需要在小程序管理后台生成,且有使用限制(如每天限量,单个Scheme只能使用一次等)。因此,通常我们会在服务端动态获取Scheme,然后由App端使用。 步骤: 1. 在微信小程序管理后台,配置URL Scheme:登录小程序后台,进入“工具”->“生成URL Scheme”,填写小程序的路径和参数,生成Scheme。注意:此Scheme有效期最长30天,且每个Scheme被用户访问后失效。 2. 将生成的Scheme传递App端(可以通过接口请求获取)。 3. 在App端使用`plus.runtime.openURL`或`uni.openScheme`打开这个Scheme。 示例代码: 假设我们已经从服务器获取到了小程序的URL Scheme(例如:`weixin://dl/business/?t=xxxxx`),那么可以这样打开: ```javascript // 在UniApp中 // 使用plus.runtime.openURL plus.runtime.openURL("weixin://dl/business/?t=xxxxx", function(error) { // 如果打开失败,可能是因为没有安装微信 uni.showToast({ title: '打开失败,请检查是否安装微信', icon: 'none' }); }); // 或者使用uni.openScheme(需要HBuilderX 3.2.0+) // uni.openScheme({ // url: "weixin://dl/business/?t=xxxxx", // success: () => {}, // fail: (err) => { // uni.showToast({ // title: '打开失败', // icon: 'none' // }); // } // }); ``` 但是,请注意: - 这种方式需要每次打开小程序前都请求服务器生成新的Scheme(因为Scheme只能使用一次),或者使用长期有效的Scheme(如果有的话,但微信目前没有提供长期有效的Scheme)。 - 另外,微信官方对URL Scheme的生成有频率限制(每天最多50万个),所以需要合理使用。 另一种方法是使用微信开放平台提供的SDK,但UniApp没有直接封装不使用`plus.share`的打开小程序方法。因此,如果不想使用`plus.share`,URL Scheme是可行的替代方案。 但是,用户可能是在App端操作,所以我们需要确保用户已经安装了微信,否则打开会失败。我们可以先检测是否安装了微信,然后再打开: ```javascript // 检测是否安装微信 if (plus.runtime.isApplicationExist({pname:'com.tencent.mm', action:'weixin://'})) { // 已安装微信,使用URL Scheme打开小程序 plus.runtime.openURL("weixin://dl/business/?t=xxxxx"); } else { uni.showToast({ title: '请安装微信', icon: 'none' }); } ``` 但是,`plus.runtime.isApplicationExist`在Android上可以检测,iOS上可能受限。因此,我们可以直接打开,然后在失败回调中处理。 总结:不使用`plus.share`打开微信小程序,可以使用微信提供的URL Scheme,通过`plus.runtime.openURL`或`uni.openScheme`打开。但需要注意URL Scheme的生成和限制。 注意:由于微信官方对URL Scheme的调整,现在生成URL Scheme需要在微信小程序后台操作,且有使用次数限制。因此,对于频繁打开小程序的场景,建议还是使用`plus.share`的`launchMiniProgram`方法(它不需要每次生成Scheme,且没有次数限制)。如果用户有特殊原因不能使用`plus.share`,则可以采用URL Scheme方式。 如果用户的应用场景是打开企业微信,那么可以使用`weixin://biz/ww/profile/`开头的URL(如引用[1]中所示),但这是打开企业微信个人页,而不是打开小程序。 因此,针对打开小程序,我们采用生成URL Scheme的方式。 另外,需要注意的是,在iOS系统中,需要在manifest.json中配置白名单,添加`weixin`的scheme: ```json "app-plus": { "distribute": { "ios": { "urlschemewhitelist": ["weixin"] } } } ``` 否则,在iOS上可能无法唤醒微信。 以上就是在UniApp中不使用`plus.share`打开微信小程序的实现方法。</think>### UniApp中不使用`plus.share`打开微信小程序的实现方法 在UniApp中,若需避开`plus.share`模块实现App跳转微信小程序,可通过以下两种方案实现: --- #### **方案1:使用URL Scheme直接唤起(推荐)** 微信官方提供URL Scheme机制直接唤起小程序,无需依赖`plus.share`模块: ```javascript // 唤起微信小程序 const openMiniProgram = () => { // 从微信小程序后台获取生成的URL Scheme(需服务端动态生成) const schemeUrl = "weixin://dl/business/?t=xxxxx"; // 替换为实际Scheme plus.runtime.openURL(schemeUrl, (error) => { if (error) { uni.showToast({ title: "唤起失败,请检查微信安装状态", icon: "none" }); } }); } ``` **关键步骤**: 1. **生成URL Scheme**: - 登录[微信小程序后台](https://mp.weixin.qq.com/) → 工具 → 生成URL Scheme - 填写目标小程序的原始ID(`gh_xxxxxx`)、页面路径及参数 - 生成的Scheme格式:`weixin://dl/business/?t=xxxxx` 2. **注意事项**: - ⚠️ Scheme有效期最长30天,且**每个Scheme仅限使用一次** - 需服务端动态生成Scheme,避免客户端硬编码 - iOS需在`manifest.json`配置URL Scheme白名单: ```json "app-plus": { "distribute": { "ios": { "urlschemewhitelist": ["weixin"] } } } ``` --- #### **方案2:调用原生插件(需额外开发)** 若需长期有效的唤起方式,需开发原生插件: 1. **Android原生实现**: ```java // 在原生模块中调用微信API public void openMiniProgram(String originalId, String path) { IWXAPI api = WXAPIFactory.createWXAPI(context, "微信开放平台APP_ID"); WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req(); req.userName = originalId; // 小程序原始ID req.path = path; // 页面路径 req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_RELEASE; api.sendReq(req); } ``` 2. **iOS原生实现**: ```objectivec // 调用微信SDK WXLaunchMiniProgramReq *req = [WXLaunchMiniProgramReq object]; req.userName = @"gh_xxxxxx"; // 小程序原始ID req.path = @"pages/index/index"; req.miniProgramType = WXLaunchMiniProgramTypeRelease; [WXApi sendReq:req completion:nil]; ``` 3. **UniApp插件封装**: - 将原生代码封装为UniApp原生插件 - 通过`uni.requireNativePlugin`调用 --- ### **两种方案对比** | **方案** | 优点 | 缺点 | 适用场景 | |----------------|-------------------------------|-------------------------------|-----------------------| | **URL Scheme** | 无需原生开发,实现简单 | Scheme需动态生成,有调用次数限制 | 低频跳转场景 | | **原生插件** | 无次数限制,性能稳定 | 需额外开发原生插件 | 高频跳转/企业级应用 | > **实践建议**: > - 短期需求优先使用URL Scheme(注意管理Scheme生成频率) > - 长期高频需求建议开发原生插件,参考微信开放平台文档[^1] > - 确保微信开放平台中APP小程序已绑定同一账号[^2] --- ### 相关问题 1. URL Scheme调用次数超限该如何处理? 2. 如何动态生成微信小程序的URL Scheme? 3. UniApp中如何开发调用微信SDK的原生插件? 4. iOS配置URL Scheme白名单有哪些注意事项? [^1]: [微信开放平台文档 - URL Scheme](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/url-scheme.html) [^2]: [UniApp官方文档 - 模块配置](https://uniapp.dcloud.net.cn/tutorial/app-ios-schemes.html)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值