wap 喚起App 的兩種方式Schema & Universal Link

1、schema

現在線上大多數 App 使用的就是 schema 跳轉,都對應一套路由法則,基本都能做到跳轉到 App 內任一界面。

location.href?=?'schema://xxxx'

但 schema 有個弊端:
iOS中,如果用戶沒有安裝App,那麼他一定會經歷2個事情:
1、schema打開app,但是失敗,延遲後,跳轉下載App
2、跳轉下載App之前schema會彈個可惡的跳轉失敗的框,然後再延遲後彈跳轉AppStore的框

再就是 schema 被微信等應用禁止跳轉了。

2、Universal Link

Universal Link和 schema 一樣,目前還未被微信等禁止,也不會彈出跳轉失敗的彈出框。

Universal Link實現過程

1、一個支持 SSL 訪問的域名,且不能是自建證書的 https 域名

2、新建一個apple-app-site-association文件,上傳到域名根目錄下,或 .well-known 文件夾下,

apple-app-site-association文件內容是一個 json

{
    "applinks":
    {
        "apps":[],
        "details":[
                {
                    "appID":"ABCDEFG.com.aaa.bbb.ccc",
                    "paths":["NOT /aaaa/*","/iosuniversallink/*"]
                },
                {
                    "appID":"GFEDCBA.com.aaa.bbb.ccc",
                    "paths":["NOT /aaaa/*","/iosuniversallink/*"]
                }
                 ]
    }
}

appId 爲 teamId + boundleId
paths 爲域名下可識別或不可識別的 path 路徑, 如 https://www.xxx.com/iosuniversallink/*, 就可以喚起 app, 而 https://www.xxx.com/aaaa/xxxxx則直接跳轉到 web 頁了。

注意:該文件沒有後綴名
附:鏈家 json 文件:https://linkm.lianjia.com/apple-app-site-association
知乎 json 文件:https://oia.zhihu.com/apple-app-site-association

3、配置iOS App工程

開發者中心證書打開Associated Domains
工程配置Associated Domains
將你apple-app-site-association所在域名配置進去
給你的工程像Schema的OpenUrl一樣,編寫App被喚醒後的處理邏輯

4、Universal Link的基本運作流程

APP第一次啓動 or APP更新版本後第一次啓動
APP向工程裏配置的域名發起Get請求拉取apple-app-association Json File
APP將apple-app-association註冊給系統
由任意webview發起跳轉的url,如果命中了apple-app-association註冊過的通用鏈接
打開App,觸發Universal Link delegate
沒命中,webview繼續跳轉url
在你進行apple-app-association 以及 App工程的配置之後,整個Universal Link的運作流程完全由系統控制了

Universal Link 跨域

Universal Link有跨域問題,Universal Link必須要求跨域,如果不跨域,就不行,就失效,就不工作。(iOS 9.2之後的改動)

假如當前網頁的域名是 A
當前網頁發起跳轉的域名是 B
必須要求 B 和 A 是不同域名,纔會觸發Universal Link
如果B 和 A 是相同域名,只會繼續在當前WebView裏面進行跳轉,哪怕你的Universal Link一切正常,根本不會打開App

產品需求

如果已安裝App,跳轉對應界面
如果沒安裝App,跳轉App下載界面

已安裝App
打開App 觸發handleUniversalLink
走到/_iosuniversallink/分支,拼接出任意App內的界面路由
跳轉界面

未安裝App
WebView原地跳轉https://xxx.xxx.xxx/_iosuniversallink/*
命中服務器的重定向邏輯
重定向到AppStore跳轉頁面
打開AppStore下載

如果已安裝App,跳轉對應界面
如果沒安裝App,跳轉App下載界面
解決了舊Schema模式下的弊端問題:

Schema無法判斷是否安裝App,只能採用setTimeout的Trick方式
Schema的Trick方式會有一個醜陋的錯誤跳轉彈框
Schema無法在微信/手百等App內,打開我們自己的App
簡單的說,這樣設計的初衷就是,我不爲了通用鏈接這一目的來使用Universal Link,來統一WAP&APP的URL跳轉,我就爲了把Universal Link當做加強版Schema來使用



作者:大熊孩子
鏈接:https://www.jianshu.com/p/cbef3659bf01
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章