原文轉(zhuǎn)載自:http://www.nero.today/index.php/2016/01/26/appswitchonwechatonios9/
微信的普及程度相信不需要多言了喊括,稍微回憶一下自己上一條短信是什么時(shí)候鹿榜,上一條微信又是什么時(shí)候就知道了筛峭。
因此通過(guò)微信傳播也是絕大部分App的一個(gè)重要手段聪富,但是在iOS7微信出的新版本弯蚜,就開(kāi)始不允許從微信直接跳轉(zhuǎn)到對(duì)應(yīng)的App中了肿轨。
所謂上有政策淮悼,下有對(duì)策挑胸,各大App紛紛想出自己的解決方案猴凹,目前最最流行的就是在點(diǎn)擊跳轉(zhuǎn)到自己的App的時(shí)候出現(xiàn)一個(gè)蒙板夷狰,然后一個(gè)箭頭指向右上角的更多按鈕,然后用戶從Safari打開(kāi)當(dāng)前網(wǎng)頁(yè)郊霎,然后點(diǎn)擊跳轉(zhuǎn)沼头。
這個(gè)版本算是一種無(wú)奈的妥協(xié)吧,畢竟用戶用起來(lái)還是有點(diǎn)蛋疼的书劝。
最近博主的一個(gè)Boss發(fā)現(xiàn)網(wǎng)易新聞竟然能直接從微信里打開(kāi)自己的App进倍,于是乎~這個(gè)“艱巨”的任務(wù)就落到了我的頭上。中間研究的過(guò)程就不再贅述购对,隆重請(qǐng)出使用到的技術(shù):iOS9 Universal Links猾昆!
這里不禁要夸一夸網(wǎng)易的iOS開(kāi)發(fā)同學(xué)們,看文檔看得夠仔細(xì)奥獍垂蜗!
附上Apple的官方文檔,What’s new in iOS
不知大家能否在Search那一欄中找到Universal links:
Universal links let you replace custom URL schemes with standard HTTP or HTTPS links. Universal links work for all users: If users have your app installed, the link takes them directly into your app; if they don’t have your app installed, the link opens your website in Safari. To learn more about universal links, seeSupport Universal Links.
P.S.該技術(shù)目前只能應(yīng)用在iOS9中解幽。
OK贴见,我們開(kāi)搞。
1- 首先躲株,參照上面提到的文檔片部,創(chuàng)建一個(gè)叫apple-app-site-association的json文件(請(qǐng)不要加上.json或者其他任何后綴名),文件的大致內(nèi)容如下:
```{"applinks": {"apps": [],"details": [? ? ? ? ? ? {"appID":"9JA89QQLNQ.com.apple.wwdc","paths": ["/wwdc/news/","/videos/wwdc/2015/*"]? ? ? ? ? ? }? ? ? ? ]? ? }}
下面來(lái)解釋一下這個(gè)json文件里的字段:
apps: 目前只需要提供一個(gè)空數(shù)組就可以了霜定,但是這個(gè)字段必須提供档悠,不可不填廊鸥。
appID:appID的格式大致是這樣的:TeamID.App Bundle
ID,以文檔中提供的例子來(lái)說(shuō),Apple出的WWDC的應(yīng)用的開(kāi)發(fā)者Team的Team
ID為:9JA89QQLNQ辖所,這個(gè)應(yīng)用的BundleID為:com.apple.wwdc惰说。
paths:希望Safari在訪問(wèn)哪個(gè)路徑時(shí),跳轉(zhuǎn)到對(duì)應(yīng)的App奴烙,可以使用*作為通配符助被。
2- 將準(zhǔn)備好的apple-app-site-association上傳到web網(wǎng)站的根目錄下剖张。
3- 配置App的Entitlements file:選中App的Target切诀,在Capabilities中打開(kāi)Associated
Domains
切記關(guān)聯(lián)的域名需要使用applinks:作為開(kāi)頭。
4- 在AppDelegate中實(shí)現(xiàn)對(duì)應(yīng)的delegate搔弄,大致代碼如下:
-(BOOL)application:(UIApplication*)application continueUserActivity:(NSUserActivity*)userActivity restorationHandler:(void (^)(NSArray*_Nullable))restorationHandler{? ? if(userActivity.webpageURL!= nil){? ? }}
userActivity中的webpageURL就是對(duì)應(yīng)的從Web端跳轉(zhuǎn)而來(lái)的網(wǎng)址幅虑,其中可以帶上各種參數(shù)來(lái)供App進(jìn)行不通的判斷和操作。
5- Web頁(yè)面上的JS代碼大致如下:
varopen_app = document.getElementById('open_app');btn_open.addEventListener('click',function(){open_app.src ='https://www.domain.com/site/download?force=1';? ? setTimeout(function(){location.;? ? },1000);},false);
和Web端的同學(xué)一開(kāi)始怎么也搞不定點(diǎn)擊按鈕跳轉(zhuǎn)顾犹,找了好久終于發(fā)現(xiàn)為了提高手機(jī)端Web頁(yè)面的點(diǎn)擊響應(yīng)速度倒庵,我們的Web端默認(rèn)是使用touch事件來(lái)代替click的,但是在Universal Links的跳轉(zhuǎn)中必須使用click炫刷。
另外擎宝,頁(yè)面初始頁(yè)和要跳轉(zhuǎn)的頁(yè)的域名必須是不同的,否則這個(gè)跳轉(zhuǎn)事件也不會(huì)調(diào)起對(duì)應(yīng)的App浑玛!另外绍申,在進(jìn)行Universal Links的調(diào)試時(shí),建議先刪除App顾彰,然后重新編譯极阅,運(yùn)行。
稍稍總結(jié)一下涨享,Universal Links的工作原理大體上就是筋搏,App第一次啟動(dòng)后,發(fā)現(xiàn)自己是支持Associated Domains的厕隧,就去Associated Domains中描述的域名的根目錄去下載一個(gè)名叫apple-app-site-association的文件奔脐,之后系統(tǒng)運(yùn)行的Safari,其他應(yīng)用的SFSafariViewController, WKWebView, 或者UIWebView都會(huì)受到這個(gè)apple-app-site-association文件的影響吁讨,在用戶點(diǎn)擊那個(gè)跳轉(zhuǎn)的鏈接時(shí)髓迎,系統(tǒng)就會(huì)啟動(dòng)對(duì)應(yīng)的App。
不得不說(shuō)挡爵,以后每個(gè)版本的What’s New還是必須得看得更加仔細(xì)一些竖般,同時(shí)需要大大提高對(duì)于新技術(shù)的敏感度。