為了適配微信最新sdk, 最近搞了一下Universal Links, 好處就不多說了, 說一下如果不適配的壞處
- 部分機型分享后顯示"未驗證應(yīng)用"
- 每次打包上傳都有UIWebview使用有警告, 再不適配就上不了線了
微信sdk1.8.6.1 更新內(nèi)容
- UIWebview切換成WKWebview
- 支持Universal Link拉起微信以及返回App
微信注冊的方法只有下面這一個, 必須填寫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": [ "*" ]
}
]
}
}
自己項目例子 按照微信寫的appID以微信為例
{
"applinks": {
"apps": [],
"details": [
{
"appID": "HQH47S9JSQ.help.wechat.com",
"paths": [ "/app/*" ]
}
]
}
}
內(nèi)容解釋
-
details
: 是個數(shù)組, 可以配置多個app -
appID
: TeamID + '.' + BundleID, 看上面例子應(yīng)該很好理解, TeamID在哪兒呢, 下面會提到. -
paths
: 域名后拼接的路徑, 不能帶query參數(shù), 微信使用Universal Links拉起第三方App時砂轻,會在Universal Links末尾拼接路徑和參數(shù),因此App配置的paths必須加上通配符/*, 按照微信配置的例子, Universal Links就是https://help.wechat.com/app
-
apple-app-site-association文件上傳服務(wù)器
服務(wù)器一定要支持https, 讓服務(wù)端的同學把json文件上傳到域名的根目錄下或者.well-known目錄下,蘋果會優(yōu)先去.well-known文件夾下找, 如果沒有就去跟目錄下載, 我們是兩個地方都傳了.
https://xxx/apple-app-site-association
https://xxx/.well-known/apple-app-site-association
上傳完成后, 點擊上面的鏈接應(yīng)該是下載json文件就對了, 打開看一下內(nèi)容對不對, 一定是下載json文件, 不是直接打開
上傳完成后可以先驗證一下蘋果驗證工具, 輸入https://xxx/.well-known/apple-app-site-association, 等出現(xiàn)下圖提示就可以
鏈接驗證
第二步 開啟Associated Domains
-
登錄公司的開發(fā)者賬號, 找到Identifiers-->appId, 勾選Associated Domains
下面有第一步要的TeamID
Associated Domains1
點擊保存時會彈窗提示
提示
大概意思是斤吐,使用該appId的配置文件都會無效搔涝,必須重新生成, 所以只要用到該appId的文件都要重新配置, 下圖看出, 重新配置的有推送證書和pp描述文件, 配置完后下載更新.
證書配置參考
證書配置 -
打開Xcode 添加Associated Domains
Associated Domains2
添加Universal Links
Associated Domains3
-
Domains
: 內(nèi)容為applinks:+域名, 例如上面的例子為applinks:help.wechat.com
, 不用加/app/*
添加完后項目中會多一個.entitlements文件
.entitlements
--->到此Universal Links就配置完成了: https://help.wechat.com/app
第三步 驗證Universal Links
驗證方式找了兩種
- 備忘錄驗證
打開備忘錄輸入https://help.wechat.com/app點擊會直接跳轉(zhuǎn)自己的app, 或者長按會彈窗 在"app"中打開 - Safari瀏覽器驗證
在瀏覽器中輸入https://help.wechat.com/app, 打開網(wǎng)站后一定要下拉, 會有類似這樣的彈窗, 點擊打開會直接跳轉(zhuǎn)APP.
Safari驗證
第四步 微信配置Universal Links
- 微信要求填寫格式是https開頭,"/"結(jié)尾, 所以填寫https://help.wechat.com/app/
微信平臺 - AppDelegate配置
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 注冊
[WXApi registerApp:kWXAppID universalLink:kUniversalLinks];
// 測試函數(shù) step為WXULCheckStepFinal時,表示檢測通過和措,Universal Link接入成功
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult * _Nonnull result) {
NSLog(@"-> %ld %@",step, result);
}];
}
// 通用鏈接會調(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) 會到這里
NSLog(@"%@",webpageURL);
} else {
[[UIApplication sharedApplication]openURL:webpageURL];
}
}
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
注意點
- 如果什么都配置正確了, 還是調(diào)不起app, 就把app刪除了重新安裝一下.
- 如果什么都配置正確了, 分享到其他app里面就不跳轉(zhuǎn)了, 是因為未跨域?qū)е碌? 如:分享到微信的鏈接是https://help.wechat.com/share.html, 然后該網(wǎng)頁中的“在app內(nèi)打開”按鈕配置的通用鏈接為https://help.wechat.com/index.html.
跨域的意思是說, 通用鏈接和調(diào)用通用鏈接的網(wǎng)頁不能是同一域名. 即如果通用鏈接域名為help.wechat.com, 則通用鏈接所處的網(wǎng)頁域名就不能是help.wechat.com庄呈。 - 如果所有都配置完成了, 微信分享登錄都可以, 但是還會出現(xiàn)"未驗證應(yīng)用", 是因為未驗證應(yīng)用名單非實時更新,只有前一天有接入新SDK(1.8.6版本以上)并且有正確調(diào)用記錄派阱,第二天才會移除出名單, 并且前一天正確分享次數(shù)在10次以上.
- 添加測試函數(shù)checkUniversalLinkReady后诬留,每次啟動都會跳轉(zhuǎn)微信,然后再跳回app贫母,注釋掉就不會再跳微信了文兑。
微信接入文檔
未驗證應(yīng)用排查文檔
蘋果官網(wǎng)Universal Links
如果對你有所幫助請點個贊唄??