iOS 两个App之间利用URLSchemes的通信
2016-03-08 10:23
225 查看
iOS 两个App之间调起通信
前言
假设需求是这样的:由一个app1跳转到app2之后,app2完成某项任务之后,怎么把app2的完成信息传到app1(自己的程序是app1),传的是什么类型的数据,怎么进行解析?
逻辑
本文章使用TestApp1作为第一个app的URL Schemes,TestApp2为第二个app的URL Schemes。
TestApp1工程配置
如下图,要适配iOS9.0:
对于
URL Schemes中的
TestApp1是本应用提供给其它应用调用的。
TestApp2工程配置
如下图,要适配iOS9.0:
对于
URL Schemes中的
TestApp2是本应用提供给其它应用调用的。
TestApp1工程中实现代码测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // TestApp2是TestApp2这个app在info.plist中配置的URL Schemes if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestApp2://"]]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"TestApp2://success=1&count=100"]]; } return YES; } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { NSString *receText = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"%@ %@",receText, url.absoluteString); return YES; } |
TestApp2,通过
TestApp2工程公开的
URL Schemes来判断,即
TestApp2://。需要传参数时,是通过URL参数来传的。如:TestApp2://success=1&count=100就是一个URL。
TestApp2工程中实现代码测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { NSString *receText = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"%@ %@",receText, url.absoluteString); [self performSelector:@selector(goBackToApp1) withObject:nil afterDelay:2]; return YES; } - (void)goBackToApp1 { if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestApp1://"]]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"TestApp1://paySuccess=1"]]; } } |
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url处理来自
TestApp1应用的调用,获取到相应的参数了。
当我们处理数据完成,需要反馈给
TestApp1时,就需要调用通过
TestApp1://paySuccess=1调用回到
TestApp1并将状态带回去。
TestApp1打印日志
1 2 3 | 2015-12-03 22:30:10.250 TestApp1[9008:678123] paySuccess=1 TestApp1://paySuccess=1 |
TestApp2正确的传过来了。
TestApp2打印日志
1 2 3 | 2015-12-03 22:29:59.690 TestApp2[9004:677942] success=1&count=100 TestApp2://success=1&count=100 |
TestApp1传过来了。
最后
最近不少朋友问到我应用之间如何相互调用,又如何传参数的问题,在这里统一讲解了。
源代码
如果单看文章,看不太明白,可以到github下载源代码运行看看效果:https://github.com/CoderJackyHuang/AppCommunicationDemo
相关文章推荐
- Android AutoLayout全新的适配方式 堪称适配终结者
- Android RelativeLayout和LinearLayout
- 归并排序算法 iOS
- Android自定义对话框,背景颜色透明
- Android——数据存储(Login)
- 4.10 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放
- iOS 原生扫描二维码
- Android activity四种启动模式完全解析
- SPRING IN ACTION 第4版笔记-第九章Securing web applications-008-使用非关系型数据库时如何验证用户(自定义UserService)
- ijkplayer编译脚本分析(一)——init-android.sh
- 谈谈Objective-C的警告
- JS和Native交互之 -WebViewJavascriptBridge源码分析
- Android MVP Pattern
- Swift中的willSet与didSet zhuan
- 12步创建高性能Web APP
- Android实现再按一次退出程序
- 【Android】自定义ViewPager控制其页面切换速度
- Android M权限请求
- Android4.2锁屏流程【Android锁屏解析三】
- Android 系统属性SystemProperty分析