Ionic5使用ionic-plugin-deeplinks时HTTPS深度链接无法打开应用求助
解决方案
HTTPS 协议的深链接无法直接拉起应用,核心原因是Android系统要求的App Links、iOS系统要求的Universal Links需要额外的服务端+端上配置,仅配置插件参数无法生效,可按以下步骤操作:
1. 升级基础依赖
你当前使用的 ionic-plugin-deeplinks@1.0.24 对Android 12+、iOS 15+以上系统兼容性存在缺陷,建议先升级到1.0.25及以上版本:
ionic cordova plugin rm ionic-plugin-deeplinks ionic cordova plugin add ionic-plugin-deeplinks@latest --variable URL_SCHEME=myScheme --variable DEEPLINK_SCHEME=https --variable DEEPLINK_HOST=myurl.com
同时确保安装对应版本的@ionic-native/deeplinks依赖:
npm install @ionic-native/deeplinks@5
2. Android端配置
2.1 注入Intent Filter
在config.xml的<platform name="android">节点下添加如下配置,自动向AndroidManifest注入深链接匹配规则:
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application/activity[@android:name='MainActivity']"> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="myurl.com" android:pathPrefix="/user/activate" /> </intent-filter> </edit-config>
如果需要匹配更多路径,可新增多个<data>节点配置不同的pathPrefix。
2.2 服务端放置验证文件
在你的域名https://myurl.com的.well-known目录下,放置名为assetlinks.json的验证文件,内容示例:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "你的应用包名", "sha256_cert_fingerprints": ["你的应用签名SHA256指纹"] } }]
要求:
- 文件可公开访问,无访问限制、无30x跳转
- HTTP响应头的Content-Type设置为
application/json - 测试阶段可同时添加debug签名和release签名的SHA256指纹,避免测试失败
3. iOS端配置
3.1 开启关联域名能力
- 登录苹果开发者后台,在对应App ID的配置中开启
Associated Domains能力 - 在Xcode项目的
Signing & Capabilities中添加Associated Domains项,值为applinks:myurl.com
3.2 服务端放置验证文件
在你的域名https://myurl.com的.well-known目录下,放置名为apple-app-site-association的验证文件(不要添加.json后缀),内容示例:
{ "applinks": { "apps": [], "details": [ { "appID": "你的苹果团队ID.你的应用Bundle ID", "paths": ["/user/activate/*"] } ] } }
要求同Android的验证文件,可公开访问、Content-Type为application/json、无跳转。
4. 路由匹配验证
在应用入口组件(通常是app.component.ts)中添加路由监听逻辑,示例:
import { Deeplinks } from '@ionic-native/deeplinks/ngx'; import { ActivatePage } from './pages/activate/activate.page'; constructor(private deeplinks: Deeplinks) { this.deeplinks.route({ '/user/activate': ActivatePage }).subscribe(match => { // 获取链接参数,处理激活逻辑 const linkGuid = match.$args.link; console.log('收到激活参数', linkGuid); }, err => { console.log('未匹配到深链接', err); }); }
5. 测试方法
- Android测试:执行命令
adb shell am start -W -a android.intent.action.VIEW -d "https://myurl.com/user/activate?link=test123" 你的应用包名,验证是否直接拉起应用 - iOS测试:将测试链接发送到iOS设备的备忘录中,点击链接验证是否直接跳转应用,不要直接在Safari地址栏输入链接测试
内容的提问来源于stack exchange,提问作者Yheeky
相关产品推荐
相关产品推荐

