一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶(hù)?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

ios上關(guān)于Universal Link 前端部署的應(yīng)用

大小:0.2 MB 人氣: 2017-09-25 需要積分:1

前言:

文章會(huì)適當(dāng)說(shuō)一些如何開(kāi)發(fā)iOS上的universal link,但類(lèi)似的文章太多了一艘一大堆,每篇都介紹的挺清楚,因此也不是重點(diǎn)

本文更加會(huì)側(cè)重從前端的角度,將整個(gè)universal link 部署應(yīng)用到wap app中的一些策略和一些問(wèn)題解決辦法

其實(shí)整個(gè)Universal Link沒(méi)啥難的,真正上線過(guò)Universal link的人這些應(yīng)該都趟過(guò)一遍了,本文主要是我們team去應(yīng)用Universal link的時(shí)候一些文檔沉淀和記錄

Schema VS Universal Link

Deeplink相關(guān)的技術(shù),在wap中喚起app其實(shí)應(yīng)用最最廣泛的并不是Universal Link,而是直接Schema跳轉(zhuǎn)

1  location.href?=? ‘ schema://xxxx’

并且一般各大APP都會(huì)給自己做一套路由體系,這樣其實(shí)可以直接在schema頭后面對(duì)接路由體系,做到一行schema定位打開(kāi)任意App內(nèi)功能界面(我就不詳細(xì)扯路由的事了)

1

2

3

4

5

6  -?(BOOL)application:(UIApplication?*)application?openURL:(NSURL?*)url?sourceApplication:(NSString?*)sourceApplication?annotation:(id)annotation?{

???? if ?([[url?absoluteString]?hasPrefix:@ “ schema://” ])?{

????????[[WKDispatcher?sharedInstance]?operationObjectFromRouteURL:[url?absoluteString]]; //路由

???????? return ?YES;

????}

}

如果單純?yōu)榱藢?shí)現(xiàn)deeplink -- 在WAP上打開(kāi)App,并且傳遞來(lái)數(shù)據(jù)信息,定位App內(nèi)的具體邏輯,那么Schema就夠了,其實(shí)沒(méi)必要上Universal Link,Schema相當(dāng)于是很特殊的Url,他是schema://xxx這種樣子,如果安裝了APP才能支撐跳轉(zhuǎn)這種Schema Url,如果沒(méi)安裝APP就沒(méi)任何效果,而Universal Link則是把普通url,長(zhǎng)http://xxx.xxx.xxx/xxx這樣的Normal Url,如果安裝了App,就能像Schema一樣傳遞給App,延續(xù)App內(nèi)邏輯,如果沒(méi)裝App,則還會(huì)繼續(xù)在瀏覽器里跳轉(zhuǎn)這個(gè)Normal Url

Schema的弊端

Schema無(wú)法判斷是否安裝App

一定會(huì)有這樣的產(chǎn)品需求的:

如果已經(jīng)安裝App,則打開(kāi)App

如果沒(méi)有安裝App,則前往下載App

瀏覽器實(shí)際上是沒(méi)有能力判斷手機(jī)里是否安裝了某個(gè)App的,所以聰明的程序員們選擇了討巧的方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19  try ?{

???? var ?appSchema?=? ‘ schema://xxxx’ ;

???? if ?($.os.ios)?{

????????location.href?=?openNALocation;? //location.href?打開(kāi)schema

????}

???? else ?{

????????$( ‘body’ ).append( ‘’ );? //iFrame?打開(kāi)?schema

????}?

} catch ?(e)?{}

//延遲1000秒

setTimeout( function ?()?{

???? if ?($.os.ios)?{

????????location.href?=?`https: //itunes.apple.com/us/app/idxxxxxxx?mt=8`;

????}

???? else ?{

????????location.href?=?`https: //xxx.xxx.xxx/xxx/xxx.apk`;//直接apk下載link

????}?

},1000)

首先發(fā)起跳轉(zhuǎn)Schema

如果沒(méi)安裝App,會(huì)打開(kāi)App失敗,沒(méi)效果

如果安裝App,會(huì)成功打開(kāi)App

延遲1000ms

如果沒(méi)安裝App,Schema打開(kāi)失敗,等1000秒后會(huì)自動(dòng)跳轉(zhuǎn)

如果安裝App,App會(huì)打開(kāi),當(dāng)前網(wǎng)頁(yè)會(huì)被暫停,這延遲代碼不會(huì)執(zhí)行

聰明的人會(huì)發(fā)現(xiàn),這樣有個(gè)風(fēng)險(xiǎn),如果用戶(hù)打開(kāi)APP成功后,又手動(dòng)切回瀏覽器,那么延遲1000ms的代碼依然會(huì)執(zhí)行,安卓會(huì)跳出下載apk包得提示,iOS會(huì)又再度跳到Appstore,但這個(gè)瑕疵也不是太大的問(wèn)題,所以這種做法被普遍采用,運(yùn)用在各種安裝就跳轉(zhuǎn),不安裝就下載的用戶(hù)場(chǎng)景。

安卓這么用挺好,iOS有個(gè)討厭的彈框

如果用戶(hù)沒(méi)有安裝App,那么他一定會(huì)經(jīng)歷2個(gè)事情

schema打開(kāi)app,但是失敗

延遲后,跳轉(zhuǎn)下載App

在第一個(gè)環(huán)節(jié),安卓上schema打開(kāi)失敗,沒(méi)有任何反映,也沒(méi)有任何提示,一切順利,但是iOS就不同了。

schema會(huì)彈個(gè)可惡的跳轉(zhuǎn)失敗的框ios上關(guān)于Universal Link 前端部署的應(yīng)用

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶(hù)評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?