iOS之Universal Links應(yīng)用

前言:Universal Links是蘋果在iOS9上開始支持的外部跳轉(zhuǎn)App的功能,正如它的名字Universal Links通過它特有的機(jī)制保證了跳轉(zhuǎn)鏈接的唯一性,不會和其它App沖突,而這正是之前我們一直使用的schema所無法保證的。下面會一步一步的介紹如何使自己的App支持Universal Links功能。


使用Universal Links的優(yōu)點

唯一性:因為跳轉(zhuǎn)是直接使用的Http 或 Https和官網(wǎng)域名進(jìn)行跳轉(zhuǎn)的,不會和其它App沖突。
安全性:apple-app-site-assocation文件是以Https的形式重SSL服務(wù)器請求的。
靈活性:實現(xiàn)了App和網(wǎng)站的配合,不會出現(xiàn)用戶無法跳轉(zhuǎn)的情況。
簡單性:統(tǒng)一的跳轉(zhuǎn)鏈接。
隱私性:而且其它用戶無法判斷你的App是否安裝。

注:將Universal Links 結(jié)合 Shared Web CredentialsApp Handoff一起使用可以實現(xiàn)一套完美的業(yè)務(wù)跳轉(zhuǎn)方案。

獨(dú)自進(jìn)行Universal Links的測試主要分為下面3個步驟:
  1. SSL服務(wù)器搭建和配置。
  2. apple-app-site-association文件定義。
  3. xcode工程配置。

SSL服務(wù)器配置

蘋果官方要求Universal Links功能依賴的apple-app-site-association必須以HTTPS的協(xié)議從配置了SSL的服務(wù)器上請求獲取的。下面簡單介紹一下SSL服務(wù)器配置:

1. 簽名證書生成

由于是自己測試,這里使用的是自簽名證書,使用如下命令可以生成自簽名證書,注意過程中需要填寫自己的域名:

1. 進(jìn)入'/etc/apache2'目錄,新建'ssl'文件夾
2. 生成私鑰 :sudo openssl genrsa -des3 -out app.key 1024
3. 生成簽名申請 :sudo openssl req -new -key app.key -out app.csr 
4. 生成服務(wù)器的私鑰 : sudo openssl rsa -in app.key -out server.key
5. 生成給網(wǎng)站服務(wù)器簽名的證書:sudo openssl req -new -x509 -days 3650 -key server.key -out server.crt
命令執(zhí)行實例.jpeg
2. 配置Apache服務(wù)器,開啟SSL

2.1. 打開/etc/apache2/httpd.conf配置文件,打開下面幾行:

LoadModule ssl_module libexec/apache2/mod_ssl.so /*(加載ssl模塊)*/
Include /etc/apache2/extra/httpd-ssl.conf /*加載ssl配置文件*/
Include /etc/apache2/extra/httpd-vhosts.conf /*加載定向文件*/

2.2. 打開/etc/apache2/extra/httpd-ssl.conf配置文件,修改證書路徑:

SSLCertificateFile "/etc/apache2/ssl/server.crt" /*加載證書*/
SSLCertificateKeyFile "/etc/apache2/ssl/server.key" /*加載密鑰*/

2.3. 打開/etc/apache2/extra/httpd-vhosts.conf配置文件,增加“443”端口配置(填寫自己的域名),document部署的路徑是apache默認(rèn)路徑(如果自己沒有修改過):

<VirtualHost *:443>
    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/apache2/server.crt
    SSLCertificateKeyFile /etc/apache2/server.key
    ServerName mathew.lu.com 
    DocumentRoot "/Library/WebServer/Documents"
</VirtualHost>

2.4. 檢查配置文件是否正確 sudo apachectl configtest
2.5. 重啟Apache服務(wù)器 sudo apachectl restart
2.6. 瀏覽器輸入 https://mathew.lu.com 正常打開并且能看到證書。

查看證書.jpeg

定義apple-app-site-association文件

App啟動時系統(tǒng)會自動請求配置的Domain根目錄或者.well-known目錄下面的apple-app-site-association文件,下面是文件范例:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

注意事項:

  1. apple-app-site-association文件沒有任何擴(kuò)展名。
  2. apple-app-site-association文件解壓后的大小不能超過128k。
  3. paths的配置支持 "*" 和 "?"的通配符,支持 "NOT" 關(guān)鍵字排除一些鏈接。
  4. 不支持重定向的方式獲取apple-app-site-association文件。
  5. apps必須要出現(xiàn)并且是空數(shù)組。
配置xcode工程

如下圖,配置Associated Domains

配置.jpeg

在AppDelegate中增加delegate回調(diào)方法application:continueUserActivity:restorationHandler:。上面都配置好之后,第一次安裝打開App的時候,可以用Charles攔截請求,可以看到兩個請求https://mathew.lu.com/.well-known/apple-app-site-associationhttps://mathew.lu.com/apple-app-site-association。此時可以打開短息,編輯一個短息包含https://mathew.lu.com,系統(tǒng)會自動請求https://mathew.lu.com/apple-touch-icon.png獲取App的iCON,點擊鏈接時系統(tǒng)會再次請求https://mathew.lu.com/.well-known/apple-app-site-associationhttps://mathew.lu.com/apple-app-site-association然后跳到App。

注意事項:

  1. App在一次安裝(新安裝或更新安裝),只會請求一次apple-app-site-association,這里個人猜想應(yīng)該是向系統(tǒng)注冊App支持 Universal Links (望指正)。因此感覺不靠譜,無法知道系統(tǒng)是如何保證這個請求的成功,因為測試后發(fā)現(xiàn)即使失敗了,下次啟動的時候也不會再請求了。
  2. 系統(tǒng)會探測用戶的潛在行為,如果用戶是在Safari內(nèi)的M站上進(jìn)行操作,那么是同樣的跳轉(zhuǎn)鏈接是不會跳到App。
  3. 系統(tǒng)會探測用戶對于某個鏈接最近是使用 Safari打開還是App打開,如果是選擇了Safari,那么后面就會一直使用Safari打開不再跳轉(zhuǎn)到App,直到用戶在M站上點擊了Smart App Banner跳到App。
  4. 當(dāng)用戶點擊的鏈接是在App內(nèi)嵌的webView內(nèi)的,會有App處理,不會跳到Safari。
  5. App內(nèi)部使用openURL:打開鏈接時,會跳到Safari,所以在AppDelegate的回調(diào)處理中會用這個方法做最后的兜底處理。
最后編輯于
?著作權(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ù)。

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

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