Universal links的來龍去脈就不說了,這里簡單總結(jié)幾點我認(rèn)為比較容易讓人困惑的事項舟茶,希望能給遇到困難的小伙伴們提供一點幫助。
2021-3-16更新:
如果你嫌配置這些東西太麻煩堵第,用ShareSDK吧吧凉。它會幫你把這些東西都配置好,然后你復(fù)制它給你的鏈接直接用就好了型诚,省去你研究格式的時間客燕,也不用讓后臺幫你更新這個文件了。我底下寫的這些東西你也就可以不看了...
先貼下蘋果官方文檔:點這里
一狰贯、 關(guān)于apple-app-site-association在服務(wù)器上的路徑
上面這個文檔里也搓,蘋果建議放在域名下的".well-known"文件夾里,比如:
https://<your-domain>/.well-known/apple-app-site-association
但從百度上的結(jié)果來看涵紊,".well-known"這個路徑弄起來還挺麻煩的傍妒。所以還是推薦直接放在域名根目錄底下,就是這樣:
https://<your-domain>/apple-app-site-association
二摸柄、這個apple-app-site-association里面的json怎么寫
上面文檔推薦的格式是:
// 格式1
{
"applinks": {
"details": [
{
"appIDs": [ "ABCDE12345.com.example.app", "ABCDE12345.com.example.app2" ],
"components": [ // 相當(dāng)于其他格式中的paths
{
"/": "/buy/*", // 具體的path
"comment": "Matches any URL whose path starts with /buy/" // 注釋
},
{
"/": "/help/website/*",
"exclude": true, // 作用同其他格式具體path前面的那個"NOT"
"comment": "Matches any URL whose path starts with /help/website/ and instructs the system not to open it as a universal link"
}
]
}
]
}
}
可是你在網(wǎng)上絕大多數(shù)的文章里看到的都是這樣的格式:
// 格式2
{
"applinks": {
"apps": [], // 空數(shù)組就好了
"details": [
{
"appID": "ABCDE12345.com.example.app",
"paths": [ "/universal_links_callback/*", "/qq_conn/666888666/*", "NOT /website/*" ]
}
]
}
}
你可能還會看到第3種格式:
// 格式3颤练,知乎就是這樣的格式
{
"applinks": {
"apps": [],
"details": { // 和格式2相比,details變成了字典驱负,原本顯式的"appID"直接變成了key
"ABCDE12345.com.example.app": {
"paths": [
"/universal-links-callback/*",
"/qq_conn/666888666/*",
"NOT /website/*"
]
}
}
}
}
看上去格式1比格式2嗦玖、3更復(fù)雜點,但語義更清晰跃脊,可讀性更高宇挫。"components"相當(dāng)于其他格式中的"paths";"component"下的"exclude": true酪术,相當(dāng)于格式2器瘪、3中paths里具體path前的"NOT",意思是不把這個路徑的鏈接當(dāng)通用鏈接來處理绘雁。
按理這三種格式都是ok的橡疼。但是如果你用蘋果最新推薦的“格式1”的話,當(dāng)你在QQ互聯(lián)中驗證Universal link時會一直失敗庐舟,會報一個大概意思是“在你的apple-app-site-association中找不到QQ相關(guān)的Universal link信息”的錯誤欣除。微信是沒問題的,因為微信不校驗挪略。
三耻涛、如果你用了友盟分享废酷,還需要集成微信支付時的注意事項
第一個:pod友盟的精簡版微信分享"ReducedWeChat",和最新的微信官方"WechatOpenSDK"
pod 'UMCShare/Social/ReducedWeChat'
pod 'WechatOpenSDK'
第二個:除了原本友盟的注冊方法之外抹缕,你還需要再調(diào)用下微信sdk的注冊方法。否則分享可以調(diào)起微信墨辛,但支付的時候調(diào)不起來卓研。
// 原本友盟的注冊方法
UMSocialGlobal.shareInstance()?.universalLinkDic =
[UMSocialPlatformType.wechatSession : universalLink_wx,
UMSocialPlatformType.QQ : universalLink_qq]
UMSocialManager.default().setPlaform(.wechatSession,
appKey: WXAppId,
appSecret: WXAppSecret,
redirectURL: nil)
// 微信sdk的注冊方法
WXApi.registerApp(WXAppId, universalLink: universalLink_wx)