【iOS特性】Universal Links打开app跳转指定页面

1,978 阅读2分钟

配置Universal Link

创建apple-app-site-association

  • 文件名 必须apple-app-site-association,纯json文本没有后缀
  • 域名必须支持 https 且符合苹果认证的 https证书
  • 文件 必须放在服务器 根目录或者 .well-known目录下

apple-app-site-association格式

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "teamID.com.xx.appa",
                "paths": [
                    "/a/*"
                ]
            },
            {
                "appID": "teamID.com.xx.appb",
                "paths": [
                    "*"
                ]
            }
        ]
    }
}

如下是知乎的配置

{
    "applinks": {
        "apps": [],
        "details": {
            "8J52SRPW6X.com.zhihu.ios": {
                "paths": [
                    "*"
                ]
            },
            "886PYH8YW5.com.zhihu.ios": {
                "paths": [
                    "*"
                ]
            },
            "B6MTNRMU2Y.com.zhihu.ios": {
                "paths": [
                    "*"
                ]
            },
            "B6MTNRMU2Y.com.zhihu.ios-dev": {
                "paths": [
                    "*"
                ]
            }
        }
    },
    "webcredentials": {
        "apps": [
            "8J52SRPW6X.com.zhihu.ios",
            "886PYH8YW5.com.zhihu.ios",
            "B6MTNRMU2Y.com.zhihu.ios",
            "B6MTNRMU2Y.com.zhihu.ios-dev"
        ]
    },
    "activitycontinuation": {
        "apps": [
            "8J52SRPW6X.com.zhihu.ios",
            "886PYH8YW5.com.zhihu.ios",
            "B6MTNRMU2Y.com.zhihu.ios",
            "B6MTNRMU2Y.com.zhihu.ios-dev"
        ]
    }
}

验证 apple-app-site-association 是否上传成功

apple-app-site-association文件上传完成后,通过浏览器能正常访问 apple-app-site-association文件内容说明上传成功。

这里“oia.xx.com”为配置 Universal Link的域名

配置Associated Domains

Apple Developer配置

Identifiers 中开启 Associated Domains功能并重新下载 Profiles 文件

图片

项目配置

在项目 Target -> Signing & Capabilities -> Associated Domains 下添加配置 Univers****al Link的域名,格式如下:

applinks:你的域名
如:applinks:oia.xx.com

图片

跳转指定页面

在项目中监听 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler 代理方法

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
    // 自定义Universal Link跳转处理
    NSURLComponents *components = [[NSURLComponents alloc] initWithString:userActivity.webpageURL.absoluteString];
    [components.queryItems enumerateObjectsUsingBlock:^(NSURLQueryItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if ([obj.name isEqualToString:@"reUrl"]) {
            // todo
            *stop = YES;
        }
    }];

    // 微信处理逻辑
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

结果与预期

上面步骤都配置完成且安装完App后,在Safari浏览器 中打开域名 "oia.xx.com" 能正常看到类似下面的页面,点击【打开】能正常打开App 表明 Universal Link已经接入成功了

图片

自定义打开

在 h5 项目中通过 window.location.href 打开触发 Universal Link 打开App

onClik() {
   window.location.href = 'https://oia.xx.com?reUrl=xx'
}

注意事项

  • 操作系统为 iOS 9.0以上
  • Universal Link需要跨域才会触发,比如在 A域名 下配置了 Universal Link,在 A域名 下打开 A域名 下的链接不会触发,在 B域名 下的链接打开A域名 下的链接才会触发(只要域名不一样被苹果识别为跨域才会触发Universal Link
  • 哪个域名需要打开APP哪个域名配置 Universal Link

友情提示

见原文:【iOS特性】Universal Links打开app跳转指定页面)

本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。