iOS13+ 通用鏈接(Universal Link)設(shè)置 解決APP接入微信支付和分享問題

最近項目中,微信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

開發(fā)平臺.jpg

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.jpg

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-associationhttps://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如下圖

開發(fā)者平臺.png

保存設(shè)置,然后重新生成配置文件。

3.2 Xcode工程配置

·在 Xcode 中,選擇你的工程設(shè)置項,選中“TARGETS”一欄,在“info”標簽欄下的“URL type“添加“URL scheme”為你所注冊的應(yīng)用程序 id:在“LSApplicationQueriesSchemes“添加weixin 和weixinULAPI(如下圖所示)

info.png

·打開Associated Domains開關(guān),將Universal Links域名加到配置上
Domains.png

注意點:在 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中打開。

至此,基本的配置已經(jīng)結(jié)束,如果遇到問題,可以留言交流。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容