背景:
应产品需求,外部链接打开微脉,并跳转到相应目标页面。前期我们使用了第三方-魔窗来完成这个功能。但是通过一年的使用发现-魔窗很不稳定,经常出现打不开连接的现象。基于这种原因,我开始研究新的方案,不能让微脉存在那么大的隐患。
构思:
为了不把这种风险交到第三方手中,所以开始思考完全由我们自己实现。
实现方案:
由服务端通过短信方式把连接发送到患者手机上--患者点击链接,打开H5(我们原生自己写)-点击去APP(去下载)--打开App(打开appStore)- 进入app --进行数据连接解析--进行逻辑跳转。
步骤:
一:配置接收端
1、选中工程文件,TARGETS -> Info,找到最下面的URL Types项添加一个Item;
2、将URL Schemes设置为WMAppLink(大小写都可以,推荐小写)。
二:在主端(H5)添加打开接收端方法
1、添加一个按钮,并实现点击事件;
2、拼接参数到字符串wmapplink://后面;
3、配置链接,实现苹果打开第三方协议。(备注这里和H5端约定连接模式:第一部分是:wmapplink://
第二部分是:keyName=CommentRouter
第三部分是:?flag=toDoctor&id=123456&name=茭白
参数分别用 p1 p2 p3 p4 p5等拓展名
总共的拼接是:wmapplink://keyName=CommentRouter?flag=toDoctor&p1=123456&p2=茭白)
三:在接收端实现接收参数方法
1、打开AppDelegate.m文件;
2、添加系统自带代理方法,接收Url参数。
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
3:为了各业务分离以及减少AppDelegate的业务量,故创建一个AppDelegate+Link类别。具体实现方案写在方法
-(void)applicationBusinessProcessWithURL:(NSURL *)url{
/**
* 利用 url.host 可以得到 keyName=CommentRouter
* 利用url 和公共方法可以 获取参数
*/
NSMutableDictionary *dic =[self turnDictionaryparametersWithURL:url];
[self jumpTagetWithFlag:url.host withParamer:dic];
}
利用以下方法把URL中的参数解析为字典
-(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;
}
最后在以下方法处理业务逻辑
-(void)jumpTagetWithFlag:(NSString *)keyName withParamer:(NSMutableDictionary *)paramer{
if ([keyName isEqualToString:@"keyName=CommentRouter"]) {
//判断来的方向的
NSString * flag = [paramer objectForKey:@"flag"];
if ([flag isEqualToString:@"toDoctor"]) {
//去医生详情页面
}
}
}