最近項目中拦键,微信SDK針對 iOS 13系統(tǒng)版本安全性男娄,進行了對應(yīng)升級,微信SDK版本為openSDK(1.8.6+)十艾。在微信官方介紹中抵代,1.8.6.1 版本開始支持Universal Links方式跳轉(zhuǎn),對openSDK分享進行合法性校驗忘嫉。
*環(huán)境
SDK版本: SDK1.8.6或以上
微信版本: 7.0.7或以上
系統(tǒng)版本: iOS12或以上
一荤牍、微信開放平臺配置Universal Links
1.配置應(yīng)用的Universal Links
1)根據(jù) 蘋果文檔 配置你應(yīng)用的Universal Links
微信對Universal Links配置要求
a)Universal Links必須支持https
b)Universal Links配置的paths不能帶query參數(shù)
c)微信使用Universal Links拉起第三方App時,會在Universal Links末尾拼接路徑和參數(shù)庆冕,因此App配置的paths必須加上通配符/*
1.2 確認App的Universal Links配置成功
微信使用第三方App的Universal Links喚起第三方App時康吵,會在Universal Links末尾拼接路徑和參數(shù),因此開發(fā)者Universal Links配置必須加上通配符“*”愧杯,并測試Universal Links拼接字符串能否喚起app
例如:我微信開發(fā)平臺配置Universal Links為:https://www.abctest.cn/
二涎才、配置apple-app-site-association
appID格式為:TeamID + . + BundleID
TeamID在開發(fā)者平臺找
2.1注意事項:
自己創(chuàng)建一個名叫 apple-app-site-association的json格式文件鞋既,注意文件命不需要添加的后綴力九。apple官方參照地址
注意 用于在paths 數(shù)組中指定網(wǎng)站路徑的字符串 區(qū)分大小寫。僅將URL的路徑部分用于比較邑闺。其他組件(例如查詢字符串或片段標識符)將被忽略跌前。
2.2上傳apple-app-site-association到服務(wù)器(服務(wù)器需要支持https)
上傳
apple-app-site-association
文件到域名的根目錄或者.well-known子目錄下
能打開https://www.abctest.cn/apple-app-site-association
或https://www.abctest.cn/.well-known/apple-app-site-association
當我們的App在設(shè)備上第一次運行時,如果支持Associated Domains功能陡舅,那么iOS會自動去獲取域名下的apple-app-site-association文件
- 上傳成功后抵乓,我們可以用蘋果提供的驗證網(wǎng)址來直接驗證
apple-app-site-association
設(shè)置是否生效。
三靶衍、開發(fā)者平臺證書及Xcode工程配置
3.1 登錄蘋果開發(fā)者后臺灾炭,在設(shè)置證書的頁面找到 Identifiers -> App ID(設(shè)置包名)里,在對應(yīng)的BundleId下勾選 Associated Domains如下圖
保存設(shè)置颅眶,然后重新生成配置文件蜈出。
3.2 Xcode工程配置
·在 Xcode 中,選擇你的工程設(shè)置項涛酗,選中“TARGETS”一欄铡原,在“info”標簽欄下的“URL type“添加“URL scheme”為你所注冊的應(yīng)用程序 id:在“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI(如下圖所示)
·打開Associated Domains開關(guān)偷厦,將Universal Links域名加到配置上
注意點:在 Associated Domains里面配置的Universal Links必須要以applinks:開頭,后面寫上域名燕刻。
例如:applinks:www.abctest.cn
四只泼、具體實現(xiàn)(以iOS項目Swift語言為例)
1、在AppDelegate.swift文件的didFinishLaunchingWithOptions方法里注冊WXApi:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) >-> Bool {
WXApi.registerApp(kWeixinAppKey, universalLink: kUniversalLink)
return true
}
2卵洗、重寫 AppDelegate 的 handleOpenURL 和 openURL 方法:
// iOS9.0以前使用
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
let handleUrlStr = url.absoluteString
if let handleUrl = URL(string: handleUrlStr) {
return WXApi.handleOpen(handleUrl, delegate: WXApiManager.sharedInstance)
}
return false
}
// iOS9.0及以后推薦使用
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let handleUrlStr = url.absoluteString
if let handleUrl = URL(string: handleUrlStr) {
return WXApi.handleOpen(handleUrl, delegate: WXApiManager.sharedInstance)
}
return false
}
// 必須實現(xiàn)
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
let handleUrlStr = url.absoluteString
if let handleUrl = URL(string: handleUrlStr) {
return WXApi.handleOpen(handleUrl, delegate: WXApiManager.sharedInstance)
}
return false
}
3请唱、重寫AppDelegate的continueUserActivity方法:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
return WXApi.handleOpenUniversalLink(userActivity, delegate: WXApiManager.sharedInstance)
}
四、注意事項
1:必須在IOS9及以上过蹂。
2:當在瀏覽器中點擊Universal Links時籍滴,如果這個link和頁面是同一個域名,則不走調(diào)起榴啸,而是當做普通鏈接在當前瀏覽器打開孽惰。
3:在測試階段,微信分享或者支付不要打開代理抓包鸥印,這樣也不走調(diào)起.—— 特別注意留心
4:成功調(diào)起app后勋功,app的右上角的 state bar有在safari(letv.com)中打開的選項,如果你點擊了它库说,它會跳轉(zhuǎn)到safari狂鞋,同時系統(tǒng)會認為你選擇使用safari打開該域名的鏈接,而不調(diào)起app潜的。以后你再點擊該鏈接骚揍,它只會在safari里面跳轉(zhuǎn)。
該如何再次開啟:
(1) 在safari頁面中啰挪,手指往下拉動一下頁面信不,會顯示出一個“隱藏”的banner,俗稱 smart banner亡呵,右側(cè)是一個button:打開(open)抽活,點擊它,就又會開啟app跳轉(zhuǎn)功能锰什。
(2) 把鏈接粘貼到備忘錄中下硕,長按后選擇 在XXAPP中打開。