iOS开发-网页/app打开另一个app
2016-08-23 19:20
435 查看
最近产品经理新加了个需求,要求在手机浏览器浏览网页,购物支付的时候调用我们自己的app,在App内支付,此时我们公司扮演的角色就是微信或支付宝.在跟web开发的同事商量后决定采用自定义协议的方式解决问题,废话不多说,开始搞起.
一 理清思路
对移动端来说,不管从网页打开Myapp,还是从app打开Myapp,需要对方知道我们的URL Scheme,因此需要配置Myapp的URL Scheme,配置好告诉web开发的同事.web开发的同事可以监听web界面上用户点击支付按钮,然后通过URL Scheme打开Myapp.同时可以跟web开发的同事商定好URL Scheme的格式,例如:myAPP://myapp/param?payment_id=支付ID&money=金额&tid=订单ID&title=付款&mobile=手机号码,方便传参数.
二 打开app后的处理
网页或者app调起Myapp的时候会调用AppDelegate的代理方法:
(BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
在这个方法里,可以拿到对应的url,对参数进行处理后跳到对应的界面进行处理.
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ if ([url.host isEqualToString:@"diandong"]){//自定义URL NSLog(@"url == %@",url); NSString *urlStr = url.absoluteString; if (urlStr == nil || [urlStr isEqualToString:@""]) { return YES; } NSRange range = [urlStr rangeOfString:@"mypay://diandong/param?"]; //1.参数处理 NSUInteger location = range.location; if (location != NSNotFound) { NSString *str = [urlStr substringFromIndex:location + range.length]; NSArray *array = [str componentsSeparatedByString:@"&"]; NSMutableDictionary * parmDic = [NSMutableDictionary dictionary]; for (NSString * string in array) { NSArray *array = [string componentsSeparatedByString:@"="]; [parmDic setObject:array[1] forKey:array[0]]; } // 2.发出通知 [WDDNotificationCenter postNotificationName:@"MypayZhifu" object:nil userInfo:parmDic]; return YES; }
对参数处理后跳转到对应界面时我想到了两个方案,方案一是使用通知,把参数传到对应的控制器,此方法在Myapp处于后台的时候完全有效,但是在Myapp在没有启动的时候就出现了问题,原因就在于[WDDNotificationCenter postNotificationName:@”MypayZhifu” object:nil userInfo:parmDic];发出通知的时候,对应的控制器还没有被创建,隐藏不能接收到通知.于是我采用了方案二:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ if ([url.host isEqualToString:@"diandong"]){//自定义URL NSLog(@"url == %@",url); NSString *urlStr = url.absoluteString; if (urlStr == nil || [urlStr isEqualToString:@""]) { return YES; } NSRange range = [urlStr rangeOfString:@"mypay://diandong/param?"]; //1.参数处理 NSUInteger location = range.location; if (location != NSNotFound) { NSString *str = [urlStr substringFromIndex:location + range.length]; NSArray *array = [str componentsSeparatedByString:@"&"]; NSMutableDictionary * parmDic = [NSMutableDictionary dictionary]; for (NSString * string in array) { NSArray *array = [string componentsSeparatedByString:@"="]; [parmDic setObject:array[1] forKey:array[0]]; } //2.跳转到原生支付界面 [self gotoPayWith:parmDic]; return YES; }
-(void)gotoPayWith:(NSMutableDictionary*)dic { UINavigationController *rootNav = (UINavigationController *)self.window.rootViewController; [rootNav popToRootViewControllerAnimated:NO]; if (dic.allKeys.count != 0) { NSString *title = [NSString stringWithString:[dic[@"title"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; [dic setObject:title forKey:@"title"]; NSString*string =dic[@"money"]; string = [string substringToIndex:string.length-1]; [dic setObject:string forKey:@"money"]; YiDingPayController * vc = [[YiDingPayController alloc]init]; vc.parmDic = dic; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [rootNav pushViewController:vc animated:YES]; }); } }
三运行效果
在UC中打开我们的网站,用户点击立即支付,成功打开Myapp并且跳到对应的控制器
在safari中输入:mypay://同样可以打开Myapp并跳转
ok到此需求基本搞定,但是我突然想到怎样样让Myapp支付完成跳转回对应的浏览器,我们知道,当app打开MyApp后可以把app的URL Scheme传过来,经过我们解析处理后可以通过[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”app的URL Scheme”]]来回跳到app,但是网页中打开Myapp怎么才能跳回到对应的浏览器呢?跟web开发的同事商量后暂时也没有解决的思路,有想法的小伙伴可以加我qq:1291349760,相互学习共同成长.接下来我会分享在iOS开发中怎么修改cookies来保存用户的信息.
相关文章推荐
- 【iOS开发】打开另一个APP(URL Scheme与openURL)
- 【转】【iOS开发】打开另一个APP(URL Scheme与openURL)
- APP内打开另一个APP(URL Scheme与openURL)【iOS开发】
- iOS开发之判断用户是否打开APP通知开关,看我就够了。
- iOS-定义协议从一个app打开另一个app
- Android应用安全开发之浅谈网页打开APP
- iOS 一个app跳转另一个app并实现通信(如A跳到B并打开B中指定页面)
- IOS开发判断是否第一次使用软件且下次app自动更新后再次打开还是第一次使用
- Android安全开发之浅谈网页打开APP
- Android应用安全开发之浅谈网页打开APP
- iOS开发中打开本地应用、打开appStore应用、给app评分功能实现
- 在app或者网页打开自己开发的App(Scheme)
- iOS开发笔记--调用打开AppStore显示自己的App
- iOS 一个app跳转另一个app并实现通信(如A跳到B并打开B中指定页面)
- iOS开发如何使用Safari浏览器打开app
- iOS 一个APP打开另一个APP
- iOS开发 应用iOS特性实现在应用内打电话,发短信,打开网页等。实现应用间授权以后再整理
- ios开发 打开第三方app
- iOS 一个APP打开另一个APP
- iOS开发之在客服开发之QQ, 在APP中打开指定qq聊天界面的方法