產(chǎn)品和客服反饋微信分享提示未驗證,讓我們排查原因恬总,看了微信文檔才知道前普,由于蘋果iOS 13系統(tǒng)版本安全升級,為此WechatOpenSDK在
1.8.6
版本進行了適配壹堰。 1.8.6
版本支持Universal Links
方式跳轉(zhuǎn)拭卿,對WechatOpenSDK分享進行合法性校驗。以下是我整理的配置流程和遇到坑贱纠。
確認微信App版本是否支持Universal Links
首先峻厚,確認微信(7.0.7或以上版本)的Universal Links在設(shè)備上正常,以確保openSDK與微信雙向使用Universal Links通信 Safari輸入https://help.wechat.com/app/
Safari 加載完成后需要下拉到頂谆焊,查看是否有打開微信入口(如下圖)惠桃。若無入口,可能是由于系統(tǒng)拉取微信Universal Links失敗辖试,請檢查手機網(wǎng)絡(luò)狀態(tài)是否正常辜王,或更新/重裝微信
配置我們App的蘋果Universal Links
請按照以下步驟將您的應(yīng)用和網(wǎng)站相關(guān)聯(lián)以獲取Universal Links
:
將添加Associated Domains Entitlement到您的應(yīng)用。使用
applinks
服務(wù)前綴包含您的應(yīng)用程序?qū)⒅С值乃杏蛱曛础U垍㈤?a target="_blank">添加關(guān)聯(lián)的域權(quán)利誓禁。將Apple App Site Association文件添加到您的網(wǎng)站蜘拉。請參閱添加Apple App Site Association文件昔驱。
將
applinks
密鑰添加到Apple App Site Association
文件中庆锦。指定每個應(yīng)用程序?qū)⑻幚淼木W(wǎng)站部分硼婿。
具體操作
1. 登錄蘋果開發(fā)者后臺怒见,在設(shè)置證書的頁面找到 Identifiers -> App ID
(設(shè)置包名)里俗慈,在對應(yīng)的BundleId下勾選 Associated Domains
如下圖
名)里,在對應(yīng)的BundleId下勾選 Associated Domains
如下圖
保存設(shè)置遣耍,然后重新生成配置文件闺阱。
2. 在Xcode(11)里面添加Associated Domains
按照圖中的步驟添加好Universal Links
注意點:在 Associated Domains里面配置的Universal Links必須要以
applinks:開頭,后面寫上域名不要加paths
舵变,例如
applinks:www.apple.com
3. 配置apple-app-site-association
自己創(chuàng)建一個名叫 apple-app-site-association的json格式文件酣溃,注意文件命不需要添加的后綴。apple官方參照地址
{
"applinks": {
"apps": [],
"details": [{
"appID": "D3KQX62K1A.com.example.photoapp",
"paths": ["/albums"]
},
{
"appID": "D3KQX62K1A.com.example.cameraapp",
"paths": ["*"]
}
}
}
details
-- 鍵的值添加為字典數(shù)組的JSON表示纪隙,每個應(yīng)用程序一個字典赊豌。對于每個特定于應(yīng)用程序的詞典
(上面就表示了同一個teamid下的4個不同的應(yīng)用),包括 和 鍵:appIDpathsappID
-- 將處理格式為的鏈接的應(yīng)用程序的標識TeamIdentifier.bundle identifier(開發(fā)者賬號teamID.app的bundle identifier)绵咱。paths
-- 應(yīng)用程序支持的網(wǎng)站各個部分碘饼,以路徑字符串數(shù)組形式指定。只有這些指定的路徑的鏈接悲伶,才能被app所處理,*
符號寫法代表了可識別域名下所有鏈接建議Universal Links配置path艾恼,例如/app/*, 避免全域命中Universal Links跳轉(zhuǎn)
。我之前就是用全域通配麸锉,提供給合作方的H5頁面钠绍,在某些情況(微信瀏覽然后通過Safari加載的時候;合作方App加載H5的時候)
下會打開或者跳轉(zhuǎn)到自己App淮椰。遇到這種情況只能重新配置apple-app-site-association文件的paths五慈,而且分享還會出現(xiàn)異常。例如: 附加
*
到特定的網(wǎng)址(例如/videos/samples/2015/*
)以指定/下的所有路徑videos/samples/2015/
主穗。使用?
匹配任何單個字符泻拦,如/photography/*/samples/201?/mypage
。使用獨立*
網(wǎng)站來指定整個網(wǎng)站忽媒。
通過“NOT ”
在路徑字符串的開頭添加(包括T后面的空格)來標識不應(yīng)處理的區(qū)域争拐。
注意 用于在paths 數(shù)組中指定網(wǎng)站路徑的字符串 區(qū)分大小寫。僅將URL的路徑部分用于比較晦雨。其他組件(例如查詢字符串或片段標識符)將被忽略架曹。
4.上傳apple-app-site-association
到服務(wù)器(服務(wù)器需要支持https)
上傳
apple-app-site-association
文件到域名的根目錄或者.well-known子目錄下
能打開https:///apple-app-site-association
或https:///.well-known/apple-app-site-association
當我們的App在設(shè)備上第一次運行時,如果支持Associated Domains功能闹瞧,那么iOS會自動去獲取域名下的apple-app-site-association文件
- 上傳成功后绑雄,我們可以用蘋果提供的驗證網(wǎng)址來直接驗證
apple-app-site-association
設(shè)置是否生效。
注意事項 : iOS 9.2之前奥邮,不用跨域都可以跳轉(zhuǎn)万牺, iOS 9.2之后罗珍,必須跨域才能進行跳轉(zhuǎn)到原生app上。
iOS只會在App第一次啟動時請求一次apple-app-site-association文件脚粟,服務(wù)器上該文件的更新不會讓iOS本地的文件同步更新覆旱。
5. 工程中添加處理方法
現(xiàn)在用戶點擊我們配置的域名下的匹配的鏈接,直接可以進我們的app了。但是,如果想要能夠獲取到用戶進來的鏈接,根據(jù)鏈接來處理,需要展示給用戶的信息
那么需要在工程里的 AppDelegate 里實現(xiàn) 方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
{
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *webpageURL = userActivity.webpageURL;
NSString *host = webpageURL.host;
if ([host isEqualToString:@"apple..com"]) {
//進行我們需要的處理
}
else {
[[UIApplication sharedApplication]openURL:webpageURL];
}
}
return YES;
}
當 userActivity 是
NSUserActivityTypeBrowsingWeb
類型, 則意味著它是由Universal Links進來,也就是處理邏輯的時候核无。
確認App的Universal Links配置成功
用xcode 跑一個debug 包(卸載之前包)
扣唱,通過 Safari輸入Universal Links(包括完整路徑)+隨機字符串(例如: abc)
,因為第三方分享會在后面添加參數(shù)团南,所以添加隨機字符噪沙,加載完成后,入口默認是在最頂上看不到吐根,需要往上滑頂才能看到曲聂,如果能展示你的App就代表通配符*
配置成功了。
集成微信分享的配置和Universal Links配置
集成微信SDK( 如果已經(jīng)集成了分享功能佑惠,可以忽略部分步驟)
-
在 Xcode 中朋腋,選擇你的工程設(shè)置項,選中“TARGETS”一欄膜楷,在“info”標簽欄的“URL type“添加“URL scheme”為你所注冊的應(yīng)用程序 id
添加微信URL scheme -
在Xcode中旭咽,選擇你的工程設(shè)置項,選中“TARGETS”一欄赌厅,在 “info”標簽欄的“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI
( 如果已經(jīng)集成了分享功能穷绵,應(yīng)該已經(jīng)配置好了)
添加白名單 注冊微信、實現(xiàn)微信代理等操作 (如果是集成了友盟按照友盟注冊和實現(xiàn)代理)
-
微信開發(fā)者后臺添加Universal Links
(這步官網(wǎng)沒有提示很容易遺漏)
微信后臺添加Universal Links 最后可以使用WXApi新增了自檢函數(shù)
checkUniversalLinkReady:
自檢函數(shù)排查接入問題
//在register之前打開log, 后續(xù)可以根據(jù)log排查問題
[WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) {
NSLog(@"WeChatSDK: %@", log);
}];
//務(wù)必在調(diào)用自檢函數(shù)前注冊
[WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK];
//調(diào)用自檢函數(shù)
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {
NSLog(@"%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion);
}];
WXULCheckStep值說明:
step = WXULCheckStepParams: 參數(shù)檢查 step = WXULCheckStepSystemVersion: 當前系統(tǒng)版本檢查 step = WXULCheckStepWechatVersion: 微信客戶端版本檢查 step = WXULCheckStepSDKInnerOperation: 微信SDK內(nèi)部操作檢查 step = WXULCheckStepLaunchWechat: App拉起微信檢查 step = WXULCheckStepBackToCurrentApp: 由微信返回當前App檢查 step = WXULCheckStepFinal: 最終檢查 會依次回調(diào)這7個step特愿,當回調(diào)了WXULCheckStepFinal仲墨,說明檢測通過,SDK接入成功揍障。 任一step回調(diào)的result.success為NO, 流程終止目养,后續(xù)不再回調(diào),可以根據(jù)result.errorInfo的查看當前步驟錯誤的原因毒嫡,根據(jù)result.suggestion修復(fù)問題.
以上微信相關(guān)配置來自以 微信官方文檔
配置中遇到坑
-
我的工程是集成了友盟精簡版微信分享癌蚁,友盟版本需要
6.9.7以上
才支持了WechatOpenSDK 1.8.6
,而且需要完整版兜畸,所以用精簡版的同學(xué)需要更換為完整版努释。
image.png -
我的項目集成了微信支付,微信和友盟完整版分享會有沖突咬摇,那就不能用cocoapods 集成了伐蒂,需要更換為手動集成微信SDK和友盟分享????。在友盟SDK中刪除
libWeChatSDK.a
WXApiObject.h
最后如下圖
微信 所有都集成好了肛鹏,調(diào)試手機微信分享沒有提示未驗證??逸邦,打包測試安裝后還是未驗證汰翠,各種排查,各種查資料??昭雌,原來授權(quán)不是及時的,到了第二天才生效了健田。
還有測試直接不能分享烛卧,授權(quán)頁面就直接自動返回App。又是各種排查????????妓局,最后重啟手機問題解決了总放。
舊版本沒有正確接入新版OpenSDK(有分享二跳,授權(quán)登錄二次確認的情況)好爬,新版 本剛修復(fù)這個問題局雄。需要等新版本放量上去讓整體錯誤率下降到90%以下才會從未驗證應(yīng)用中移除。
例:前一天你的App總共分享了100次消息到微信(微信以AppID來統(tǒng)計存炮,只計算1.8.6以及以上版本的分享)炬搭,其中正確的次數(shù)必須要高于10次。paths
用全域通配"paths": ["*"]
穆桂, 導(dǎo)致全域命中Universal Links跳轉(zhuǎn)宫盔。提供給合作方的H5頁面,在某些情況(微信瀏覽然后通過Safari加載的時候享完;合作方App加載H5的時候)
下會打開或者跳轉(zhuǎn)到自己App灼芭。各方合作方都來投訴,沒辦法只能重新配置apple-app-site-association
文件的"paths": ["/app/*"]
,修改完成后般又,重新卸載安裝App測試發(fā)現(xiàn)不會再跳轉(zhuǎn)了彼绷,線上App微信分享也正常,感覺事情就要結(jié)束了??茴迁。告訴合作方已經(jīng)修改好了寄悯,但是他們手機安裝我們的App已經(jīng)授權(quán),緩存了Universal Link記錄堕义,依然會跳轉(zhuǎn)到我們的App热某,于是就各種查資料、看官方文檔沒有關(guān)于緩存時間和觸發(fā)apple-app-site-association
更新的時機??胳螟。經(jīng)過自己的測試只有卸載重裝昔馋、更新App會觸發(fā)apple-app-site-association
更新的時機,新的Universal Links才會生效糖耸。反復(fù)折騰了一天秘遏,只希望蘋果明天會更新緩存(我知道這個是不能的,只是幻想
)嘉竟。-
第二天邦危,沒有等來更新緩存的好消息洋侨,卻給我迎頭一棒,在系統(tǒng) iOS 14以上的新用戶微信無法分享倦蚪,正在連接希坚,就直接跳回App,導(dǎo)致無法分享陵且。iOS 14 以下可以正常使用裁僧。
image.png
后面更新了微信后臺的Universal Link,發(fā)現(xiàn)線上用戶都無法使用微信分享慕购,提示Universal Link驗證失敗??聊疲,趕緊恢復(fù)了之前的Universal Link。只能等待新版上線開啟新的Universal Link沪悲,到時候老版本都會無法分享获洲,有投訴就只能讓用戶更新App。感覺微信太不厚道了殿如,appid已經(jīng)配置了贡珊,你不能分享失敗啊涉馁!回到以前分享成功顯示未驗證飞崖,我也能接受啊谨胞!