IOS 解决友盟微信登录或分享报 universal link 校验不通过的问题
官方文档
通用链接是iOS9推出的一项新功能,如果你的应用app支持通用链接(Universal Link)之后,iOS用户能够在点击网页的链接的时候无缝的重定向到已经安装的app,不需要额外的任何操作。如果没有安装对应的app,那么点击链接会使用Safari打开网页。在iOS9以前,对于各种浏览器,Safari中唤醒app的需求,我们通常是只能使用scheme的方式。
配置
- 新建
apple-app-site-association
{
"applinks": {
"apps": [],
"details": [
{
"appID": "公司开发者账号的小组ID.包名id",
"paths": ["*"]
}
]
}
}
这里的
appID
是指:TeamID+BundleId
的组成(例:6CCC99AB4B.com.wen.test
)(TeamID
可以在开发者账号里面查看,BundleId
是项目的Bundle Identifier
)。
这里的
paths
是指:是设置允许的路径列表,可以是一个也可以是多个,如/applink/*"
,最简单的方式是使用"*"
,通配符,表示允许该域名下的任意路径。(注意:paths
中的大小写是敏感的,一定要一一对应
-
apple-app-site-association
上传到域名的根目录下或者.well-known
的子目录下- 文件的 URL 应符合以下格式:
https://<fully qualified domain>/.well-known/apple-app-site-association
- 必须要是可访问的域名
- 必须使用
https://
有效证书托管文件,并且没有重定向
- 文件的 URL 应符合以下格式:
-
登陆开发者账号,开启该AppId下的关联域名(Associated Domains)功能设置AssociateDomain
- 登录苹果开发者后台
- 打开证书页面,找到
Identifiers
下App IDs
下自己的证书 - 选择
Associated Domains
- 点击
Save
- 记得最后要更新下证书,(开发时可以先不更新,不影响后面的操作)。
在 Xcode 中配置关联域名:在 app 中处理通用链接,添加对应的域名(上面知道的域名)到
Capabilities
在项目里面定位到Capabilities
,找到Associated Domains
,点击允许按钮,在Domains
中添加对应的域名。(Domains
中的域名必须是使用applinks
开头,然后输入自己的域名即可。注意:当 app 第一次启动之后,会自动从你自己的域名目录下下载这个apple-app-site-association
文件。)注意:Universal link的域名和H5页面URL的域名不可以是同一个,详情请看Universal link同域不能唤起
示例
applinks:abc.test.com
我们的App在设备上第一次运行时,如果支持
Associated Domains
功能,那么iOS会自动去GET
定义的Domain
下的apple-app-site-association
文件。AppDelegate.m
中实现代理方法,并做打开的相应处理
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
return YES;
}
友盟微信配置
-
先在微信平台中配置
Universal Link
- 示例:
https://abc.test.com/applink/
- 示例:
友盟
UMSocialGlobal
配置
[UMSocialGlobal shareInstance].universalLinkDic = @{
@(UMSocialPlatformType_WechatSession):@"https://abc.test.com/applink/"
};
- 更改回调
- (void)setupUSharePlatforms {
/* 设置微信的appKey和appSecret */
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxxxxxxx" appSecret:@"xxxxxxx" redirectURL:nil];
/*设置小程序回调app的回调*/
[[UMSocialManager defaultManager] setLauchFromPlatform:(UMSocialPlatformType_WechatSession) completion:^(id userInfoResponse, NSError *error) {
Log(@"setLauchFromPlatform:userInfoResponse:%@", userInfoResponse);
}];
}