iOS Universal Links

 原创    2020-03-29

上周,微信开发者公众号发布了《微信开放平台移动应用 SDK 更新提醒》的文章,提醒开发者升级微信iOS SDK,以适配iOS 13系统版本的更新,主要是Universal Links的适配。

对于开发者来说,本次更新主要涉及到Universal Links的适配。Universal Links并不是新技术,早在iOS 9系统上就已经在应用了。在微信openSDK 1.8.6版本之前,iOS APP使用的微信登录、分享功能借助的是URL scheme的通信方式,在1.8.6版本后,则采用了Universal Links方式对调用openSDK的合法性进行校验。和URL scheme方式相比,Universal Links方式操作更加安全便捷。

Universal Links的原理比较好理解:iOS APP可以配置支持applinks的Associated Domains,在APP安装或更新时,系统会从指定域名的.well-known/apple-app-site-association路径访问Universal Links配置。Universal Links配置指示了APP能处理的该域名下的路径(可以是一个或多个),也就是该域名的指定路径和APP的内容有对应的关系。当从Safari中访问该域名下的指定路径时,iOS系统会查询当前url是否在APP有注册,有的话就可以直接打开对应APP的内容。

微信openSDK iOS接入指南,有详细的配置说明,这里只谈几个需要注意的点。

Universal Links的格式

通过以下方式访问apple-app-site-association:

https://<fully qualified domain>/.well-known/apple-app-site-association

在iOS 13系统上,最新的apple-app-site-association格式有变动:

{
  "applinks": {
      "details": [
           {
             "appIDs": [ "ABCDE12345.com.example.app", "ABCDE12345.com.example.app2" ],
             "components": [
               {
                  "/": "/buy/*",
                  "comment": "Matches any URL whose path starts with /buy/"
               }
               ...
             ]
           }
       ]
   }
}

这个格式和iOS 12使用的格式不一样。

iOS APP的配置和处理

在正确配置了Associated Domains之后,在AppDelegate的

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Swift.Void) -> Bool

将会收到Universal Links的调用,在这个方法中根据不同的请求url调用APP页面。

确保Universal Links生效

保持手机网络畅通,更新或重装APP,以便iOS 系统能拉取到最新的Universal Links配置(也就是请求https://<fully qualified domain>/.well-known/apple-app-site-association)。

如何验证Universal Links生效

可以使用iOS自带的备忘录程序,输入链接,长按链接,如果弹出菜单中有”在‘xxx’中打开”,即表示配置生效。

微信开放平台的Universal Links如何填写?

微信开放平台的Universal Links应该是一个不带参数的url,路径可以根据需要自定义,比如:https://<fully qualified domain>/wechat/,同时需要在apple-app-site-association文件配置一项/wechat/*

Supporting Associated Domains in Your App

相关文章:

iOS Crash log 符号化
iOS performSelector使用int等基本数据类型的问题
iOS安全:iOS APP注入动态库重打包(非越狱)
iOS URLSession Authentication Challenge及SSL Pinning
CocoaPods Podfile and podspec configurations

发表留言

您的电子邮箱地址不会被公开,必填项已用*标注。发布的留言可能不会立即公开展示,请耐心等待审核通过。