iOS 微信打開第三方應用(Universal Links 和 URL Schemes)


一、前言

項目中時常有這種需求, 是通過鏈接跳轉到應用內部,現在iOS主流的方案有兩個

  • Schema: 常用在於一個應用跳轉到另一個應用內部,屬於應用間的跳轉。當然ios9以下,網頁可以通過schema://跳轉到App內部。但是這種方式跳轉比較生硬,在每次跳轉的時候都會彈框詢問。如果iPhone中如果沒有安裝則會直接彈出錯誤提示。
  • Universal Links(通用鏈接): 常用於https鏈接來打開APP(手機中已經安裝此APP),或者跳轉到https鏈接(手機中沒有安裝此APP)。Universal Links就是一個通用鏈接,iOS9以上的用戶,可以通過點擊這個鏈接無縫的重定向到一個app應用,而不需要通過safari打開跳轉。如果用戶沒有安裝這個app,則會在safari中打開這個鏈接指向的網頁。

備注:
  * 關於URL Schemes更多了解,可參考傳送門
      * 關於Universal Links更多了解,可參考傳送門

二,需求場景

(1)第三方應用集成了友盟分享到QQ和微信的功能

(2)第三方應用分享了一個web頁面到微信或QQ

(3)打開分享的web頁面,點擊上面的某一個按鈕

(4)如果用戶安裝了該應用,直接打開應用根據web地址中的參數跳轉到對應的頁面

(5)如果用戶沒有安裝應用,直接跳轉到appStore

三,需求實現方案 

iOS9 之后提供的 Universal Links 功能

四,需求實現步驟

(1)創建一個json文件,名稱必須為 apple-app-site-association,⚠️該文件不可帶 .json 的后綴名

         apple-app-site-association 文件必須放在https服務器的根目錄下,例:https://kahui.huankaun.com 這個路徑下 ⚠️一定是根目錄,也就是說該文件必須是一級目錄,供下載使用

        *  apple-app-site-association 文件格式:

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

  1)appID :
    appID 格式為 teamID.bundleId形式,譬如說我的teamIDxxxxxxxxxxxbundleIdcom.mytest.app
    那么我的appID就是:xxxxxxxxxxx.com.mytest.app。  
      teamID:打開蘋果官網,點擊Account,點擊左邊欄的 Membership,查找teamID 

  2) paths
    設定一個App的路徑支持列表,只有這些指定的路徑鏈接才會被App所處理。格式如下:

"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]
  • 使用*配置,則整個網站都可以使用

  • 使用特定的URL,例如/wwdc/news/來指定某一個特殊的鏈接。

  • 在特定URL后面添加*,例如 /videos/wwdc/2015/*, 來指定網站的某一部分。如果你的網站是www.yohunl.com,你的path寫的是”/support/*”,那么當用戶點擊www.yohunl.com/support/myDoucument,就可以進入你的app了,相反www.yohunl.com/other 就不會. 

  • 除了使用*來匹配任意字符,你也可以使用 ?來匹配單個字符,你可以在路徑當中結合這兩個字符使用,例如 /foo/*/bar/201?/mypage

需要注意的是:
配置的paths路徑,是區分大小寫的

       *  驗證apple-app-site-association文件

         文件配置完成之后,將其上傳到你的服務器根目錄或者.well-known這個子目錄下。

  • 確保使用https://yourdomain.com/apple-app-site-association這個鏈接可以訪問到,yourdomain.com為你的服務器域名。

  • 也可以使用蘋果的驗證網站,驗證文件是否能被蘋果請求到。如果是未上線的應用,使用驗證網站時可能出現如下提示:
  • 出現該提示為apple-app-site-association文件配置正確。
  • 出現404錯誤碼提示,則為apple-app-site-association文件未上傳成功,或者使用https://yourdomain.com/apple-app-site-association路徑無法訪問。

(2) 建立web網頁和app應用之間的關聯 -> app IDs配置 和 項目配置

app IDs 配置

    進入開發者網站,找到你自己的bundleId,可以點擊edit按鈕,開啟associate domains,如下圖:

   
項目配置

    在項目的Capablities中開啟Associated domains,如下圖:

 
 
    注意 domains可以添加多個,前綴必須為 applinks:applinks:后為你的服務器的域名。 
代碼接收Universal Links喚醒

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

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

    在appdelegate中實現上面這個方法,當使用Universal Links喚醒app時就執行這個方法。


(3)驗證以上配置

    快捷驗證,在備忘錄中輸入https://yourdomain.com/apple-app-site-association,長按這個鏈接,出現下圖提示則配置成功。

   當沒有安裝該應用時的處理方式是:上傳該html文件到 kahui.huankaun.com 路徑下,如下圖:

<!DOCTYPE html>
<html lang="en" >
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title>神機算萬年歷-跳轉中...</title>
</head>
<body>
<script type="text/javascript">
        setTimeout(function(){
            window.location = "第三方在應用寶的下載鏈接"
        },3000)//延遲3s,給手機調起已安裝應用,如果不能調起就調用下載鏈接。
</script>
 
</body>
</html>

 備注:如果我們在手機上沒有安裝相應的應用,就可以通過Universal Links重定向進行跳轉到下載也進行下載操作。因為我們在paths設置了路徑限制,只要我們重定向的路徑符合限制,就能先走本地是否安裝程序,如果沒有再跳轉到相應下載頁。


免責聲明!

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



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