uni-app中ios从微信分享页面打开app(app处于离线状态)时,获取到的plus.runtime.arguments参数为字符串但实际为路由地址,导致无法跳转到指定页面
uni-app中ios从微信分享页面打开app(app处于离线状态)时,获取到的plus.runtime.arguments参数为字符串但实际为路由地址,导致无法跳转到指定页面
返回的值是://platformId=wechat?_wechat_sdk_erased_paste_board_data=1&_wechat_sdk_biz_data=YnBsaXN0MDDcAQIDBAUGBwgJCgsMDQ4PDg4QERITFBUWXXJldHVybkZyb21BcHBab2JqZWN0VHlwZVZvcGVuSURfEBJtdXNpY1ZpZGVvRHVyYXRpb25fEBNtdXNpY1ZpZGVvSXNzdWVEYXRhWGxhbmd1YWdlXXdlY2hhdFZlcnNpb25WcmVzdWx0Wm1lc3NhZ2VFeHRcaXNBdXRvUmVzZW5kV2NvdW50cnlXY29tbWFuZFEwUTBfEBxveGJoSzY1UUxqVVote
1 回复
在uni-app中处理从微信分享页面打开应用(特别是在应用处于离线状态时)并获取到plus.runtime.arguments
参数作为路由地址进行页面跳转,确实是一个常见的需求。这里提供一个基于uni-app和HBuilderX的解决方案,通过解析plus.runtime.arguments
并跳转到指定的页面。
步骤
-
获取启动参数:在应用启动时,通过
plus.runtime.arguments
获取启动参数。 -
解析参数:检查参数格式,并提取出路由地址。
-
页面跳转:使用uni-app的页面跳转API跳转到指定的页面。
代码示例
main.js
在main.js
中,添加代码以在应用启动时处理启动参数:
// #ifdef APP-PLUS
plus.runtime.getLaunchOptions(function(options) {
if (options && options.referrerInfo && options.referrerInfo.extra) {
const launchArgs = options.referrerInfo.extra;
// 假设launchArgs是字符串形式的路由地址,例如'/pages/detail/detail?id=123'
uni.navigateTo({
url: decodeURIComponent(launchArgs) // 对URL进行解码处理
});
}
});
// #endif
// 其他应用初始化代码...
注意事项
- 条件编译:使用
#ifdef APP-PLUS
来确保代码只在5+ App(即使用HBuilderX打包的App)中执行。 - URL解码:如果启动参数中包含特殊字符,如
%20
(空格),则需要进行URL解码。 - 错误处理:在实际应用中,应添加更多的错误处理逻辑,比如检查
launchArgs
是否为有效的URL格式。
微信配置
确保在微信分享配置中,正确设置了referrerInfo.extra
字段,该字段应包含要跳转的路由地址。例如,在微信分享接口中设置:
wx.shareAppMessage({
title: '分享标题',
path: '/path/to/share', // 微信内部的分享路径,不影响app的跳转逻辑
success: function (res) {
// 分享成功后的回调
},
fail: function (err) {
// 分享失败后的回调
},
complete: function (info) {
// 分享完成后的回调(无论成功或失败)
}
}, {
referrerInfo: {
id: 'some_id',
extra: encodeURIComponent('/pages/detail/detail?id=123') // 编码后的路由地址
}
});
注意:上述微信配置中的referrerInfo
部分实际上在微信官方API中并不直接支持,这里的示例是为了说明如何在自定义逻辑中传递参数。在实际应用中,你可能需要通过其他方式(如服务器中转或生成带有参数的分享链接)来实现类似功能。