最近微信對老版本sdk開始限制部分功能,分享、第三方登錄、支付等功能都會出現未驗證應用,所以不得不更新最新版本sdk,下麵就主要介紹對接最新版本的坑,主要是Universal Links這方面(主要是不瞭解)。 1:Universal Links 要對接最新的微信sdk,你必須要瞭解一下Univer ...
最近微信對老版本sdk開始限制部分功能,分享、第三方登錄、支付等功能都會出現未驗證應用,所以不得不更新最新版本sdk,下麵就主要介紹對接最新版本的坑,主要是Universal Links這方面(主要是不瞭解)。
1:Universal Links
要對接最新的微信sdk,你必須要瞭解一下Universal Links是什麼,因為最新sdk根據Universal Links來判斷來源app是否可信。
IOS主流跳轉方案有兩種:
1:Scheme
2:Universal Links
Scheme的協議是由開發者完全自定義,同時訪問失敗沒有任何內容可以展現,所以IOS9就引入Universal Links。Universal Links 是通過功能變數名稱下apple-app-site-association來確定app,因為功能變數名稱又必須是https又不會重覆,還能當作地址來訪問網頁,解決了上述兩個問題。
2:配置Universal Links
-
配置apple-app-site-association
首先你要創建apple-app-site-association文件(註意沒有任何尾碼名,純文本的文件),放到你https功能變數名稱更目錄下,訪問對應的功能變數名稱https://xxx.xxx.xx/apple-app-site-association 能下載文件就可以(也可以放到根目錄下.well-known文件夾下,跟ssl證書配置的一樣的文件夾,其他文件夾暫時沒試過是否可以,知道的小伙伴可以留個言)。文件內容是個json字元串:
1 { 2 "applinks": { 3 "apps": [], 4 "details": [ 5 { 6 "appID": "%1.%2", 7 "paths": ["*" ] 8 } 9 ] 10 } 11 }
其中%1是蘋果開發者賬號的teamid,%2是指對應app的bundle id
teamid不知道在哪裡的小伙伴,參考下圖(bundle id我就不做贅述了 不知道的小伙去面壁思過)
json中path是乾什麼用的:
1:用來告訴safari那些是Universal Links。例如:https://www.baidu.com 是你的功能變數名稱,path配置為["/test/*"],那麼你在手機里safari打開https://www.baidu.com/test/xxx就會有app打開提示如下圖(這個提示圖要下個步驟配置好才有):
你訪問https://www.baidu.com/ex/xxx 就沒有提示
2:啟動 App 時 當作參數給 App 傳進來,但由於這是為了對接微信sdk所以這塊內容不做深究,有興趣的小伙伴可以研究一下
-
配置Associated Domains
在蘋果開發者賬號裡面勾選對應app的Associated Domains
在xcode裡面配置(如果你是自動獲取簽名方式,xcode裡面添加好Associated Domains,開發者後臺自動勾選Associated Domains)
註意Domains填的就是上一步apple-app-site-association放的功能變數名稱,例:applinks:www.baidu.com(不要https://,不要加路徑path)
到這裡Universal Links的配置就ok了,手機重新安裝好app,safari打開對應的link地址就會提示(註意我手機打開提示要往上拉一下才看得到,導致我花了大半時間確認是否配置出錯,後來才發現在上面):
3.配置微信sdk相關
-
在微信開放平臺配置Universal links
其中links地址要帶上https://(看微信提示文字即可)
-
配置Url Type
填入微信開放平臺對應的appid即可
-
配置Info
4.微信代碼編輯
初始化代碼編輯:
[WXApi registerApp:@"微信appid" universalLink:@"https://www.baidu.com"];
回掉代碼編輯:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler { return [WXApi handleOpenUniversalLink:userActivity delegate:self]; }
註意要增加WXApiDelegate,才能回掉onResp,業務代碼就能保持不變
要測試是否所有都正常可以調用微信sdk自檢代碼
[WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) { NSLog(@"WeChatSDK: %@", log); }];
[WXApi registerApp:@"微信appid" universalLink:@"https://www.baidu.com"];
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) { NSLog(@"step:%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion); }];
如下圖所示:這表示對接成功
5:註意事項
對接了最新sdk之後不一定能立馬去掉未驗證應用提示。 根據微信解釋如下:舊版本沒有正確接入新版OpenSDK(有分享二跳,授權登錄二次確認的情況),新版 本剛修複這個問題。需要等新版本放量上去讓整體錯誤率下降到90%以下才會從未驗證應用中移除。
參考文檔:iOS應用出現未驗證應用的問題排查