一: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;
}
如果不通的话,请参考官方文档一一核对。