iOS 9 通用連接(Universal Links)

什麼是Universal Links?

在iOS9以前,對於從各類從瀏覽器、Safari中喚醒APP的需求,咱們一般只能使用scheme。可是這種方式須要提早判斷系統中是否安裝了可以響應此scheme的app,而且這種方式在微信中是被禁用了的。html

Universal Links是iOS9推出的一項功能,使你的應用能夠經過傳統的HTTP連接來啓動APP(若是iOS設備上已經安裝了你的app,無論在微信裏仍是在哪裏), 或者打開網頁(iOS設備上沒有安裝你的app)。前端

下面簡單說下怎麼使用Universal Links,具體的能夠看官方的說明文檔ios

怎麼使用Universal Links

1.先決條件:你必須有一個域名,且這個域名須要支持https。web

2.須要在開發者中心作配置:找到對應的App ID,在Application Services列表裏有Associated Domains一條,把它變爲Enabled就能夠了。json

配置App ID支持Associated Domains:跨域



3.打開工程配置中的Associated Domains,在其中的Domains中填入你想支持的域名,必須以applinks:爲前綴。
配置項目中的Associated Domains:
 
 
4.建立一個內容爲json格式的文件,蘋果將會在合適的時候,從咱們在項目中填入的域名請求這個文件。這個文件名必須爲apple-app-site-association,沒有後綴名,文件內容大概是這樣子:
{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

說明:xcode

appID:組成方式是 teamId.yourapp’s bundle identifier。如上面的 9JA89QQLNQ就是teamId。登錄開發者中心,在Account - Membership裏面能夠找到Team ID。
paths:設定你的app支持的路徑列表,只有這些指定的路徑的連接,才能被app所處理。星號的寫法表明了可識別域名下全部連接。

這篇博客裏有不少其餘公司的例子,能夠參考一下。也有可能有的公司的已經再也不適用,能夠換換其餘公司的。瀏覽器

5.上傳該文件到你的域名所對應的根目錄或者 .well-known目錄下,這是爲了蘋果能獲取到你上傳的文件。上傳完後,本身先訪問一下,看看是否可以獲取到,當你在瀏覽器中輸入這個文件連接後,應該是直接下載apple-app-site-association文件。
 

驗證

在iOS設備中的備忘錄中輸入App能識別的連接,而後直接點擊此連接,就會直接跳轉到你的app了。或是長按,在出現的彈出菜單中第二項是在’XXX’中打開,這也表明着成功:服務器

 
或是你將要測試的網址在safari中打開,在出現的網頁上方下滑,能夠看到有 在」XX」應用中打開
出現菜單:
 
 

在微信的網頁瀏覽器中也是能夠的,雖然微信屏蔽了全部的scheme方式跳轉到其它app,可是Universal Links是由系統直接處理的,微信屏蔽不了,這也就實現了從微信跳轉到咱們的app。微信

蘋果爲了方便開發者,提供了一個網頁來驗證咱們編寫的這個apple-app-site-association是否合法有效,進入驗證網址進行驗證:


進入app後的處理

如今用戶點擊某個連接,直接能夠進咱們的app了,可是咱們的目的是要可以獲取到用戶進來的連接,根據連接來展現給用戶相應的內容。
咱們須要在工程裏的 AppDelegate 裏實現方法

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb])
    {
        NSURL *url = userActivity.webpageURL;
        if (url是咱們但願處理的)
        {
            //進行咱們的處理
        }
        else
        {
            [[UIApplication sharedApplication] openURL:url];
        }
    }
    
    return YES;
}

注意

前端開發常常面臨跨域問題,必需要求跨域,若是不跨域,就不行。
只有當前webview的url域名,與跳轉目標url域名不一致時,Universal Link 才生效。

好了先說到這裏,若是遇到什麼問題能夠詳細看官方的說明文檔

 
 

問題彙總

  • 按照上面寫的配好了,怎麼死活打不開呀???

    1.支持https呀,必定要是符合蘋果認證的https證書呀。

    2.系統問題,確保iOS9以上

    3.配置文件問題,apple-app-site-association文件中配置的path和測試用的通用連接不一致,注意是區分大小寫的。

    4.域名問題,xcode中配置的域名一不當心寫錯了。

  • 爲毛有的手機成功了,有的手機就不行呢???

    1.上面也提到過,由於網絡波動有可能會致使部分用戶第一次安裝時,沒法下載apple-app-site-association文件,這個只能引導用戶刪除重裝或者在迭代時修改Associated Domains配置告訴系統從新下載apple-app-site-association文件。

    2.另一種多是蘋果抽風致使,筆者今年年初一碰到過一個蛋疼的問題,從中午一直到下午4點發現重複的刪除重裝,app也不會請求服務器的apple-app-site-association文件,過了4點以後就行了。當時由於時間特殊並無深究究竟是什麼緣由致使。

  • 服務器換域名了腫麼辦???

    筆者作了一個小測試,當Associated Domains添加新的 Domains的以後,在app再次啓動的時候抓包發現(不須要刪除重裝),蘋果會給新添加的這個Domains發送一個請求,請求新Domain下的apple-app-site-association文件。

    也就是說Associated Domains發生改變的話,系統是會知道的,這樣就能夠在迭代的時候刪除舊的域名,添加新的域名了。
    另外Domains的配置也可使用通配符,例如:applinks:*.mywebsite.com

  • 全都配置好了,項目也能喚起來了,web頁面到底該怎麼弄呀???通用連接指向的服務器的頁面到底應該是哪一個?

    咱們以前iOS和安卓用的是同一個網頁,也就是說從app內分享出去的網頁,能夠被蘋果用戶和安卓用戶同時查看,在這裏咱們是由web童鞋使用js判斷當前所處的平臺以及其系統。

    若是是安卓用戶,則顯示安卓相關提示頁面。

    若是是蘋果用戶,那麼分兩種:

   一、若是是9以上的系統,相關的「在app內打開」按鈕的連接配置的就是咱們的通用連接Universal Links了,且該通用連接地址指向的是一個 app下載引導頁面,那麼當用戶安裝了app,便可經過通用連接喚醒app;若是用戶沒有安裝app,那麼就會跳轉到通用連接指向的app下載引導頁面,達到最大化的客戶導流。

    二、若是是9如下的系統,則由web童鞋在當前頁面添加一個 「右上角在safari打開」,相應的 「在app內打開」的按鈕就會發一個 跳轉到咱們app schema的重定向,以實如今safari中喚醒咱們的app。

  • 當使用通用連接喚醒app以後,手機右上角有一個小按鈕?

    那個小按鈕是能夠引導用戶跳轉到safari中,名字叫bread crumbs button(麪包屑),固然也去不掉。

  • 備忘錄和safari中均可以打開app,怎麼分享到其餘app裏面就不行了?

    未跨域致使的,如:分享到微信的連接是 https://www.mydomain.com/share.html,而後該網頁中的「在app內打開」按鈕配置的通用連接爲 https://www.mydomain.com/index.html
    跨域的意思是說,通用連接 和 調用通用連接的網頁不要使用同一域名。
    即若是通用連接域名爲「www.mydomain.com」,則通用連接所處的網頁域名就不能是「www.mydomain.com」。

 
參考連接:
    1.大招之  官方文檔
    2. 不錯的博文
    3.蘋果驗證通用連接是否可用的 網站
    4.通用連接文件存放的server須要支持https  蘋果支持的https證書列表
 
轉自(https://www.jianshu.com/p/734c3eff8fe)
相關文章
相關標籤/搜索