背景:
應產品需求,外部鏈接打開微脈,并跳轉到相應目標頁面。前期我們使用了第三方-魔窗來完成這個功能。但是通過一年的使用發(fā)現(xiàn)-魔窗很不穩(wěn)定,經常出現(xiàn)打不開連接的現(xiàn)象?;谶@種原因,我開始研究新的方案,不能讓微脈存在那么大的隱患。
構思:
為了不把這種風險交到第三方手中,所以開始思考完全由我們自己實現(xiàn)。
實現(xiàn)方案:
由服務端通過短信方式把連接發(fā)送到患者手機上--患者點擊鏈接,打開H5(我們原生自己寫)-點擊去APP(去下載)--打開App(打開appStore)- 進入app --進行數(shù)據(jù)連接解析--進行邏輯跳轉。
步驟:
一:配置接收端
1、選中工程文件,TARGETS -> Info,找到最下面的URL Types項添加一個Item;
2、將URL Schemes設置為WMAppLink(大小寫都可以,推薦小寫)。

二:在主端(H5)添加打開接收端方法
1、添加一個按鈕,并實現(xiàn)點擊事件;
2、拼接參數(shù)到字符串wmapplink://后面;
3、配置鏈接,實現(xiàn)蘋果打開第三方協(xié)議。(備注這里和H5端約定連接模式:第一部分是:wmapplink://
第二部分是:keyName=CommentRouter
第三部分是:?flag=toDoctor&id=123456&name=茭白
參數(shù)分別用 p1 p2 p3? p4? p5等拓展名
總共的拼接是:wmapplink://keyName=CommentRouter?flag=toDoctor&p1=123456&p2=茭白)
三:在接收端實現(xiàn)接收參數(shù)方法
1、打開AppDelegate.m文件;
2、添加系統(tǒng)自帶代理方法,接收Url參數(shù)。
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
3:為了各業(yè)務分離以及減少AppDelegate的業(yè)務量,故創(chuàng)建一個AppDelegate+Link類別。具體實現(xiàn)方案寫在方法
-(void)applicationBusinessProcessWithURL:(NSURL *)url{
/**
* 利用 url.host 可以得到 keyName=CommentRouter
* 利用url 和公共方法可以 獲取參數(shù)
*/
NSMutableDictionary *dic =[self turnDictionaryparametersWithURL:url];
[self jumpTagetWithFlag:url.host withParamer:dic];
}
利用以下方法把URL中的參數(shù)解析為字典
-(NSMutableDictionary *)turnDictionaryparametersWithURL:(NSURL *)url{
NSString *urlstring = [NSString stringWithFormat:@"%@",url];
NSArray *array = [urlstring componentsSeparatedByString:@"?"];
NSString? *paramerStr = [array lastObject];
NSArray *paramerArr = [paramerStr componentsSeparatedByString:@"&"];
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
for (NSString * string in paramerArr) {
NSArray *paramersArr = [string componentsSeparatedByString:@"="];
[dic setObject:[paramersArr lastObject] forKey:[paramersArr firstObject]];
}
return dic;
}
最后在以下方法處理業(yè)務邏輯
-(void)jumpTagetWithFlag:(NSString *)keyName withParamer:(NSMutableDictionary *)paramer{
if ([keyName isEqualToString:@"keyName=CommentRouter"]) {
//判斷來的方向的
NSString * flag = [paramer objectForKey:@"flag"];
if ([flag isEqualToString:@"toDoctor"]) {
//去醫(yī)生詳情頁面
?}
}
}