iOS - Universal Links

509 阅读3分钟

0x0000 背景 

        最近项目微信 sdk 升级到最新版,要求接入Universal Links服务,这里记录一下Universal Links 调研接入详细。

0x0001 调研

        Universal Links 是 iOS 9 推出的技术,如果APP支持Universal Links,那么就可以通过https链接来打开APP。

        跳转官方通道

        Universal Links 特性

  • Unique:不像自定义的 URL schemes,Universal Links不会被其它的APP所使用。因为它使用标准的HTTP/HTTPS链接到我们自己的往回走哪
  • Secure:当用户下载APP的时候,iOS会检查你上传到web服务器的文件以确保您的网站允许您的应用程序以其名义打开网址。因为只有本人有权利创建且上传该文件到服务器,所以网站和APP的关联是安全的。
  • Flexible:如果没有安装APP时Universal Links 也是可以正常使用的,当点击link时会直接在safari中打开url。
  • Simple:URL 可以同时为网站和 APP 提供服务。
  • Private:其他app可以与APP进行通信,不需要知道 APP是否安装。

0x0002 接入

注册域名

        domain域名必须支持 HTTPS 

创建并上传apple-app-site-association文件

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "teamID.bundleID",
                "paths": [ "*" ]
            },
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]
            }
        ]
    }
}

        注意事项:

  • apple-app-site-association 文件没有后缀,未压缩下不能超过128k
  • details 可添加多个配置,同时配置多个 APP 
  • appID 由 teamID 和 bundleID 组成,teamID 可以从开发者网站
    Membership
    里查询,bundleID 在 XCode 中查询
  • paths 限制哪些路径可以唤醒 APP ,"*"域名下全部都可以
  • apple-app-site-association 放到服务器(注册域名)的根目录下,也可以放到.well-known这个子目录下

        验证apple-app-site-association

  • 在浏览器中输入https://<domain>/apple-app-site-association 或 https://<domain>/.well-known/apple-app-site-association访问刚刚上传的文件
  • 通过 Apple 提供的测试网站进行验证是否上传文件是否正确。传送门

APP 内配置Universal Links

  1. 在开发这中心配置ASSociated Domains,并重新下载 profile,如果xcode 设置为Automatically manage signing 则可跳过这一步。
  2. xcode 配置ASSociated Domains,格式为applinks:<domain>,如果apple-app-site-association 文件在多个域名下,可以配置多个ASSociated Domains。
  3. 配置完成后体统会添加对应的工程文件entitlements可在工程文件查看刚才的配置
  4. 在AppDelegate中处理Universal links回调,通过userActivity获取跳转链接从而进行逻辑处理

    - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {    
        return YES;
    } 

测试

        将链接拷贝到备忘录,点击跳转是否可以打开 APP 即可。

0x0003 对比URL Scheme

        URL Scheme 提供 APP间相互跳转服务以及 web跳转 APP  的服务。外部可以通过 scheme 打开指定APP。如果有两个APP 定义 scheme 一样,则按照APP 安装顺序调用先安装的 APP,

        在 iOS 9 以前,我们从外部启动App都是通过URL Scheme实现跳转的。苹果添加提示框限制,这样的体验并不好,iOS 9 以后,Universal Link 完美的解决了这个问题。用户可以通过通用连接直接唤醒 APP,而不再需要其他操作。