cordova-wtto00-universal-link v1.0.1
cordova-wtto00-universal-link
参考 e-imaxina/cordova-plugin-deeplinks
- 🌟 支持 Android 13
- 🌟 添加 Types 定义
- 🐛 修复了一些在最新版本 SDK 上面出现的问题
官方文档
用法
- 安装插件 (查看 安装).
- 在
config.xml中配置链接 (查看 Cordova 配置). - 监听链接启动事件 (查看 监听链接启动事件).
- web 集成 (查看 安卓 web 集成 和 iOS-web 集成).
- 启动项目,本地测试 (查看 安卓本地测试 和 iOS 本地测试).
支持平台
- Android 4.0.0 或以上。
- iOS 9.0 或以上。
安装
cordova plugin add cordova-wtto00-universal-linkCordova 配置
项目根目录下的config.xml。
示例:
<universal-links>
<host name="example.com">
<path url="/some/path/*" />
</host>
</universal-links>host
<host /> 标签表示 universal link 的主机信息
name- 域名,必填。scheme- 协议http或者https. 默认是http。event- 链接启动 APP 后,在 APP 中监听的事件名称。默认事件名称是:didLaunchAppFromLink
示例:
<universal-links>
<host name="example.com" scheme="https" event="my_launch_event_name" />
</universal-links>这个示例表示,用户浏览器进入 https://example.com 后,将会打开 APP,然后在 APP 中触发监听的 ul_myExampleEvent 事件。详情查看 监听链接启动事件.
你还可以使用域名通配符:
<universal-links>
<host name="*.users.example.com" scheme="https" event="my_launch_event_name_from_user" />
<host name="*.example.com" scheme="https" event="my_launch_event_name" />
</universal-links>path
<path /> 标签定义主机域名下的哪些路径将被响应打开 APP。如果没有 path 标签,则响应所有的路径。
url- 路径地址 This is a required attribute.event- 链接启动 APP 后,在 APP 中监听的事件名称。空缺的话,将会触发父级host标签上定义的事件名称。
多个 path 标签,可以对与不同的链接路径,监听不同的处理事件。
示例:
<universal-links>
<host name="example.com">
<path url="/some/path" event="my_launch_event_for_this_path" />
</host>
</universal-links>当浏览器访问 http://example.com/some/path 时,将打开 APP。该域名下的所有其他链接都将被忽略,不会响应。
注意:url 的 query 参数不会计入匹配规则中。即 http://example.com/some/path?foo=bar#some_tag 一样可以正常响应。
如果想要支持 /some/path/ 后面的所有子路径,你可以使用 * 通配符。
比如:
<universal-links>
<host name="example.com">
<path url="/some/path/*" />
</host>
</universal-links>* 通配符用在 path 标签的 url 路径时,可以放在路径的任意位置。
比如:
<universal-links>
<host name="example.com">
<path url="*mypath*" />
</host>
</universal-links>这个配置将会响应以下示例:
http://example.com/some/long/mypath/test.htmlhttp://example.com/testmypath.html
等等...
ios-team-id
ios-team-id 标签用于生成 iOS 配置文件 apple-app-site-association。
当使用 CLI 构建项目时,本插件会自动在 ul_web_hooks 目录中生成用于上传到服务器的配置文件 apple-app-site-association
示例:
config.xml :
<widget id="com.example.ul" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<!-- some other cordova preferences -->
<universal-links>
<ios-team-id value="1Q2WER3TY" />
<host name="mysite.com" >
<path url="/some/path/*" />
</host>
</universal-links>
</widget>将会生成配置文件 apple-app-site-association :
{
"applinks": {
"apps": [],
"details": [
{
"appID": "1Q2WER3TY.com.example.ul",
"paths": ["/some/path/*"]
}
]
}
}该标签作用仅仅是生成这个 iOS 的配置文件。不影响打包运行。Android 会忽略此配置。
阻止安卓生成多个 APP 实例
当通过 universal link 打开安卓 APP 时,安卓默认会重新生成一个新实例,即使 APP 已经在运行中。
为了解决此问题,需要在 config.xml 文件中配置单例模式:
<preference name="AndroidLaunchMode" value="singleInstance" />监听链接启动事件
仅仅是打开 APP 是不够的,你需要获得打开 APP 的链接地址,然后根据链接地址以及参数,做各种不同的逻辑处理。universalLinks 变量已挂载在全局变量 window 下,可以直接使用,并且在 Typescript 中也定义了类型。
注意: 监听事件,必须在 cordova 生命周期的 deviceready 事件后执行,即 document.addEventListener("deviceready",callback, false); 中的回调 callback 中注册监听事件。
示例:
universalLinks.subscribe('eventName', function (eventData) {
// do some work
console.log('Did launch application from the link: ' + eventData.url)
})如果你没有在 config.xml 中配置 eventName, 则可以使用默认的事件名称 didLaunchAppFromLink。
universalLinks.subscribe('didLaunchAppFromLink', function (eventData) {
// do some work
console.log('Did launch application from the link: ' + eventData.url)
})eventData 参数是打开 APP 的链接地址。
比如: 对于 http://myhost.com/news/ul-plugin-released.html?foo=bar#cordova-news
eventData 将会是如下的数据:
{
"url": "http://myhost.com/news/ul-plugin-released.html?foo=bar#cordova-news",
"scheme": "http",
"host": "myhost.com",
"path": "/news/ul-plugin-released.html",
"params": {
"foo": "bar"
},
"hash": "cordova-news"
}如果你想,你还可以取消监听该事件,如下所示:
universalLinks.unsubscribe('eventName')web-集成
前端方面的已基本完成了,接下来你需要在后端服务器上面做一些配置。
假如你在 config.xml 中是这样配置的:
<universal-links>
<ios-team-id value="1Q2WER3TY" />
<host name="mysite.com" scheme="https" >
<path url="/some/path/*" />
</host>
</universal-links>安卓 web 集成
在服务器上传配置文件
按照上面的
config.xml示例,你需要在mysite.com域名所解析的服务器上的根目录中,创建.well-known目录,并在该目录下,创建文件assetlinks.json,内容如下:[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "<PACKAGE_ID>", "sha256_cert_fingerprints": ["<SHA256_CERT_FINGERPRINTS>"] } } ]详情可查看 官方说明
<PACKAGE_ID>: 你的包名。<SHA256_CERT_FINGERPRINTS>: 应用的签名证书的 SHA256 指纹。可以通过以下命令获得。keytool -list -v -keystore my-release-key.keystore # 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5
确认配置文件有效性
按照上面的配置示例:https://mysite.com/.well-known/assetlinks.json该链接应该能够正常访问或可以下载。https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://mysite.com&elation=delegate_permission/common.handle_all_urls该链接应该能返回配置的正确信息。
注意:测试链接,请更换为自己的配置信息。
在链接
html页面上添加信息<link rel="alternate" href="android-app://<PACKAGE_ID>/<SCHEME>/<HOST><PATH>" /><PACKAGE_ID>: APP 包名。<SCHEME>:config.xml中配置的host标签协议。<HOST>:config.xml中配置的host标签域名。<PATH>:config.xml中配置的host中子元素path标签地址。假如配置多个path标签,则需要有多个对应的link标签。
config.xml中配置后,通过 CLI 启动命令cordova prepare android会自动在项目根目录下的ul_web_hooks/android目录中生成一个android_web_hook.html文件。可以拷贝其中的link标签,粘贴到自己网站页面的html中。在其他页面手动触发打开 APP
如果你想在任意的其他页面,手动触发打开 APP,
- 可以使用
a标签即:<a href="android-app://<PACKAGE_ID>/<SCHEME>/<HOST><PATH>">打开APP</a>。 - 或者使用重定向:
window.location.href = 'android-app://<PACKAGE_ID>/<SCHEME>/<HOST><PATH>'
- 可以使用
iOS-web 集成
在服务器上上传配置文件
按照上面的
config.xml示例,你需要在mysite.com域名所解析的服务器上的根目录中,创建.well-known目录,并在该目录下,创建文件apple-app-site-association,内容如下:{ "applinks": { "apps": [], "details": [ { "appID": "<TEAM_ID_FROM_MEMBER_CENTER>.<BUNDLE_ID>", "paths": ["/some/path/*"] } ] } }也可以直接在根目录中创建该文件,
.well-known目录可省略。<TEAM_ID_FROM_MEMBER_CENTER>: 开发者 team_id。<BUNDLE_ID>: APP 包名。
config.xml中配置后,通过 CLI 启动命令cordova prepare ios会自动在项目根目录下的ul_web_hooks目录中生成文件<hostname>#apple-app-site-association。可改名后直接上传到自己的域名服务器中。确认配置文件有效性
按照上面的配置示例:https://mysite.com/.well-known/apple-app-site-association或者https://mysite.com/apple-app-site-association该链接应该能够正常访问或可以下载。https://app-site-association.cdn-apple.com/a/v1/mysite.com该链接应该能返回配置的正确信息。
注意:测试链接,请更换为自己的配置信息。
Associated Domains
注意: 在
apple开发者中心创建,在xcode中打包,所使用的证书,应该包含此功能选项。
启动项目
现在万事具备了,启动项目,开始测试吧。
安卓本地测试
启动项目
cordova run android在设备上,关闭刚刚安装打开的 APP
在终端中执行:
adb shell am start -W -a android.intent.action.VIEW -d "<URL>" <PACKAGE_ID><URL>: 响应的链接地址。按照上面的示例,应该是:http://mysite.com/some/path/。<PACKAGE_ID>: APP 包名。 注意: 更换为自己的配置信息。
没有出错的话,设备上应该直接打开了你正在开发的 APP。
ios 本地测试
启动项目
cordova run ios在设备上,关闭刚刚安装打开的 APP
- 在设备上,打开
safari,输入地址http://mysite.com/some/path/并访问。
注意: 更换为自己的配置信息。
没有出错的话,设备上应该直接打开了你正在开发的 APP。