iosAPP之间的跳转

作各大平台分享的时候因为帐号混乱,致使分享回调的时候启动了另外一个app,这个时候我在猜测这些SDK是怎么唤醒没有启动的其余app的,不难想象,确定跟AppDelegate处理回调openUrl有关,因而搜了一下才发现,一个应用程序能够唤醒另外一个应用程序,只怪我菜,好啦,如今告诉不知道的朋友怎么来实现一个app怎么唤醒另外一个app,以及让两个app之间互相通讯。。。html


测试工程操做以下

1.新建一个app1,在Info.plist文件的信息属性列表里新建一组,类型是URL types    设置以下
IOS <wbr>唤醒另外一个APP(app之间互相通讯)
这里最关键的部分在于URL Schemes数组里的Item 0,后面的填写的字符串就是你用来通讯的命令前缀“achao”,URL identifier只是一个标示符,随意填写
而后再AppDelegate里处理重载下面的回调方法

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url数组

{app

    if ([[url scheme] isEqualToString:@"achao"])ide

    {测试

        NSLog(@"%@",url);url

    }spa

    return YES;htm

}blog

能够看见[url scheme]这个命令是为了拿到url的scheme,就是命令前缀“achao”
 
2.新建app2,这个app什么都不用操做,只须要去唤醒app1便可,因而咱们在viewDidLoad里写上这一句

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"achao://hello"]];字符串

"achao"就是app1里的url scheme,我叫它命令前缀(我怀疑apple的应用程序装上事后有个像通知中心同样的应用程序来统一管理,而每一个应用程序的url scheme都会在那里被记录,以供其余app来调用该app,至于url scheme属于哪一个应用程序,固然是和app的Bundle identifier相关的),格式采用“前缀://..."
 
3.咱们关闭app1,app2,而后再启动app2,发现app2启动事后唤醒了app1,而且成功跳转;咱们再关闭app1,app2,而后咱们打开app1进行监测,发现app1被启动后,进入了

IOS <wbr>唤醒另外一个APP(app之间互相通讯)

这就实现了两个app之间的唤醒和通讯
 
4.固然这时候你可能才想到,那不是不少应用程序都会被其余垃圾程序调用了,查找资料事后,原来还有后续
咱们重载这个方法

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

    if ([sourceApplication isEqualToString:@"AC.achao.com"])

    {

        NSLog(@"%@", sourceApplication);    //来源于哪一个app(Bundle identifier)

        NSLog(@"scheme:%@", [url scheme]);  //url scheme

        NSLog(@"query: %@", [url query]);   //查询串  用“?...”格式访问

        return YES;

    }

    else 

        return NO;

 

}

这就知足咱们的需求了,咱们能够经过sourceApplication来判断来自哪一个app以决定要不要唤醒本身的app,也能够经过[url query]来得到查询串,这个时候咱们须要更改app2的访问方式才能得到这个参数

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"achao://hello?name=achao-AC"]];

咱们也能够直接在safari离输入"achao://hello?name=achao-AC"来访问咱们的app1,这个时候sourceApplication就是@"com.apple.mobilesafari"

 
总结:相似下面的方法

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.baidu.com"]];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://158********"]];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://158********"]];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://362****@qq.com"]];

咱们用过不少,估计也是程序内部设置了相似的url scheme来供其余应用程序操做的

 

也许我理解的有错误,欢迎你们一块儿交流分享,不甚感激!
相关文章
相关标签/搜索