美文网首页
iOS应用间通信

iOS应用间通信

作者: 涛昇依旧 | 来源:发表于2018-04-11 17:59 被阅读117次

上一篇文章中我们已经详细的介绍了通知扩展怎么使用,无奈我们产品的设计又有了其他 奇(辣) 思(鸡) 妙(到) 想(死)的想法.

产品设计图

类似于这种就必须需要在通知扩展中拿到拿到主工程的配置

在iOS 8系统之前,每一个app在物理上都是彼此独立的,app之间不能互访彼此的私有数据。而在引入扩展之后,其他app可以与扩展进行数据交换。基于安全和性能的考虑,每一个扩展运行在一个单独的进程中,它拥有自己的bundlebundle后缀名是.appex。扩展bundle必须包含在一个普通应用的bundle的内部。

通知扩展

但是可能是本人太笨的原因,还是无法在通知扩展中调用主工程的配置,于是我在网上废了很长一段时间去搜资料(其实是自己太懒,没有认真搜),终于被我找到了一个神奇的东西App Groups

App Groups

iOS8之后苹果加入了App Groups功能,应用程序之间可以通过同一个group来共享资源,app group可以通过NSUserDefaults进行小量数据的共享,或者使用 NSFileCoordinatorNSFilePresenter 甚至是 CoreDataSQLite 来进行更大的文件或者是更复杂的数据交互。

首先我们需要开启 App Groups。得益于 Xcode 5 开始引入的Capabilities,这变得非常简单(至少不再需要去 developer portal 了)。选择主ZYBaseTest,打开它的 Capabilities 选项卡,找到 App Groups 并打开开关,然后添加一个你能记得的 group名字,比如 group.ZYNotificationServiceGr。接下来你还需要为 ZYBaseTestPushExtend 这个 target 进行同样的配置,只不过不再需要新建 group,而是勾选刚才创建的 group 就行。

主工程
屏幕快照 2018-04-11 上午9.00.59.png 通知扩展
以上两个操作在ZYBaseTestZYBaseTestPushExtend两个target中都需要设置好,设置好了之后,数据就可以共享了。

注意 ,坑点要来了

一般我们都是使用NSUserDefault来存储一些小的配置,比如我就是存的用户是否开启了语音播报、是否选择了简易的语音播报。我相信大家一般都是用[NSUserDefaults standardUserDefaults]来创建NSUserDefaults对象,但是如果通过这种方式创建的话,你是无法在通知扩展中拿到你在主工程中设置的NSUserDefaults信息!!

在这里,存储数据时,一定要通过[[NSUserDefaults alloc] initWithSuiteName:@"groupName"]这个格式去创建NSUserDefaults对象,groupName填写当前设置AppGroups勾选的名字(比如我的就是group.ZYNotificationServiceGr)

创建方法区别

  • initWithSuiteName会在Library/Preference下新建一个以name为名字的plist文件 (两个访问的是同一个plist)
  • [NSUserDefaults standardUserDefaults]是以bundle id为名字的一个plist文件 (两个访问的是不同的plist)

AA:利用这个我们可以给每一个用户新建一个偏好设置的文件,保存皮肤,字体等,不同的用户登录就会有不同的效果。

另外可能是我个人的原因吧,即使设置了APP group我还是无法在通知扩展中访问pch内的东西,所以我只有祭出杀器 大杀器-手动导入

然后就是很顺利的访问了


通知扩展中的代码
最后为了你们看的方便,我把我宏的字段也给你们看
宏的字段

吼吼~结束了,本人文采太差了,见谅见谅哈 。希望对你们有点点帮助。

相关文章

  • iOS应用间通信:URL Schemes

    iOS应用间通信:URL Schemes 抛开越狱不谈,URL Schemes几乎是iOS应用间通信(Inter-...

  • iOS应用间通信

    上一篇文章中我们已经详细的介绍了通知扩展怎么使用,无奈我们产品的设计又有了其他 奇(辣) 思(鸡) 妙(到) 想(...

  • iOS应用间通信

    注意:需要为即将调用的app设置白名单,在info.plist中,添加如下设置: LSApplicati...

  • iOS 跳转第三方应用&自己被第三方应用打开

    2018.9.26 iOS应用间通信:URL Schemes 参考链接:入门 iOS 自动化:读懂 URL Sch...

  • 11月第一周

    通过URLSchemes建立应用间通信机制(例:支付宝) - IOS - 伯乐在线

  • 网页端如何判断native app是否安装并跳转到app具体页面

    iOS端 scheme iOS中应用间进行通信的技术,可以带参数。格式类似于http openUrl 指打开URL...

  • Android--IPC

    Binder IPC (Inter-Process Communication) 进程间通信,支持应用间通信、应用...

  • IPC

    进程间通信 使用URL Schema,就是iOS内的应用调用协议。 IOS10关闭跳转设置子页面,以以下方法通过审核。

  • iOS 进程间通信(APP间通信)

    进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内,iOS ...

  • 应用间跳转、通信

    应用间跳转 •app应用的跳转的原理 •如何实现两个app应用之间的跳转 •如何实现两个app之间跳转到指定的页面...

网友评论

      本文标题:iOS应用间通信

      本文链接:https://www.haomeiwen.com/subject/sihzhftx.html