一、简介
Universal Link
iOS 9之前,一直使用的是URL Schemes技术来从外部对App进行跳转,但是iOS系统中进行URL Schemes跳转的时候如果没有安装App,会提示Cannot open Page的提示,而且当注册有多个scheme相同的时候,目前没有办法区分,但是从iOS 9起可以使用Universal Links技术进行跳转页面,这是一种体验更加完美的解决方案。
Universal Link的核心概念
- 传统URL Scheme的替代:
在iOS 9之前,应用间跳转通常使用自定义的URL Scheme。这种方式存在安全性和唯一性问题,且在某些情况下无法在浏览器中直接使用。Universal Link 的出现,解决了这些问题,使得开发者可以使用标准的HTTPS链接来管理App的跳转。
- 无缝跳转:
当用户点击一个已配置的Universal Link时,如果设备上已安装了相应的App,系统会自动打开该App,并跳转到App内部的特定页面或功能。如果设备上未安装该App,点击链接后会在Safari浏览器中打开对应的H5页面。
- 安全性和唯一性:
Universal Link 使用HTTPS协议,确保了链接的安全性。并且,一个Universal Link 只能对应一个App,避免了链接冲突的问题,这相比于传统的URL Scheme 更有优势。
Android App Links
Android App Links 是一种特殊的深度链接,它允许用户通过点击网站的HTTP/HTTPS 链接,直接在已安装的Android 应用中打开相应的内容,无需用户进行选择。这种机制可以改善用户体验,提高应用流量,并帮助发现应用中最受欢迎的内容。
Android App Links 的核心概念
- HTTP/HTTPS 链接:
Android App Links 使用标准的HTTP 或HTTPS 链接,而不是自定义的URL scheme,这使得链接更容易分享和使用,并且更符合网络标准。
- 自动打开应用:
当用户点击与应用关联的链接时,如果用户已安装该应用,系统会自动打开应用并跳转到相应的页面,无需用户进行选择。
- 网站与应用关联:
通过Digital Asset Links API 验证网站和应用之间的关联,确保只有拥有网站域名的应用才能处理该域名的链接。
- 避免歧义:
Android App Links 可以指定为特定链接类型的默认处理程序,避免了用户在打开链接时弹出选择应用对话框。
- 支持免安装应用:
Android App Links 也支持Android Instant Apps,允许用户在不安装完整应用的情况下体验部分应用功能。
安全性考量
验证机制
-
Universal Links:使用apple-app-site-association文件,该文件包含了应用的 Bundle ID 和网站域名,通过SSL证书进行验证。
-
Android App Links:使用assetlinks.json文件,该文件包含了应用的包名和SHA-256证书指纹,同样通过HTTPS进行验证。
防止滥用
-
限制跳转:只允许特定的应用处理特定的链接,防止恶意应用通过伪造链接进行跳转。
-
定期更新证书:定期更新SSL证书和相关验证文件,以防止证书被破解或滥用。
用户体验
-
无缝跳转:确保用户在点击链接时能够无缝跳转到应用,无需额外确认。
-
错误处理:如果链接无法直接打开应用,应提供明确的错误信息,并引导用户通过浏览器打开。
二、使用示例
Android App Links配置示例
1,在Android应用的AndroidManifest.xml中配置intent-filter:
<activity android:name=".MainActivity">
<intent-filter>
<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="www.example.com" />
</intent-filter>
</activity>
其中,"https"是定义的方案名称,"www.example.com"是自定义的主机名称。当其它 app 或者 web 页面跳转时,需要这样使用 url scheme即可:
https://www.example.com
2,将生成assetlinks.json文件并上传到服务器:
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": ["...]" ]
}
}
]
iOS Universal Links配置示例
1,在iOS应用的Info.plist中配置相关字段,并创建apple-app-site-association文件:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>https</string>
</array>
</dict>
</array>
2,创建apple-app-site-association文件并上传到服务器:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
其中,appID的组成方式是TeamID.BundleID,如上面的9JA89QQLNQ就是teamId。
三、总结
通过使用Universal Links和Android App Links,开发者可以为用户提供从网页到应用的无缝跳转体验,同时确保了安全性。重要的是要正确配置应用和服务器端的验证机制,并考虑到用户体验和错误处理,以确保流畅且安全的跳转过程。