【移動應(yīng)用開發(fā)技術(shù)】LinkedME|Deep Linking技術(shù)你真的了解嗎_第1頁
【移動應(yīng)用開發(fā)技術(shù)】LinkedME|Deep Linking技術(shù)你真的了解嗎_第2頁
【移動應(yīng)用開發(fā)技術(shù)】LinkedME|Deep Linking技術(shù)你真的了解嗎_第3頁
【移動應(yīng)用開發(fā)技術(shù)】LinkedME|Deep Linking技術(shù)你真的了解嗎_第4頁
【移動應(yīng)用開發(fā)技術(shù)】LinkedME|Deep Linking技術(shù)你真的了解嗎_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】LinkedME|DeepLinking技術(shù)你真的了解嗎

本文作者徐斌,原騰信IOS工程師,現(xiàn)LinkedME高級工程師。SandBox是什么?

SandBox(沙盒)機(jī)制規(guī)定應(yīng)用程序只能夠讀取應(yīng)用程序內(nèi)部的數(shù)據(jù),不可以訪問其他應(yīng)用的信息數(shù)據(jù)。在iOS設(shè)備中每一個APP都有自己的儲存空間APP只能訪問自己的沙盒目錄下內(nèi)容,不能訪問其它存儲空間的內(nèi)容應(yīng)用程序的數(shù)據(jù)請求需要經(jīng)過權(quán)限檢測,檢測不通過則不執(zhí)行為什么要使用沙盒機(jī)制?

SandBox是安全體系中的一種機(jī)制,從而蘋果公司在設(shè)計(jì)iOS系統(tǒng)時(shí),考慮應(yīng)用之間的信息安全,對應(yīng)用程序的訪問權(quán)限設(shè)置限制。沙盒機(jī)制有什么弊端?

使用沙盒機(jī)制后APP之間不能相互訪問通信,使得APP成為一個個的信息孤島。怎么解決這個問題?

為了解決APP信息孤島問題,蘋果在iOS4中推出了URIScheme技術(shù),可以通過特定的URL方式傳遞參數(shù)給另一個APP。例如Uber://pid=3894&source=25,linkedmedemo://id=2351。怎么配置URIScheme?

在iOS工程中,打開Info.plist文件,添加URLTypes節(jié)點(diǎn)即可。在這個節(jié)點(diǎn)里,可以自定義協(xié)議名稱,如linkedmedemo,這個形式的URI就會關(guān)聯(lián)到唯品會客戶端。眾多開發(fā)者對URIScheme已經(jīng)不再陌生,通常在集成社會化分享組件或深度鏈接技術(shù)服務(wù)(知名品牌有友盟和LinkedME)時(shí),必須填寫URIScheme。代碼實(shí)現(xiàn)

在Info.plist里面設(shè)置完URLtypes之后,就可以在程序中處理這類URL的打開請求。在外部程序中,如果打開了指定自定義協(xié)議的URL,程序中APPlicationdelegate的APPlication:handleOpenURL:方法就會被調(diào)用,在這個方法里,可以獲取到觸發(fā)這個方法的URL,可以通過對這個URL進(jìn)行判斷,例如根據(jù)不同的Host,不同的QueryString來執(zhí)行不同的動作。-(void)APPlication:(UIAPPlication*)APPlicationhandleOpenURL:(NSURL*)url{

//在host等于,說明這是唯品會的寶貝詳情url,

//那么就使用本地的TBItemDetailViewController來顯示

if([[urlhost]isEqualToString:@""]){

//這里只是簡單地假設(shè)url形式為vip:///item.htm?id=xxxxx

//先獲取要查看的寶貝詳情的itemId

NSString*itemId=[[urlquery]substringFromIndex:[[urlquery]rangeOfString:@"id="].location+3];

//使用本地ViewController來顯示詳情

VipItemDetailViewController*controller=[[VipItemDetailViewControlleralloc]initWithItemId:itemId];

[self.navigationControllerpushViewController:controlleranimated:YES];

}}

URL構(gòu)建

-(void)showItemInVipForiOS:(NSString*)itemId{

//構(gòu)建客戶端協(xié)議的URL

NSURL*url=[NSURLURLWithString:[NSStringstringWithFormat:@"vip:///item.htm?id=%@",itemId]];

//判斷當(dāng)前系統(tǒng)是安裝客戶端

if([[UIAPPlicationsharedAPPlication]canOpenURL:url]){

//如果已經(jīng)安裝客戶端,就使用客戶端打開鏈接

[[UIAPPlicationsharedAPPlication]openURL:url];

}else{

//否則使用MobileSafari或者內(nèi)嵌WebView來顯示

url=[NSURLURLWithString:[NSStringstringWithFormat:@"/item.htm?id=%@",itemId]];

[[UIAPPlicationsharedAPPlication]openURL:url];

}}

注意:當(dāng)前唯品會客戶端并不支持這樣的調(diào)用方式,這里僅是一個示例。URIScheme存在的問題?

