问题现象
应用内点击第三方应用图标,出现短暂loading后,没有成功拉起跳转到第三方应用。
背景知识
- 拉起指定应用:发起方应用明确指定跳转的目标应用,来实现应用跳转。指向性跳转可以分为指定应用链接、指定Ability两种方式。指定应用链接(推荐):通过openLink或startAbility接口来指定应用链接,拉起目标应用页面。
- Deep Linking:是一种通过链接跳转至应用特定页面的技术,其特点是支持开发者定义任意形式的scheme。由于缺乏域名校验机制,容易被其他应用所仿冒。
- App Linking:其限定了scheme必须为https,同时通过增加域名校验机制,可以从已匹配到的应用中筛选过滤出目标应用,消除应用查询和定位中产生的歧义,直达受信的目标应用。
- startAbility:启动一个UIAbility。使用callback异步回调。仅支持在主线程调用。
- Want.flags字段常用的系统预置关键字。开发者可以通过这些预置关键字设置或获取应用跳转等场景中额外携带的标志位信息。其中FLAG_START_WITHOUT_TIPS表示是否关闭匹配失败弹窗功能。
[h2]问题定位
排查context.openLink(link, { appLinkingOnly: true })中使用的link链接是否正确。
[h2]分析结论
context.openLink(link, { appLinkingOnly: true })中使用的link链接不是https的链接。
[h2]修改建议
context.openLink(link, { appLinkingOnly: true })中使用的link链接,必须为https开头的链接,参考如下:
let link: string = "https://www.example.com/programs?action=showall";
[h2]问题定位
排查Want中的flags字段是否设置为FLAG_START_WITHOUT_TIPS。
[h2]分析结论
Want中的flags字段设置为FLAG_START_WITHOUT_TIPS,导致没有能够匹配的应用,没有弹框提示。
[h2]修改建议
flags字段非必填字段可省略,参考如下:
let want: Want = { uri: "link://www.example.com" };