為了適配微信最新sdk, 最近搞了一下Universal Links, 好處就不多說(shuō)了, 說(shuō)一下如果不適配的壞處
- 部分機(jī)型分享后顯示"未驗(yàn)證應(yīng)用"
- 每次打包上傳都有UIWebview使用有警告, 再不適配就上不了線了
微信sdk1.8.6.1 更新內(nèi)容
- UIWebview切換成WKWebview
- 支持Universal Link拉起微信以及返回App
微信注冊(cè)的方法只有下面這一個(gè), 必須填寫(xiě)Universal Links, 所以只有搞一下Universal Links了
+ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;
Universal Links配置
第一步 配置apple-app-site-association文件
-
創(chuàng)建名稱為
apple-app-site-association的json文件, 一定不能帶后綴, 文件內(nèi)容為
官網(wǎng)例子
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
自己項(xiàng)目例子 按照微信寫(xiě)的appID以微信為例
{
"applinks": {
"apps": [],
"details": [
{
"appID": "HQH47S9JSQ.help.wechat.com",
"paths": [ "/app/*" ]
}
]
}
}
內(nèi)容解釋
-
details: 是個(gè)數(shù)組, 可以配置多個(gè)app -
appID: TeamID + '.' + BundleID, 看上面例子應(yīng)該很好理解, TeamID在哪兒呢, 下面會(huì)提到. -
paths: 域名后拼接的路徑, 不能帶query參數(shù), 微信使用Universal Links拉起第三方App時(shí),會(huì)在Universal Links末尾拼接路徑和參數(shù),因此App配置的paths必須加上通配符/*, 按照微信配置的例子, Universal Links就是https://help.wechat.com/app
-
apple-app-site-association文件上傳服務(wù)器
服務(wù)器一定要支持https, 讓服務(wù)端的同學(xué)把json文件上傳到域名的根目錄下或者.well-known目錄下,蘋(píng)果會(huì)優(yōu)先去.well-known文件夾下找, 如果沒(méi)有就去跟目錄下載, 我們是兩個(gè)地方都傳了.
https://xxx/apple-app-site-association
https://xxx/.well-known/apple-app-site-association
上傳完成后, 點(diǎn)擊上面的鏈接應(yīng)該是下載json文件就對(duì)了, 打開(kāi)看一下內(nèi)容對(duì)不對(duì), 一定是下載json文件, 不是直接打開(kāi)
上傳完成后可以先驗(yàn)證一下蘋(píng)果驗(yàn)證工具, 輸入https://xxx/.well-known/apple-app-site-association, 等出現(xiàn)下圖提示就可以

第二步 開(kāi)啟Associated Domains
-
登錄公司的開(kāi)發(fā)者賬號(hào), 找到Identifiers-->appId, 勾選Associated Domains
下面有第一步要的TeamID
Associated Domains1
點(diǎn)擊保存時(shí)會(huì)彈窗提示
提示
大概意思是,使用該appId的配置文件都會(huì)無(wú)效,必須重新生成, 所以只要用到該appId的文件都要重新配置, 下圖看出, 重新配置的有推送證書(shū)和pp描述文件, 配置完后下載更新.
證書(shū)配置參考
證書(shū)配置 -
打開(kāi)Xcode 添加Associated Domains
Associated Domains2
添加Universal Links

-
Domains: 內(nèi)容為applinks:+域名, 例如上面的例子為applinks:help.wechat.com, 不用加/app/*
添加完后項(xiàng)目中會(huì)多一個(gè).entitlements文件

--->到此Universal Links就配置完成了: https://help.wechat.com/app
第三步 驗(yàn)證Universal Links
驗(yàn)證方式找了兩種
- 備忘錄驗(yàn)證
打開(kāi)備忘錄輸入https://help.wechat.com/app點(diǎn)擊會(huì)直接跳轉(zhuǎn)自己的app, 或者長(zhǎng)按會(huì)彈窗 在"app"中打開(kāi) - Safari瀏覽器驗(yàn)證
在瀏覽器中輸入https://help.wechat.com/app, 打開(kāi)網(wǎng)站后一定要下拉, 會(huì)有類(lèi)似這樣的彈窗, 點(diǎn)擊打開(kāi)會(huì)直接跳轉(zhuǎn)APP.
Safari驗(yàn)證
第四步 微信配置Universal Links
- 微信要求填寫(xiě)格式是https開(kāi)頭,"/"結(jié)尾, 所以填寫(xiě)https://help.wechat.com/app/
微信平臺(tái) - AppDelegate配置
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 注冊(cè)
[WXApi registerApp:kWXAppID universalLink:kUniversalLinks];
// 測(cè)試函數(shù) step為WXULCheckStepFinal時(shí),表示檢測(cè)通過(guò),Universal Link接入成功
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult * _Nonnull result) {
NSLog(@"-> %ld %@",step, result);
}];
}
// 通用鏈接會(huì)調(diào)用
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *webpageURL = userActivity.webpageURL;
if ([webpageURL.absoluteString isEqualToString:kUniversalLinks]) {
// 如果UniversalLinks跳轉(zhuǎn) 會(huì)到這里
NSLog(@"%@",webpageURL);
} else {
[[UIApplication sharedApplication]openURL:webpageURL];
}
}
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
注意點(diǎn)
- 如果什么都配置正確了, 還是調(diào)不起app, 就把a(bǔ)pp刪除了重新安裝一下.
- 如果什么都配置正確了, 分享到其他app里面就不跳轉(zhuǎn)了, 是因?yàn)槲纯缬驅(qū)е碌? 如:分享到微信的鏈接是https://help.wechat.com/share.html, 然后該網(wǎng)頁(yè)中的“在app內(nèi)打開(kāi)”按鈕配置的通用鏈接為https://help.wechat.com/index.html.
跨域的意思是說(shuō), 通用鏈接和調(diào)用通用鏈接的網(wǎng)頁(yè)不能是同一域名. 即如果通用鏈接域名為help.wechat.com, 則通用鏈接所處的網(wǎng)頁(yè)域名就不能是help.wechat.com。 - 如果所有都配置完成了, 微信分享登錄都可以, 但是還會(huì)出現(xiàn)"未驗(yàn)證應(yīng)用", 是因?yàn)槲打?yàn)證應(yīng)用名單非實(shí)時(shí)更新,只有前一天有接入新SDK(1.8.6版本以上)并且有正確調(diào)用記錄,第二天才會(huì)移除出名單, 并且前一天正確分享次數(shù)在10次以上.
- 添加測(cè)試函數(shù)checkUniversalLinkReady后,每次啟動(dòng)都會(huì)跳轉(zhuǎn)微信,然后再跳回app,注釋掉就不會(huì)再跳微信了。
微信接入文檔
未驗(yàn)證應(yīng)用排查文檔
蘋(píng)果官網(wǎng)Universal Links
如果對(duì)你有所幫助請(qǐng)點(diǎn)個(gè)贊唄??





