文章目錄
一、前言
最近項目發佈iOS
版本後,發現微信分享的時候,分享下方提示(爲驗證應用)
遇到微信相關問題,先上微信開放社區搜索,前往微信開放社區。搜到了微信官方說明:《微信開放平臺移動應用 SDK 更新提醒》。
文中提到了一個叫Universal Links
的東西,下面就整理下如何弄這個Universal Links
。
二、關於Universal Links
在iOS9
之前,要在瀏覽器中喚醒APP,我們通常使用scheme
。這種方式需要提前判斷系統中是否安裝了能夠響應此scheme
的app
,並且這種方式在微信被禁用。
Universal Links
可以鏈接到您應用中的內容並安全地共享數據. 當用戶點擊Universal Links
時,iOS會將鏈接直接重定向到您的應用程序,而無需通過Safari
或您的網站進行路由。此外,由於Universal Links
是標準HTTP
或HTTPS
鏈接,因此一個URL
既適用於您的網站,也適用於您的應用程序。如果未安裝您的應用程序,則系統會在Safari中
打開URL
,以使您的網站能夠處理它。當用戶安裝您的應用程序時,iOS
會檢查存儲在Web
服務器上的文件,以驗證您的網站是否允許您的應用程序代表其打開URL
。只有您才能將此文件存儲在服務器上,以確保網站和應用程序之間的關聯。
注意:設置支持Universal Links
你必須有一個支持https
的域名
三、如何添加Universal Links
1、勾選Associated Domains(關聯域名)
登錄蘋果開發者後臺,在設置證書的頁面找到Identifiers -> App ID
(設置包名)裏,在對應的BundleId
下勾選 Associated Domains
,如下圖
保存設置,然後重新生成配置文件。
2、添加Universal Links
在Xcode(11)
裏面添加Associated Domains
按照圖中的步驟添加好Universal Links
注意點:在 Associated Domains裏面配置的Universal Links
必須要以applinks:
開頭,後面寫上域名,例如
applinks:www.apple.com
記住你這裏配置的域名,下面需要上傳apple-app-site-association
配置文件到這個域名根目錄中。
3、配置apple-app-site-association
自己創建一個名叫 apple-app-site-association
的json
格式文件,注意文件命不需要添加.json後綴。apple官方參照地址
{
"applinks": {
"apps": [],
"details": [
{
"appID": "D3KQX62K1A.com.example.photoapp",
"paths": ["/albums"]
},
{
"appID": "D3KQX62K1A.com.example.videoapp",
"paths": ["/videos"]
},
{
"appID": "D3KQX62K1A.com.example.cameraapp",
"paths": ["*"]
},
{
"appID": "D3KQX62K1A.com.example.iphoneapp",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
}
]
}
}
details
: 以鍵值對的形式添加爲字典數組的JSON
表示,每個應用程序一個字典。對於每個特定於應用程序的詞典(上面就表示了同一個teamid下的4個不同的應用)
appID
: 格式爲TeamIdentifier.bundle identifier
(開發者賬號teamID.app
的bundle identifier
)。
paths
: 應用程序支持的網站,以路徑字符串數組形式指定。只有這些指定的路徑的鏈接,才能被app
所處理,*
符號寫法代表了可識別域名下所有鏈接。例如,附加
*
到特定的網址(例如/ videos/samples/2015/*
)以videos/samples/2015/
下的所有路徑。
使用?
匹配任何單個字符,如/photography/*/samples/201?/mypage
。
使用獨立*
網站來指定整個網站。
在路徑字符串的開頭NOT
添加(包括T後面的空格)來標識不應處理的區域。
注意paths
路徑字符串區分大小寫。
4、上傳apple-app-site-association到服務器(服務器需要支持https)
上傳 apple-app-site-association
文件到域名的根目錄或者.well-known
子目錄下
能打開https://你的https域名/apple-app-site-association
或 https://你的https域名/.well-known/apple-app-site-association
當我們的App
在設備上第一次運行時,如果支持Associated Domains
功能,那麼iOS
會自動去獲取域名下的apple-app-site-association
文件
上傳成功後,我們可以用蘋果提供的驗證網址來直接驗證apple-app-site-association
設置是否生效。
注意事項 :
iOS 9.2
之前,不用跨域都可以跳轉,iOS 9.2
之後,必須跨域才能進行跳轉到原生app
上。
iOS
只會在App
第一次啓動時請求一次apple-app-site-association
文件,服務器上該文件的更新不會讓iOS
本地的文件同步更新。
5、工程中添加處理方法
現在用戶點擊我們配置的域名下的匹配的鏈接,直接可以進我們的app
了。但是,如果想要能夠獲取到用戶進來的鏈接,根據鏈接來處理,需要展示給用戶的信息,那麼需要在工程裏的AppDelegate
裏實現 方法
- (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
進來,也就是處理邏輯的時候。
6、在微信開放平臺臺配置Universal Links
微信開放平臺地址:https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN
在微信開放平臺登錄你的開發者賬號,進入你的應用配置
配置的地方如下圖所示