URIScheme能夠?qū)崿F(xiàn)APP與APP之間的關(guān)聯(lián),并且是無縫的。例如QQ音樂跳轉(zhuǎn)全民K歌,禮物說跳轉(zhuǎn)淘寶等等。由于H5相對于APP輕量,H5和APP要兼并開發(fā)。然而,從微信和微博的內(nèi)置瀏覽器查看H5頁面時(shí),大部分APP不能夠回到APP查看相同的內(nèi)容。例如知乎、今日頭條是可以的。它們需要從Safari打開zhihu://id=2370247&source=zhig才行。通過Safari跳轉(zhuǎn),如果用戶已安裝APP直接跳轉(zhuǎn)到APP中,如果用戶沒有安裝APP則跳轉(zhuǎn)到APPStore中下載,下載完成后打開APP不能到達(dá)用戶需要的頁面。怎么解決這些問題呢?

蘋果在iOS9中推出UniversalLinks(通用連接)一種能夠方便的通過傳統(tǒng)HTTPS鏈接來啟動APP,使用相同的網(wǎng)址打開網(wǎng)站和APP。通過唯一的網(wǎng)址,不需要特別的URIScheme就可以鏈接一個特定APP里面的視圖。比如:一個APP分享內(nèi)容到微信,然后用戶在微信內(nèi)置瀏覽器中看到H5頁面內(nèi)容,然后用戶觸發(fā)UniversalLinks后,直接打開APP內(nèi)相同的頁面內(nèi)容。NOTEUniversallinksletiOS9usersopenyourAPPwhentheytaplinkstoyourwebsitewithinWKWebViewandUIWebViewviewsandSafaripages,inadditiontolinksthatresultinacalltoopenURL:,suchasthosethatoccurinMail,Messages,andotherAPPs.ForuserswhoarerunningversionsofiOSearlierthan9.0,tAPPingauniversallinktoyourwebsiteopensthelinkinSafari.

怎么使用UniversalLinks?

Step1:創(chuàng)建一個JSON格式的APPle-APP-site-association文件如下:{

"APPlinks":{

"APPs":[],

"details":[

{

"APPID":"9JA89QQLNQ.com.APPle.wwdc",

"paths":["/wwdc/news/","/videos/wwdc/2015/*"]

},

{

"APPID":"TeamID.BundleID2",

"paths":["*"]

}

]

}

}

根據(jù)paths鍵設(shè)定允許的路徑列表,或只是一個星號如果你想打開APP而不管路徑是什么。注意:paths路徑是大小寫敏感的NOTE:Thewebsitepathsyouspecifyinthepathsarrayarecasesensitive.”

“APPID”組成部分:TeamID+BundleIdTeamID可以從蘋果開發(fā)賬號頁面“YourAccount”下查看,BundleId就直接在工程里看了。Step2:上傳APPle-APP-site-association文件注意:1、上傳到webserver根目錄下;2、webserver需要支持https,客戶端需要通告https訪問,并且不支持任何重定向;uploadittotherootofyourHTTPSwebserver.ThefileneedstobeaccessibleviaHTTPS—withoutanyredirects—at

https:///APPle-APP-site-association.Next,youneedtohandleuniversallinksinyourAPP.

Step3:在APP里處理通用鏈接1、添加域名到Capabilities在Xcode的capabilities里添加你的APP域名,必須用APPlinks:前置它APP從上面的域名請求Step2中創(chuàng)建的JSON文件APPle-APP-site-association。當(dāng)你第一次啟動APP,它會從

/APPle-APP-site-association

下載這個文件。2.在APPDelegate里支持通用鏈接實(shí)現(xiàn):-(BOOL)APPlication:(UIAPPlication*)APPlicationcontinueUserActivity:(NSUserActivity*)userActivityrestorationHandler:(void(^)(NSArray*restorableObjects))restorationHandler方法。當(dāng)userActivity是NSUserActivityTypeBrowsingWeb類型,則意味著它已經(jīng)由通用鏈接API代理。這樣的話,它保證用戶打開的URL將有一個非空的webpageURL屬性。移動應(yīng)用實(shí)現(xiàn)深度鏈接需要考慮非常多復(fù)雜的情況,比如支持各種手機(jī)機(jī)型、移動操作系統(tǒng)、瀏覽器、系統(tǒng)版本等等,還要考慮到深度鏈接統(tǒng)計(jì)分析的諸多問題。這些問題都是建立在用戶已經(jīng)安裝APP,如果沒有安裝APP,用戶下載安裝,打開APP是否能夠看到對應(yīng)的頁面,將是非常困難的問題。我們正致力于為移動開發(fā)者提供穩(wěn)定、安全、免費(fèi)的技術(shù)服務(wù),幫助APP提高用戶增長,當(dāng)擁有APP擁有流量之后,幫助APP實(shí)現(xiàn)流量變現(xiàn)。參考連接

1./cocoa/launching-you

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論