使用Universal Links
来取代Scheme
的跳转App功能,有更好的安全性(第三方不能使用这种方法跳转你的App),且不会弹出跳转确认框。可以查看官方文档 获取更详细的介绍。
要使用Universal Links
,首先需要一个网站,该网站必须使用https
协议(存疑,我使用http跳转也能成功),然后按以下步骤操作:
-
创建一个无后缀文件,文件名为
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
是一个App的唯一标识,写入格式为{TeamID}.{App BundleIdentifier}
path
是网站的目录,可写入多个,*
作为通配符使用 - 将
apple-app-site-association
文件上传至你网站的根目录或者.well-known
目录,上传成功,此文件应可以直接下载(该文件配置好后,需要等待一段时间才会生效) -
在开发证书页面中勾选应用ID的
Associated Domains
权限,并正确安装该应用的Profile
文件 -
在Xcode中配置应用的
Associated Domains
,前缀必须是applinks:
,接着加上你的网站域名网站域名可使用通配符
*
,例如*.apple.com
域名匹配规则是取较长的字符串,所以
*.apple.com
是匹配不到apple.com
的,这点需要注意如果有多个网站,则可以添加多条
-
当从网站跳转App时,iOS将会通知App,并且传递了一个
NSUserActivity
对象,该对象包含了用户正在访问的web链接webpageURL
,实现AppDelegate
的代理方法,可以拦截到该事件:func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { print("current url is \(userActivity.webpageURL)") }