iOS收藏

iOS 之 Universal Links

2021-12-06  本文已影响0人  大成小栈

苹果自iOS9.0推出Universal Links,手机中如果安装了支持该链接的App就会直接进入到App中;如果没有安装APP则会跳转到Safari浏览器中,展示H5页面。 这样可以通过HTTPS链接来无缝启动APP。Universal Links 的执行原理如下:

  1. 安装app后,iOS系统会检查App Bundle中的 Info.plist 文件;
  2. 若有Associated Domain字段,会读取applinks:后面的域名
  3. 若该域名根目录下有名为apple-app-site-association的文件,然后系统会将其下载到本地并解析;根据path建立与appid的映射关系,保存在系统的数据库中;
  4. 如果有访问https://域名/path/ 的链接,系统会根据映射关系找到的appid,启动该App,打开App后触发Delegate方法,实现Universal Links。

下面来看看 Universal Links 的配置过程。

1. 开发者账号端配置

1)登录Apple账号点击已创建的AppID,跳转到APP 信息页面;
2)记录下Team IDBundle ID 备用;
3)勾选列表中的”Associated Domains“选项;

开发者平台端配置Universal Links

2. 业务服务端配置

4)创建一个名为apple-app-site-association(不能修改,且不能添加后缀);
5)文件内添加以下json格式数据;

//// 域名下只有一个path,只对应一个App
{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID":"8ARUHGUQNH.com.YHKJ.AppSample",
                "paths": [ "/AppSample/*"]
            }
        ]
    }
}

//// 域名下的不同path,对应着多个APP
{
    "applinks":{
        "apps":[],
        "details":[
            {
                "appID":"8ARUHGUQNH.com.YHKJ.AppSample",
                "paths":["/AppSample/*"]
            }
            {
                "appID":"8ARUHGUQNH.com.YHKJ.appManage",
                "paths":["/manageAppSample/*"]
            }
        ]
    }
}

6)apple-app-site-association文件应置于域名服务器根目录下,也可以在根目录中添加.well-known文件夹,将文件上传到.well-known文件夹下(.点一定不能少),对应连接如下;

//// domain 为服务端域名
// https://domain/apple-app-site-association
// https://domain/.well-known/apple-app-site-association

注意:

  1. 以上内容严格区分大小写;apps:必写且固定为[ ];appID:格式为teamID.bundleID
  2. paths:为所支持的path字符串数组,用于过滤可以跳转到App的链接,且支持通配符;
  3. iOS 会优先请求.well-known路径,若apple-app-site-association文件请求不到,再去请求根目录,因此若要避免服务器接收过多GET请求,可以直接把apple-app-site-association文件放到well-known目录下。

3. iOS 端配置

7)打开Xcode工程配置中的Signing&Capabilities项,添加 Associated Domains 功能;
8)在Associated Domains中添加域名地址项,格式为 applinks:域名地址

在Signing&Capabilities中添加 在Associated Domains中添加

9)由webView跳转进入业务App时接会收到回调,需在AppDelegate.m/SceneDelegate.m 中实现下面回调方法。

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    // NSUserActivityTypeBrowsingWeb 由Universal Links唤醒的APP
    if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        return YES;
    }
    NSURL *jumpUrl = userActivity.webpageURL; // 这个URL就是你跳转的那个URL,下载页地址,想要传参数可以直接在URL后面拼接
    // TODO:在这里进行跳转具体页面的操作
    return YES;
}

4. 测试Universal Link链接是否有效

Apple提供了一个网页,可以验证业务服务端的apple-app-site-association文件是否有效。
https://search.developer.apple.com/appsearch-validation-tool/

也可以在iOS自带Safari浏览器中,打开 Universal Link 链接,如果 Universal Link 配置成功,下拉会出现应用入口,点击“打开”可以跳转至原生App;如打开微信的 Universal Link:https://help.wechat.com/app/

5. 注意事项

  1. 服务端的域名地址必须支持https,并且SSL证书必须通过苹果信任
  2. apple-app-site-association文件名不可变且不能加后缀,位置固定。
  3. apple-app-site-association文件的更新不会使iOS本地的apple-app-site-association同步更新,Universal Link的更新只有在APP第一次安装、更新版本的时候。如果Universal Link有变更,只能重新打包发版让用户更新版本,或卸载重装
  4. 跨域问题,如果由当前网页跳转Universal Link打开APP,当前网页的域名和Universal Link 的域名必须 不能一致,否则不会跳转,只会在当前的WebView里面跳转。

6. 与 URL Scheme 的比较

另一种外部唤起App 的方式是URL Scheme,但是URL Scheme有一些弊端:

  1. Universal Links 具有唯一性,比较安全,它是使用标准的HTTPS协议链接到你的web站点,所以一般不会被其它的APP所声明。而 URL Scheme 是由开发者自定义的,没有限制,任何App都可以用同一个名字,有些钓鱼App可以 设置知名的App 的URL Scheme 来欺骗用户。
  2. URL Scheme 可以通过 canOpenURL 判断用户是否安装App,但是只有安装了APP才能跳转,未安装则没有效果。而 Universal Links 如果安装了就跳转APP,如果未安装就跳转网页展示你网站的内容,比较灵活。
  3. 使用scheme跳转系统会弹框提示,替换成UL链接后可以实现无缝跳转。

原文地址:
https://www.jianshu.com/p/4c96b54ef8d1

上一篇下一篇

猜你喜欢

热点阅读