Universal Link以及支持微信和QQSDK

8,723 阅读2分钟

一:Universal Link(通用链接)

UniveresalLink(通用链接) 是 iOS9推出的特性,当用户点击通用链接时,iOS设备可以不通过Safari或网页,直接打开App,比如在备忘录中直接打开App;

同时由于通用链接是标准的HTTPS链接,既可以打开App,也可以打开网页(在未安装App的时候)。 同时可以使用通用链接,在不同App页面跳转,以及传递参数。 本文重点讲如何接入Universal Link,以及最新版本QQ和微信SDK的Universal Link的适配。

QQ和微信的最新SDK都要求支持Universal Link,有需求的同学请尽快支持:

二:如何支持Universal Link

1 . 设置配置文件appapple-app-site-association, 注意:该文件没有后缀, 格式为

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "D3KQX62K1A.com.example.appstore",
                "paths": [
                    "/test/*","/qq_conn/10000000/*"
                ]
            },
            {
                "appID": "X62K1AD3KQ.com.example.enterprise",
                "paths": [
                    "/test/*","/qq_conn/10000000/*"
                ]
            }
        ]
    }
}
	

其中, AppID的格式为 <Team Identifier>.<Bundle Identifier> Paths中第一个为你自己的路径, 可以只填通配符 *, 第二个为QQ的通用链接配置,10000000是你的QQ AppId

然后将该文件上传到你的网站的 .well-known文件夹或者根目录下。

例如:https://yourdomain/.well-known/apple-app-site-association
或者 https://yourdomain/apple-app-site-association

具体可参考官网 Settiing up an App's Assocaiated Domains

2. 配置 Assocaiated Domains

2.1 在developer.apple.com中打开Assocaiated Domains
2.2 在Xcode -> TARGETS -> Signing & Capabilities中添加Associated Domains功能,添加配置如下

3. 上述两项配置完成后,重装真机后,在Safari中输入 app.yourDoamin.com/test/, 打开后下拉可以看到如下页面,即表示通用链接接通

三:QQ互联SDK和微信SDK支持Universal link

1. QQ 配置及验证

1.1 QQ SDK 升级到3.3.7及以上, 验证当前QQ是否支持Universal Link,验证地址:qm.qq.com

1.2 在QQ互联平台,填写Universal Link并验证 Univeresal Link: app.yourDomain.com, 需要验证通过后才可以使用

2. WeChat 配置及验证

2.1 SDK升级到最新版本1.8.6.1, 验证当前微信是否支持Universal Link,验证地址:help.wechat.com/app/

2.2 在Xcode中添加URL Schemes

2.3 在Xcode中添加URL type

2.4 在微信开放平台注册Universal Link:
Univeresal Link: https://app.yourDomain.com/test/, 注意需要以 /结尾

3. 在Appdelegate中注册QQ和微信

// QQ: 
self.tencentOAuth = [[TencentOAuth alloc] initWithAppId:QQAppId andUniversalLink:[NSString stringWithFormat:@"https://app.yourDomain.com/qq_conn/%@",QQAppId] andDelegate:nil];
// WeChat: 
[WXApi registerApp:WeChatAppId universalLink:@"https://app.yourDomain.com/test/"];

4. 在Appdelete中处理回调

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL  *webpageURL = userActivity.webpageURL;
        if(webpageURL && [TencentOAuth CanHandleUniversalLink:webpageURL]) { // QQ
            return [QQApiInterface handleOpenUniversallink:webpageURL delegate:self] || [TencentOAuth HandleUniversalLink:webpageURL];
        }else if ([webpageURL.absoluteString hasPrefix:[NSString stringWithFormat:@"https://app.yourDomain.com/test/%@", WeChatAppId]]){ // 微信
            if([WXApi handleOpenUniversalLink:userActivity delegate:self]){
            }else{
                [WXApi handleOpenURL:webpageURL delegate:self];
            }
            return YES;
        }
        // Handle yourself router
        [SSRouter router: webpageURL];
    }
    return YES;
}

如果不通的话,请参考官方文档一一核对。

参考资料