两个App之间调起通讯

前言

常用一些app的分享功能,好比点击QQ分享,就从app打开(跳转到)QQ,而后分享完以后又回到咱们的app,那么这是怎样实现的呢?app

假设有这么一个需求,由app1跳转到app2,当app2完成任务以后,要把app2中的某些信息传到app1中(假设咱们本身的程序是app1)测试

过程

咱们建立两个新的工程,一个叫Test1,一个叫Test2。url

本篇文章将使用Test1做为第一个app的URL Schemes,Test2做为第二个app的URL Schemesspa

Test1工程配置

因为iOS9.0以后跳转URL Schemes须要将添加白名单 图1 对于URL Schemes中的Test1是本应用留给其余应用调用的。日志

Test2工程配置

图2 对于URL Schemes中的Test2是本应用留给其余应用调用的。code

Test1工程中测试代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
	    // Test2是在Test2这个项目的info.plist中配置的URL Schemes
	    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"Test2://"]]) {
	        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"Test2://success=1&&name=test2"]];
	    }
	    return YES;
	}
	- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
	    NSString *str = [[url host] stringByRemovingPercentEncoding];
	    NSLog(@"%@---%@",str, url.absoluteString); 
	    return YES;
	}

咱们首先须要判断手机是否安装了应用Test2,经过Test2工程公开的URL Schemes来判断,即Test2://。须要传参数时,是经过URL参数来传的。如:Test2://success=1&&name=test2就是一个URL。orm

Test2工程中测试代码

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
	    NSString *str = [[url host] stringByRemovingPercentEncoding];
	    NSLog(@"%@---%@",str, url.absoluteString); 
	    [self performSelector:@selector(goBackToApp1) withObject:nil afterDelay:2];
	    return YES;
	}
	- (void)goBackToApp1 {
	    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"Test1://"]]) {
	        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"Test1://loginSuccess=1"]];
	    }
	}

咱们在- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url处理来自Test1应用的调用,获取到相应的参数了。string

当咱们处理数据完成,须要反馈给Test1时,就须要调用经过Test1://loginSuccess=1调用回到Test1并将状态带回去。it

Test1打印日志

2016-06-05 23:23:09.807 test1[1277:219009] loginSuccess=1---Test1://loginSuccess=1

说明参数能从Test2正确地传递过来。io

Test2打印日志

2016-06-05 23:22:15.008 test2[1243:216871] success=1&&name=test2---Test2://success=1&&name=test2

说明参数能从Test1正确地传递过来。

相关文章
相关标签/搜索