Universal Links
做App開發(fā)經(jīng)常需要將某個頁面分享到微信或者其他社交平臺刨沦,也經(jīng)常會有這么一個需求:如果安裝了app就從app打開缤底,并跳轉(zhuǎn)到相應(yīng)的產(chǎn)品頁敏释,如果沒有安裝app骂澄,就跳出h5頁面癣疟。一般從瀏覽器挣柬、Safari中喚醒APP都是使用scheme,但是微信比較霸氣睛挚,直接禁用了scheme邪蛔。因此只能使用別的方式。
Unibersal Links就是為此而生扎狱。它是IOS9推出的一項功能侧到,可以通過http鏈接來啟動喚醒自己的APP。因為是IOS9(及以后)的系統(tǒng)服務(wù)淤击,因此微信等社交平臺也沒有辦法阻止匠抗。
官方文檔地址:文檔
example
好不好用先看看別人的app。
1污抬、下載app
4印机、自己寫個網(wǎng)頁矢腻,加個a標(biāo)簽,href = http://www.opentable.com/restaurant/profile/33160?shareReferrer=ios-share 耳贬,然后在微信中打開你的網(wǎng)頁踏堡,點擊a標(biāo)簽就跳轉(zhuǎn)到別人的app中去。
配置Universal Links(客戶端)
- 首先咒劲,你的服務(wù)器必須支持https顷蟆,并且你必須有一個域名。
因為我使用的是騰訊旗下的域名解析腐魂,因此我從騰訊云申請ssl證書帐偎,免費ssl證書申請地址,申請速度很快10分鐘就審批下來蛔屹。
- 需要在開發(fā)者中心的AppID中開啟Universal Links削樊。
然后重新配置下載描述文件(這步應(yīng)該都會,這里只截圖開發(fā)的描述文件,發(fā)布版的也一樣要配置)
然后下載下來雙擊漫贞,使其在xCode生效甸箱。
- 在你的應(yīng)用中配置Associated Domains,并且用
applinks:
為前綴迅脐。
順便我們也來看看剛才下載的描述文件有沒有配置好芍殖。
-
創(chuàng)建一個名字為
apple-app-site-association
的文件,并放在服務(wù)器網(wǎng)絡(luò)的根目錄下谴蔑。注意豌骏,這個文件沒有后綴!而且名字也不能改隐锭。
比如:{
"applinks": {
"apps": [],
"details": [
{
"appID": "GQUVXPG592.com.nuomi.test",
"paths": ["/hello/","/","/"]
}
]
}
}
其中GQUVXPG592
是teamId窃躲,可以在你的開發(fā)者中心查看到,com.nuomi.test
是你AppID钦睡。paths
就是URL路徑支持通配符蒂窒。具體怎么寫,還是查看文檔吧赎婚。
- 上傳
apple-app-site-association
文件到根補錄刘绣。
怎么才是判斷位置是否對呢?訪問https://你的域名/apple-app-site-association,如果能看見json或者下載到文件apple-app-site-association挣输,那么就是放對了纬凤。
- 在appDelegate中編寫代碼
如果上面都配置對了,那么在點擊對應(yīng)的鏈接就會響應(yīng)application:continueUserActivity:restorationHandler:
方法撩嚼,然后在這個方法里面根據(jù)傳進來的參數(shù)和路徑跳轉(zhuǎn)到不同的界面停士。
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]){
NSURL *url = userActivity.webpageURL;
NSString * msg = url.absoluteString;
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"Universal Links測試" message:[NSString stringWithFormat:@"url:%@",msg] delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil];
[alert show];
}
return YES;
}
服務(wù)器配置https
還是老規(guī)矩,服務(wù)器端的內(nèi)容因為不是重點完丽,因此只會簡單得點一下恋技。畢竟在配置服務(wù)器方面我也是摸爬滾打配出來的,網(wǎng)上資料很多逻族,可以自行參考蜻底。
我的服務(wù)器采用apache,因此就用apache為例子聘鳞。
- 首先薄辅,準(zhǔn)備好證書。
我的證書是在騰訊云下載到的抠璃,如圖(ca文件站楚,公鑰證書,私鑰):
我稍微改了下名字(順序不變):
- 找到你的apache在服務(wù)器中的位置搏嗡,并找到
httpd.conf
文件窿春。
我的httpd.conf
在"apache/httpd-2.2.24/conf"下拉一。
找到Include conf/extra/httpd-ssl.conf
并把前面的#
去掉。如果沒有在最后一行自己加旧乞。
- 修改
httpd-ssl.conf
文件蔚润。
我的httpd-ssl.conf
文件在"apache/httpd-2.2.24/conf/extra"下,如果沒有有可能你的apache不支持ssl,具體的可以網(wǎng)上尋找解決方案良蛮。
找到<VirtualHost _default_:443>
或者差不多的標(biāo)簽抽碌,找到SSLCipherSuite xxxxx
修改為SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4
,找到SSLProtocol xxxxx
修改為SSLProtocol TLSv1 TLSv1.1 TLSv1.2
使其支持TLSv1.2。
然后把我們剛才的證書傳到服務(wù)器上决瞳,并在httpd-ssl.conf
修改證書文件路徑到對應(yīng)文件下,比如:
SSLCertificateFile "/www/wdlinux/httpd-2.2.24/conf/server.crt"
SSLCertificateKeyFile "/www/wdlinux/httpd-2.2.24/conf/server.key"
SSLCertificateChainFile "/www/wdlinux/httpd-2.2.24/conf/server-ca.crt"
最后ssh到你的服務(wù)器,然后service httpd restart
左权。
ps:
httpd-ssl.conf
中 DocumentRoot "xxxxxxxx"就是你網(wǎng)站的根目錄皮胡。
現(xiàn)在可以通過瀏覽器用https訪問了,如果訪問成功赏迟,那么恭喜你適配成功了屡贺,如果不成功。锌杀。甩栈。再找教程吧。
檢驗
Universal Links通用鏈接其實到目前為止就已經(jīng)全部實現(xiàn)了糕再,除了服務(wù)器配置不熟外量没,其他的還是很簡單的。下面只要測試下是否能在微信中打開突想。
比如我的apple-app-site-association
文件掛在cs.pzhss.cc域名下殴蹄,那么只要在rt.pzhss.cc(可以用http,不用https)的頁面中隨便加個a鏈接<a >測試</a>
然后在微信的瀏覽器中打開,點擊a鏈接就能跳轉(zhuǎn)到自己的app中來猾担。
或者在備忘錄中打鏈接袭灯,然后長按,彈出在”xxx中打開“就算配置成功了绑嘹。