Universal Links(通用连接)
- 独特。与自定义URL方案不同,其他应用无法声明通用链接,因为它们使用指向您网站的标准HTTP或HTTPS链接。
- 安全。当用户安装您的应用程序时,iOS会检查您已上传到Web服务器的文件,以确保您的网站允许您的应用程序代表其打开URL。只有您可以创建和上传此文件,因此网站与应用程序的关联是安全的。
- 灵活。即使未安装您的应用程序,通用链接也可以使用。如果未安装您的应用程序,则按用户期望,点击指向您网站的链接可在Safari中打开内容。
- 简单。一个URL既适用于您的网站,也适用于您的应用程序。
- 私人的。其他应用可以与您的应用通信,而无需知道您的应用是否已安装。
添加支持通用链接的步骤
1.创建和上传apple-app-site-association文件
文件内容如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "teamID.bundleId",
"paths": ["/mall/app_download/app","/app_download/app"]
},
{
"appID": "teamID.bundleId",
"paths": ["/path/app_download/app","/app_download/app","*"]
}
]
}
}
注意事项:
- details里面的内容可以为数组,也就是可以配置多个应用的Universal Links
- apple-app-site-association 文件名固定,没有后缀
- appID 的 格式为
teamID.bundleId形式 - paths配置,实际上就是限制哪些路径可以唤醒app,哪些路径不能唤醒app。一下为path规则:
- 使用
*配置,则整个网站都可以使用 - 使用特定的URL,例如
/xz/user/*来指定某一个特殊的链接 - 除了使用
*来匹配任意字符,你也可以使用?来匹配单个字符,你可以在路径当中结合这两个字符使用,例如/foo/*/bar/201?/mypage - 配置的paths路径,是区分大小写的
2.将apple-app-site-association文件上传到您的HTTPS Web服务器。(注:一定是HTTPS Web服务器,并不是API服务器)您可以将文件放置在服务器的根目录或.well-known子目录中。
注意事项:
-
确保使用
https://yourdomain.com/apple-app-site-association这个链接可以访问到,yourdomain.com为你的服务器域名。 -
也可以使用苹果的验证网站,验证文件是否能被苹果请求到。如果是未上线的应用,使用验证网站时可能出现如下提示:
-
出现该提示为
apple-app-site-association文件配置正确。 -
出现
404错误码提示,则为apple-app-site-association文件未上传成功,或者使用https://yourdomain.com/apple-app-site-association路径无法访问。
需要执行三个步骤:
- 创建一个apple-app-site-association包含有关您的应用程序可以处理的URL的JSON数的文件。
- 将apple-app-site-association文件上传到您的HTTPS Web服务器。(注:一定是HTTPS Web服务器,并不是API服务器)您可以将文件放置在服务器的根目录或.well-known子目录中。
- 准备您的应用程序以处理通用链接。
提醒两点:
- 如果要在微信里直接唤起App,必须跨域(即当前网页和跳转 App 的连接不能在同一域名下);
- 项目里配置的Universal Link和微信开放平台的Universal Link必须保持一致,否则会出现每次分享都出现【正在连接】的二跳情况、“应用校验不通过”等问题。而且修改Universal Link会影响线上版本。
常见问题总结:
+(voidstartLogByLevel:(WXLogLevel)levellogBlock:(WXLogBolock)logBlock-(void)scene :( UIScene *)scene openURLContexts :( NSSetUIOpenURLContext *> *)URLContexts;
-(BOOL)application :( UIApplication *)app openURL :( NSURL *)url选项:( NSDictionaryUIApplicationOpenURLOptionsKey, id > *)options;
-(void)场景:( UIScene *)场景continueUserActivity :( NSUserActivity *)userActivity
-(BOOL)应用程序:( UIApplication *)应用程序continueUserActivity :( NSUserActivity *)userActivity restoreHandler :( void(^)(NSArrayidUIUserActivityRest
oring >> * __ nullable restorableObjects ))restorationHandler
handleOpenUrl和handleOpenUniversalLink方法。-(voidscene :( UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
返回[WXApi handleOpenUniversalLink :userActivity 委托:self
-(BOOL)application :( UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restoreHandler :void(^)(NSArrayidUIUserActivityRest
oring >> * __nullable restorableObjects))restorationHandler {
返回[WXApi handleOpenUniversalLink:userActivity委托:self];【设备类型及SDK版本号】
ios; SDK版本号:1.8.6.1
【用户表现】
app每次分享都出现【正在连接】的二跳情况 或 授权登录页面出现二次确认弹窗。
【符合预期的表现】
用户首次使用SDK内功能时可能会出现上述提示,但每个用户只有首次使用的时候会出现,后续不会再提示。
【错误原因】
开发者在registerApp传入的Universal links不生效,每次分享鉴权通过Universal links回跳app失败,导致微信降级scheme返回app,自动重新发起兜底请求。目前兜底请求可以通过,但微信后续也会逐步拦截。
【原因分析】
Universal links失效,可能原因:
1)工程配置associated domain未打开或未添加Universal links域名
2)配置文件未上线或未按苹果要求放在服务器指定的路径下(域名根目录)
3)配置文件的Universal links的path末尾没有加通配符*
4)配置文件的appID(teamID+bundleID)与实际代码包不匹配
【解决方案】
1. 按微信以及苹果的官方接入文档检查Universal Links配置是否符合要求
2. 确认配置正确后,按微信接入文档内的【SDK接入成功验证指引】逐步验证
微信文档:developers.weixin.qq.com/doc/oplatfo…
苹果文档:developer.apple.com/documentati…