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

1、前言

項目中時常有這種需求, 是經過連接跳轉到應用內部,如今iOS主流的方案有兩個javascript

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

備註:
  * 關於URL Schemes更多瞭解,可參考傳送門
      * 關於Universal Links更多瞭解,可參考傳送門html

二,需求場景

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

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

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

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

(5)若是用戶沒有安裝應用,直接跳轉到appStorejson

三,需求實現方案 

iOS9 以後提供的 Universal Links 功能服務器

四,需求實現步驟

(1)建立一個json文件,名稱必須爲 apple-app-site-association,⚠️該文件不可帶 .json 的後綴名微信

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

        *  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設置了路徑限制,只要咱們重定向的路徑符合限制,就能先走本地是否安裝程序,若是沒有再跳轉到相應下載頁。

相關文章
相關標籤/搜索