原來公司老的App用的微信SDK為1.8.2,并不需要配置Universal Link糕殉,
然后最近有需求需要新建一個APP颈将,發(fā)現(xiàn)蘋果官方從2020年中起,新建的App里就不允許使用UIWebView了饥脑,否則打包上傳后無法在Apple Connect中顯示恳邀,郵箱會收到如下的提示:
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.
接下去檢測項目中哪些代碼或者插件使用了UIWebView,使用如下命令:
grep -r UIWebView .
發(fā)現(xiàn)微信SDK中使用了UIWebView灶轰,看來新的App已經(jīng)無法使用1.8.2版本的微信SDK了谣沸,看了一下微信開放平臺iOS相關(guān)文檔,iOS的SDK從1.8.6.2開始移除UIWebView笋颤,也就是說乳附,起碼要升級到1.8.6.2,最新版本是1.9.1伴澄。
沒辦法赋除,只能升級了,更新了項目中的SDK后發(fā)現(xiàn)初始化的方法變了:
// 原來
[WXApi registerApp: XXXX];
// 現(xiàn)在
[WXApi registerApp: XXXX universalLink: XXXX];
初始化需要Universal Link了秉版,先不管他贤重,直接設(shè)置空
[WXApi registerApp: XXXX universalLink: @""];
然后,App就無法拉起微信了清焕。并蝗。
看來微信SDK現(xiàn)在一定要配置Universal Link了,我原來的理解是:Universal Link都是給需要從H5頁面拉起App的需求用的秸妥,現(xiàn)在居然從我的App跳轉(zhuǎn)微信App也需要配滚停,沒辦法,他說要配那就只能配了粥惧。
Universal Link使用前提:
-有注冊域名键畴,并且支持https可通過 SSL 訪問
-需要上傳一個apple-app-site-association文件到域名根目錄
-僅支持iOS 9及以上版本
-只支持真機(jī)調(diào)試
下面為Universal Link配置步驟
假設(shè)我們的域名為https://www.test.com
1、進(jìn)入蘋果開發(fā)者平臺,登錄賬號起惕,進(jìn)入Identifiers涡贱,選擇對應(yīng)的App,進(jìn)去后選中Associated Domains惹想,然后Save问词。
2、如果你是手動建的Profile描述文件嘀粱,記得要去Profiles中更新描述文件激挪,老的已經(jīng)不能用了。如果是XCode自動生成的锋叨,需要參考下圖去XCode中的Build Setting中把Code Signing Entitlements內(nèi)容清空垄分,讓XCode再自動生成一份描述文件。(手動生成無需清空)
注:由于刪掉該記錄會導(dǎo)致capabilities數(shù)據(jù)移除娃磺,需要重新添加capability薄湿。
3、在XCode工程中豌鸡,添加Associated Domains嘿般,并將Universal Links域名上,這里的域名就為:applinks:www.test.com涯冠,不需要加任何前綴后綴
4炉奴、在info.plist中的LSApplicationQueriesSchemes里添加weixinULAPI
5、接下去配置apple-app-site-association文件蛇更,文件為json格式瞻赶,但是要把.json后綴去掉。
在WWDC2019派任,蘋果更新了apple-app-site-association文件的配置方法砸逊,推薦使用新寫法,擁有更強(qiáng)的配置能力掌逛,參考鏈接师逸。
放一張參考圖和一些引用的解釋,途中灰色的就為老的配置方法豆混。
- apps 這個字段只有在 iOS 上有用篓像,tvOS/macOS 這個字段可以忽略
- details 字段結(jié)構(gòu)大幅度變化
- 以前是字典 appID 為 Key,現(xiàn)在是數(shù)組皿伺,并且支持 appIDs 這樣的 key员辩,可以一套配置適配多個 appID,大幅度減少工作量
- 新增 components 字段鸵鸥,可以進(jìn)一步約束 Universal Link 的生效條件
- 可以通過 / 來配置支持的 path 格式條件
- 可以通過 # 來配置支持的錨點(diǎn)條件
- 可以通過 ? 來配置支持的字段條件
- exclude 是排除字段奠滑,符合這個條件的 Universal Link 不生效
我們這邊可以這樣配置,配置https://www.test.com/ios/后面的任意頁面都適用Universal Link
{
"applinks": {
//"apps": [],
"details": [
{
//"appID": "TeamID.BundleID",
"appIDs": [ "TeamID.BundleID1", "TeamID.BundleID2" ],
//"paths": [ "/ios/*" ],
"components": [
{
"/": "/ios/*",
// "/": "*",如果要https://www.test.com下所有的頁面都適用就這樣配,但是推薦還是分一下路徑宋税,畢竟一個公司下可能會有多款A(yù)pp
"comment": "Matches any URL whose path starts with /ios/"
}
]
}
]
}
}
TeamID如何獲取
6摊崭、配置后請后臺管理人員把a(bǔ)pple-app-site-association文件放在https://www.test.com根目錄下,然后測試一下用瀏覽器打開https://www.test.com/apple-app-site-association弃甥,如果能顯示文件內(nèi)容或下載下來文件爽室,則說明配置成功。
到這一步淆攻,真機(jī)重新運(yùn)行App,然后真機(jī)打開Safari嘿架,瀏覽器輸入https://www.test.com/ios/瓶珊,頁面雖然顯示空白,但是往下拉一下耸彪,頁面頂部已經(jīng)顯示了可以打開App了伞芹。
注:如果沒效果,嘗試刪除一下App蝉娜,重新運(yùn)行唱较。
如刪除服務(wù)器上的apple-app-site-association文件,發(fā)現(xiàn)刪除APP重新安裝后召川,還是會顯示頂部打開App南缓,這個時候嘗試刪除App并重啟手機(jī)。
如發(fā)現(xiàn)將apple-app-site-association文件重新放上服務(wù)器后荧呐,重新安裝App后測試網(wǎng)頁也不顯示頂部欄汉形,這時候嘗試刪除App并Clean一下Build,重新Build一下再安裝倍阐。
7概疆、去微信開發(fā)平臺對應(yīng)的應(yīng)用中的iOS配置中配置一下Universal Link:https://apitest.mshchina.com/ios/
8、微信SDK初始化代碼
[WXApi registerApp:微信AppID universalLink:@"https://apitest.mshchina.com/ios/"];
好了峰搪,再嘗試調(diào)微信SDK岔冀,就可以在我們的App中拉起微信了。
遇到的坑
// URI scheme以及微信SDK處理iOS13以下版本的回調(diào)概耻,走這個
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
// 我們需要的判斷跳轉(zhuǎn)
return YES;
}
// Universal Links以及微信SDK處理iOS13以上版本的回調(diào)使套,走這個,兩個方法都要適配
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler {
// 我們需要的判斷跳轉(zhuǎn)
return YES;
}