使用Universal Links与Android App Links实现网页无缝跳转至应用

一、简介

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 是一种特殊的深度链接,它允许用户通过点击网站的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,开发者可以为用户提供从网页到应用的无缝跳转体验,同时确保了安全性。重要的是要正确配置应用和服务器端的验证机制,并考虑到用户体验和错误处理,以确保流畅且安全的跳转过程。

相关推荐
花花鱼2 小时前
android studio 设置让开发更加的方便,比如可以查看变量的类型,参数的名称等等
android·ide·android studio
alexhilton3 小时前
为什么你的App总是忘记所有事情
android·kotlin·android jetpack
AirDroid_cn7 小时前
OPPO手机怎样被其他手机远程控制?两台OPPO手机如何相互远程控制?
android·windows·ios·智能手机·iphone·远程工作·远程控制
尊治7 小时前
手机电工仿真软件更新了
android
杂雾无尘8 小时前
开发者必看,全面解析应用更新策略,让用户无法拒绝你的应用更新!
ios·xcode·swift
车载应用猿10 小时前
基于Android14的CarService 启动流程分析
android
没有了遇见11 小时前
Android 渐变色实现总结
android
Digitally11 小时前
如何将iPhone备份到Mac/MacBook
macos·ios·iphone
帅次12 小时前
【iOS设计模式】深入理解MVC架构 - 重构你的第一个App
ios·swiftui·objective-c·iphone·swift·safari·cocoapods