iOS deepLink 喚醒app

需求

  • 用手機打開我們的網頁,點擊打開按鈕或者收藏按鈕,可以直接喚醒app,如果未安裝app,則跳轉到應用商店提示下載。

目前通用的方式有三種:

  • Universal Links;
  • url schemes;
  • meta標簽;

下面就來介紹一下這三種方式

meta標簽

這種方式在國外的網頁和app上好像比較常見,可以在網頁上的meta標簽做手腳,類似下圖的效果:


meta.jpg

meta標簽的格式如下:

<meta charset="UTF-8" name="apple-itunes-app" content="app-id=1234567890, affiliate-data=myAffiliateData, app-argument=yourScheme://">

這樣添加meta標簽后,使用Safari打開網頁就會在網頁上方,顯示自己app的信息導航條。
如果沒有安裝app可以點擊跳轉App Store去下載,如果安裝了app就會自動打開app。

url Schemes

步驟如下:在項目里,info最下端,找到URL Types,add一個新的url scheme,這里幾個參數最好都填一下,Url Schemes是必填的,如下圖所示:


url schemes.png

這里配置完之后,info.plist文件自動會加入一個配置:


info.png

接著在AppDelegate里的handleOpenURL捕獲跳轉過來的url,獲取參數:

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    if (!url) {
        return  NO;
    }
    
    NSString *urlStr = url.absoluteString;
    NSLog(@"handleOpenURL:%@",urlStr);
    
    return YES;
}

接著可以在模擬器的Safari瀏覽器地址欄輸入:TestOC://
格式為URL Schemes : //三部分組成。
點擊open,就會跳轉到app,并且走到handleOpenURL這個代理方法中。

Universal Links

什么是Universal Links

Universal Links是iOS9之后支持的一個通用鏈接,iOS9以上的用戶可以通過點擊這個鏈接無縫的重定向到一個app應用,而不需要通過Safari打開。
如果用戶沒有安裝這個app,則會再Safari中打開這個鏈接。

詳細的配置流程如下:

一、創建一個名為apple-app-site-association,包含固定格式的json文件。
關于apple-app-site-association文件的格式如下:

{
"applinks": {
        "apps": [],
        "details": [
            {
                "appID": "teamID.bundleId",
                "paths": ["/deaplink","/wwdc/news/","*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

這里需要注意的是,文件名必須為apple-app-site-association不能有后綴,需要注意。

appID的格式為teamID .bundle id,paths就是配置哪些路徑可以喚醒,哪些路徑不能喚醒,可以使用* ? 幫助配置。這里paths配置的路徑是區分大小寫的。

二、驗證apple-app-site-association文件

文件配置完成之后,需要將文件放到服務器的根目錄下,或者是.well-known這個子目錄下。

  • 確保使用https://yourDomain.com/apple-app-site-association這個鏈接可以訪問到,yourDomain就是你的服務器域名。
  • 也可以使用蘋果的驗證網站(https://search.developer.apple.com/appsearch-validation-tool/),驗證文件是否能被蘋果請求到。如果是未上線的問題,使用驗證網站可能會提示你Error no apps with domain entitlements出現該提示則說明配置正確,出現404則說明配置錯誤。

三、項目和工程配置

使用Universal Links需要給app IDs配置打開 Association Domain選項,進入開發者網站,找到自己的bundle id,edit,打開Association Domain。

然后就是工程配置。

在工程的Capabilities中開啟Association Domain 并且可以添加多個domains,格式為applinks: 服務器域名

接著在AppDelegate中實現代理方法,注意跟url schemes的代理方法不是同一個

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{

    NSLog(@"userActivity : %@",userActivity.webpageURL.description);
    return YES;
}

當app通過Universal Link 喚醒是 就會回調到這個方法,獲取信息。

四、驗證以上配置

在備忘錄中,輸入https://yourDomain.com/apple-app-site-association并點擊,如果出現在***中打開則說明配置成功。

Universal Links總結
  • 服務器必須支持https,且必須是蘋果新人的TSL證書,蘋果支持的根證書列表
  • apple-app-site-association文件名千萬不能寫錯,沒有后綴;
  • 只有在初次安裝時,才會去請求下載apple-app-site-association文件,所以可能會出現因為網絡波動導致下載失敗的情況,當工程中修改了Association Domain配置時,也會重新去請求下載apple-app-site-association文件。
  • 還有一個問題,配置完成之后,備忘錄和Safari都可以成功,但是在其他應用里面不成功,未跨域導致的,如:分享到微信的鏈接是(https://www.mydomain.com/share.html),然后該網頁中的“在app內打開”按鈕配置的通用鏈接為 (https://www.mydomain.com/index.html)。
    跨域的意思是說,通用鏈接 和 調用通用鏈接的網頁不要使用同一域名。
    即如果通用鏈接域名為“www.mydomain.com”,則通用鏈接所處的網頁域名就不能是“www.mydomain.com”。

ps.之前用Universal Links可以在微信中直接喚起app,目前好像也已經被企鵝和微信給屏蔽了。只能說一句太流氓了。現在大多數app的做法又跟url scheme類似了,如果分享到微信,加一層蒙版,引導在Safari中打開。


覺得有用,請幫忙點亮紅心


Better Late Than Never!
努力是為了當機會來臨時不會錯失機會。
共勉!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容