iOS 9 通用鏈接(Universal Links)


什么是Universal Links?

在iOS9之前,對於從各種從瀏覽器、Safari中喚醒APP的需求,我們通常只能使用scheme。但是這種方式需要提前判斷系統中是否安裝了能夠響應此scheme的app,並且這種方式在微信中是被禁用了的。

Universal Links是iOS9推出的一項功能,使你的應用可以通過傳統的HTTP鏈接來啟動APP(如果iOS設備上已經安裝了你的app,不管在微信里還是在哪里), 或者打開網頁(iOS設備上沒有安裝你的app)。

下面簡單說下怎么使用Universal Links,具體的可以看官方的說明文檔

怎么使用Universal Links

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

2.需要在開發者中心做配置:找到對應的App ID,在Application Services列表里有Associated Domains一條,把它變為Enabled就可以了。

配置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": [ "*" ]
            }
        ]
    }
}

說明:

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判斷當前所處的平台以及其系統。

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

    如果是蘋果用戶,那么分兩種:

   1、如果是9以上的系統,相關的“在app內打開”按鈕的鏈接配置的就是我們的通用鏈接Universal Links了,且該通用鏈接地址指向的是一個 app下載引導頁面,那么當用戶安裝了app,即可通過通用鏈接喚醒app;如果用戶沒有安裝app,那么就會跳轉到通用鏈接指向的app下載引導頁面,達到最大化的客戶導流。

    2、如果是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)
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM