Universal Link 调研

2017-03-31  本文已影响139人  张无忌_

背景

在Universal links出现之前,跳转app是通过浏览器再重定向去一个app的。这种方式虽然可自定程度很高,能够巧妙地实现很多跳转,但弊端也很明显:我们只能通过scheme://example这种格式的链接来实现跳转,而且现在苹果还对这种方式的跳转加了一个提示框:“是否打开XXX”。对于对Web和原生App交互的场景需求量很大的产品来说,这样的跳转方式显然是步骤冗杂的,用户体验并不好。

iOS9 的Universal link就是为了修复这个问题而诞生的。当link被click后,它先会检测,被注册的链接是否是相关域名的链接。然后检查对应的app是否安装,安装就直接跳转,否则就用浏览器打开这个链接。

基本步骤

  • 在苹果开发者网站中打开需要使用Universal Link功能的App中的Associated Domains

配置

Account -> Certificates, Identifiers & Profiles -> App IDs -> YourApp -> Edit中把Associated Domains设置为Enable

Capabilities -> Associated Domains 打开此功能并把你需要跳转的domain加进去,格式为applinks:www.baidu.com

部署

服务器必须得支持SSL

文件不需要添加任何后缀

json的格式:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TeamID.com.domain.App",
        "paths":[ "*" ]
      }
    ]
  }
}
  • appID:TeamID加上Bundle ID
  • paths:支持Universal Link,也就是可以跳转的路径。代表此域名下所有路径都支持,也可以具体制定到某个页面例如/path/page或者某个路径下所有URL例如/path/

我们的App在设备上第一次运行时,如果支持Associated Domains功能,那么iOS会自动去GET定义的Domain下的apple-app-site-association文件。
需要留意iOS会先请求https://baidu.com/.well-known/apple-app-site-association如果此文件请求不到,再去请求https://baidu.com/apple-app-site-association
所以如果想要避免服务器接收过多GET请求,可以直接把apple-app-site-association放在./well-known/目录下

开发

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{

    if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        return YES;
    }

    //读取url地址
    NSURL *webUrl = userActivity.webpageURL;


    if (![webUrl.path isEqualToString:@"/show"]) {
        //path错误,直接从safari打开
        [[UIApplication sharedApplication] openURL:webUrl];
        return YES;
    }
    //跳转并显示内容
    [[NSNotificationCenter defaultCenter] postNotificationName:@"notify" object:@"hello world"];

    return YES;
}

这里的自由度就很高了,我们可以根据传入的任何符合跳转条件的URL进行不同的操作。

测试

注意
非系统原生App不一定能支持直接点击URL跳转,例如在微信中点击URL会首先在微信内的WebView打开,如果要跳转只能再通过Safari打开。

上一篇 下一篇

猜你喜欢

热点阅读