IOS 唤醒另一个APP(app之间互相通信)

做各大平台分享的时候由于账号混乱,导致分享回调的时候启动了另一个app,这个时候我在猜想这些SDK是怎么唤醒没有启动的其他app的,不难想象,肯定跟AppDelegate处理回调openUrl有关,于是搜了一下才发现,一个应用程序可以唤醒另一个应用程序,只怪我菜,好啦,现在告诉不知道的朋友怎么来实现一个app怎么唤醒另一个app,以及让两个app之间互相通信。。。

测试工程操作如下

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

{

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

    {

        NSLog(@"%@",url);

    }

    return YES;

}

可以看见[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);    //来源于哪个appBundle 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 sharedApplicationopenURL:[NSURL URLWithString:@"sms://158********"]];

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

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

我们用过很多,估计也是程序内部设置了类似的url scheme来供其他应用程序操作的


也许我理解的有错误,欢迎大家一起交流分享,不甚感激!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS系统是目前市场上最为流行的智能手机操作系统之一,而H5技术则是网页设计与开发领域的一大热门技术。在很多情况下,我们需要H5页面能够实现唤醒app的功能,这样不仅可以增加用户体验,还能提高应用的活跃度和转化率。下面我们来看一下如何在iOS平台上实现H5唤醒App的功能: 1.使用 universal link:Universal Links 是苹果提供的一种标准的网络链接技术。在使用这种技术时,需要在项目中配置一个 JSON 文件,并在 app 中运用 Associated Domains 的配置与这个 JSON 文件联系,最后在 H5 页面中添加相应的链接。当用户点击链接时,iOS 系统就会判断该链接是否关联到了 APP 上,如果是,就会自动将用户跳转到 APP 中。 2.使用 scheme:Scheme 系统是 iOS 中常用的一种协议,用于在应用程序之间传递数据,或调用应用程序内部的某些功能。可以在APP项目中设置scheme,当手机浏览器在用户访问页面时,会根据链接协议中的scheme来唤醒APP,并且把数据传递到APP中。使用Scheme的方式相对来说比较简单,但是要注意的是,由于iOS9中的安全机制调整,仅能在应用内发起 scheme 调用。如果APP没有被安装,那么scheme调用是无效的。 3.使用IOS智能浏览器:安装一些智能浏览器,它们可以自动扫描网页上提供的一个二维码,并从中解析出应用商店的链接,并引导用户去下载应用,类似于国内的微信、手Q、支付宝等。 需要注意的是,无论使用哪种方式实现唤醒App的功能,都需要在APP中进行相应的设置和配置,以确保APP能够正常响应用户的调用。因此在进行开发时,需要综合考虑多个方面的因素,才能实现最优质的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值