iOS支持通用链接配置(Universal Links)

Apple 正在大力推动 APP 开发者在深层链接上有更好的体验。所有的消息都围绕着深层链接技术。与此同时, Apple 推出通用链接:一种能够方便的通过传统 HTTP 链接来启动 APP, 使用相同的网址打开网站和 APP。
支持了Universal Links的APP, iOS用户可以点击网站的链接可以直接打开已经安装的app, 而不用通过打开Safari, 如果你的app没有安装那么点击链接是通过Safari打开你的网站。
列如京东APP使用了通用链接, 那么你每在点击一个商品链接朋友分享出来的商品链接时, 你的 iOS 设备都会在京东客户端里面自动打开这个页面, 而不是当你没有安装时转到普通的网页。

2 添加域名到 Capabilities

首先, 你必须在 Xcode 的 capabilities 里添加你的 APP 域名,
必须用 applinks: 前置它:还添加一些你可能拥有的子域和扩展(h.longtugame.com, sdk.longtubas.com 等等)。
此域名每个产品不同,需要找技术支持获取。因为平台需要对域名做处理添加apple-app-site-association 文件。
如果使用脚本打包,请确定打包时,脚本内也正确的添加了此项配置

Capabilities配置

3.1 仅支持拉起应用,应用无需做特殊处理。

游戏实现的代理接口 (application:continueUserActivity:restorationHandler:)以便您的应用可以接收链接并对其进行适当处理。
当用户点击通用链接 启动您的应用程序时,您会收到an NSUserActivity object with an activityType value of NSUserActivityTypeBrowsingWeb.。活动对象的webpageURL属性包含用户正在访问的URL。网页URL属性始终包含HTTP或HTTPS URL,并且您可以使用NSURLComponents API来操纵URL的组件。

举例 用户通过h.longtugame.com/yxwd 打开应用,游戏接收到消息,并处理/yxwd 事件

  1. - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
  2. NSLog(@"continueUserActivity = %@",userActivity);
  3. if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb])
  4. {
  5. NSURL *webpageURL = userActivity.webpageURL;
  6. NSString *host = webpageURL.host;
  7. NSString *scheme = webpageURL.scheme;
  8. NSString *urlpath = webpageURL.path;
  9. NSLog(@" continueUserActivity webpageUR:%@ host:%@ scheme:%@ urlpath:%@" ,webpageURL,host,scheme,urlpath);
  10. // 此处要和配合的host相同
  11. if ([host isEqualToString:@"h.longtugame.com"]){
  12. //进行我们的处理
  13. NSLog(@" continueUserActivity 我们规定的协议格式,游戏自己处理....");
  14. //举例 地址 path 为 yxwd的时候 游戏自己处理
  15. if ([urlpath isEqualToString:@"/yxwd"]) {
  16. NSLog(@" continueUserActivity yxwd path");
  17. }
  18. }else{
  19. NSLog(@" 不是 我们规定的 协议格式,放过 ");
  20. }
  21. }
  22. if ([[LTGameOCSDK shareInstance] LTSDKApplication:application continueUserActivity:userActivity restorationHandler:restorationHandler]) {
  23. return YES;
  24. }
  25. return NO;
  26. }

4 测试方式

举例:工程配置了 h.longtugame.com 技术支持配置了 /yxwd/* 支持
使用 https://h.longtugame.com/yxwd 测试

4.1 系统自带的备忘录

在备忘录输入你的域名(https://h.longtugame.com/yxwd) ,点击可直接跳转到App,长按会显示(在“AppName”中打开)。
备忘录打开

4.2 浏览器输入链接

在safari中直接打开你的域名 (https://h.longtugame.com/yxwd ) ,网页下来会看见上方的提示条。
浏览器打开

5 附录

5.1 apple-app-site-association 文件介绍

apple-app-site-association文件(注意是没有后缀的),其内容是json格式。
格式示例如下

  1. {
  2. "applinks": {
  3. "apps": [],
  4. "details": [
  5. {
  6. "appID": "UC3LC49W33.com.longtugame.dearordeal",
  7. "paths": ["/ltdemo/*", "/qq_conn/1108738389/*" ,"/weibo/559418009/*"]
  8. }
  9. ]
  10. }
  11. }
  1. 相关参数说明
  2. appID:由TeamID.BundleID组成。TeamID可在开发者中心查看,BundleID可在Xcode中查看。
  3. paths:设定一个App的路径支持列表,只有这些指定的路径链接才会被App所处理。(paths是大小写敏感,*是通配符表示任意路径,一般禁止填写"*"

文件存放位置:
文件做好后,需要放到域名的web server下

  1. 1 根目录下。etc.https://test.com/apple-app-site-association
  2. 2 .well-known文件夹下(推荐,苹果在iOS9.3更改了通用链接的请求文件的位置,但是仍然支持上面的路径)。在根目录新建.well-known文件夹(不要忘记前面的.)。etc.https://test.com/.well-known/apple-app-site-association
  3. 会优先查询.well-known文件夹 然后在查询根目录

苹果也提供了一个官方网页供我们开发者来验证 验证地址:https://search.developer.apple.com/appsearch-validation-tool/