Universal Links(通用链接) 相关文档:
一、Universal Links & scheme Universal Links(通用链接),是iOS9推出的一项新功能。如果你的应用(app)支持通用链接(Universal Link)之后,iOS用户能够在点击网页的链接的时候无缝的重定向到已经安装的app,不需要额外的任何操作。如果没有安装对应的app,那么点击链接会使用Safari打开网页。
附:在iOS9以前,对于各种浏览器,Safari中唤醒app的需求,我们通常是只能 使用scheme的方式。现在iOS9之后,我们多了一种方式。两种方式的区别是scheme能够支持我们跳转app的时候加入参数。
二、Universal Links的表现及测试 假设对于 com.dvlproad.Beyond 这个app,
dvlproad.com/app 是通用链接, dvlproad.com/mobile 不是通用链接。
1、在浏览器Safari地址栏中的表现 则我们先分别将这些链接粘贴到浏览器Safari的地址栏中,
1、浏览器地址栏为非通用链接时,没什么特别。 2、而浏览器地址栏为通用链接的时候, ①如果我们有安装`com.dvlproad.Beyond这个app,则会发现该页面下滑后,在顶部会多了个在应用中打开的操作,形如:
②如果我们没有安装com.dvlproad.Beyond这个app,则没有多这栏打开。即使你的通用链接都配置正确了。
2、在非浏览器,如备用录app里的表现
我们会发现点击
1、备忘录中的链接为非通用链接时,点击链接没什么特别。 2、而备忘录中的链接为通用链接的时候,点击链接会直接跳转到我们的com.dvlproad.Beyond这个app上。
三、Universal Links的实现 要让一个链接成为通用链接。需要
1、开启配置 Associated Domains
只有以该域名开头的链接,才可能是通用链接。
2、制作上传 apple-app-site-association
1、Associated Domains 1、进入苹果Apple Developer -> Member Center -> Certificates, Identifiers & Profiles – >Identifiers - >App IDs–>Edit 然后开启打钩 Associated Domains 后保存。
如果你使用Xcode的自动管理证书,可直接跳到第二步,即Xcode会在你打开Associated Domains时,自动帮你处理证书配置问题以及appIDs打开Associated Domains。
2、在项目中添加Associated Domains
/AssociatedDomains_Set1.png)
点击Associated Domains的+号填入applinks:后面是你的域名。
/AssociatedDomains_Set2.png)
及添加完后,只有以该域名dvlproad.com开头的链接,才可能是通用链接。
附:有时候,上面的设置也会改使用二级域名,如applinks:app.dvlproad.com。
2、apple-app-site-association App在安装的时候,iOS系统会去根据该app配置里填的那些Associated Domains下,去这些域的根目录下,取apple-app-site-association文件。
我们创建apple-app-site-association文件,并上传也是为了让iOS系统通过Associated Domains和apple-app-site-association这个文件,一起知道你的哪些是链接是Universal Links,哪些不是Universal Links。
2.1、制作apple-app-site-association 文件 创建一个命名为apple-app-site-association文件,文件名必须为apple-app-site-association !!!(注意这个文件必须没有后缀名 )
设apple-app-site-association内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { "applinks": { "apps": [], "details": [ { "appID": "myTeamId.com.dvlproad.Beyond1", "paths": [ "*" ] }, { "appID": "myTeamId.com.dvlproad.Beyond2", "paths": [ "app" ] } ] } }
appID 是由你的Team ID+BundleID组成,如果你不知道你的Team ID是什么?进入苹果Apple Developer -> Member Center ->Membership->Team ID
paths 是一个字符串的数组,这里是你的应用支持的通用链接与不支持的链接,例如你使用的是/*,代表着只要是Associated Domains域名下的所有的链接都支持。如果你不支持某一个链接,在这个链接前面加NOT空格,举个例子
“paths”:[ “NOT /home/“, “/ “ ]
如果这样写就是除了不支持/home下所有的链接,其他链接都支持。
2.2、上传apple-app-site-association 文件 把你刚才制作好的apple-app-site-association文件,放到**1中Associated Domains所填写的域名dvlproad.com**的根目录下或者.well-known下(要怕除问题,两个地方都放也行。)。
2.3、检测上传的apple-app-site-association 文件是否成功 ①、通过浏览器访问https://xxx.com/apple-app-site-association地址,看文件是否上传成功。
②、苹果有一个检测的接口 苹果测试入口 ,将你的域名放入测试口,点击TestURL即可。
2.4、上传apple-app-site-association 文件到dvlproad.github.io的例子 为方便测试,我们域名使用dvlproad.github.io这个。
1、apple-app-site-association必须放置在域名的根目录或者 .well-known 目录下,
2、在本地测试跟路径是否有效。
方法:将apple-app-site-association放置好后,我们执行hexo s,则我们就能成功访问http://localhost:4000 ,进而http://localhost:4000/apple-app-site-association 。
/UniversalLinks_test1.png)
3、本地可以后,就部署到服务器
测试部署成功与否,通过浏览器访问https://dvlproad.github.io/apple-app-site-association
1、优先本地部署测试,即 hexo s 后,通过浏览器访问:http://localhost:4000/apple-app-site-association 如果可以下载则文件位置放置在根目录正确。 2、本地测试通过后,进行远程部署 hexo g 和 hexo d 测试,及通过浏览器访问:https://dvlproad.github.io/apple-app-site-association 如果可以下载代表在1的基础上,远程部署也成功了。 如果无法访问/下载,而又确认部署完成了,那一般是部署了但还没同步到域名地址上的问题。建议等等或者再部署一下看看。
3、写一个通用链接并测试 为进一步了解知道哪些链接是通用链接,哪些不是。我们以上述例子进行说明。
则对于com.dvlproad.Beyond1这个app,由于paths是[ "*" ],
即只要是dvlproad.com开头的链接都是通用链接。
而对于com.dvlproad.Beyond2这个app,由于paths是[ "app" ],
所以,只有以dvlproad.com/app开头的链接才是通用链接。即形如 dvlproad.com/app/111、dvlproad.com/app/abc 等都是通用链接。
通用链接的测试方法,请按上面已经写玩的Universal Links的表现及测试 进行测试,不再累述。
四、Universal Links的使用 在AppDelegate添加下面的方法处理Universal Links
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 //TODO:后台进入前台/通用链接 #pragma mark - Universal Link - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler { NSLog(@"userActivity : %@",userActivity.webpageURL.description); if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { NSURL *webUrl = userActivity.webpageURL; NSArray *universalLinks = LUCKIN_UNIVERSALLINKS; BOOL isUniversalLinks = NO; for (NSString *universalLink in universalLinks) { isUniversalLinks = [webUrl.host isEqualToString:universalLink]; if (isUniversalLinks) { break; } } if (isUniversalLinks) { //TODO:判断域名是自己的网站,进行我们需要的处理 } else { [[UIApplication sharedApplication] openURL:webUrl]; } } return YES; }
当用Universal Links启动APP时就会调用上面的方法。
把我们设置好通用链接的URL放到备忘录中,长按URL会多出一条在“××××”中打开,当你点击时就会打开你的APP,并且在上面的方法中将URL传给你处理。
五、微信配Universal Links 微信SDK的最新版本openSDK1.8.6 开始,需要进行Universal Links配置。
1、分析微信配Universal Links的原因 回顾iOS9之前,假设一个页面在微信app内部打开,其要跳转到app,一般需要先跳转到浏览器,如Safari中,然后才能再进行scheme跳转到我们的应用。
而有了Universal Links后,现在你用微信打开的页面,跳转的时候,即可直接跳转到app中,不用再经过浏览器。
2、微信配Universal Links的操作 2.1、基本分享操作的支持 微信分享配置Universal Links的有两个地方。
1、微信开放平台 https://open.weixin.qq.com 上对应app的Universal Links配置
/UniversalLinks_wechat_Set1.png)
2、微信SDK使用时候的Universal Links配置。
如果上述两个值设置不一样,会导致在app中点击分享的时候,没法正常调起分享操作。错误信息如下:
我们知道Universal Links是用来做通用链接的。但要完成这一步的操作不需要我们去开Associated Domains和上传apple-app-site-association才能完成基本的分享操作了。
2.2、分享完微信能够正常返回 iOS 9系统策略更新,限制了http协议的访问,需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。
1 2 3 4 5 6 7 8 9 10 <key>LSApplicationQueriesSchemes</key> <array> <string>weixin</string> <string>weixinULAPI</string> </array> <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
2.3、可以在微信内部直接跳转到app 实现Universal Links的实现。即
1、开启配置 Associated Domains
2、制作上传 apple-app-site-association
上面已说明,请查看上面内容。
End