iOS通知中心插件与应用的数据交互

通知中心插件 - 数据传递

名字解释:
Widget:指通知中心的插件
Host:指插件的宿主,即通知中心的Today区域
Container:指插件所依托存在的应用 


Widget和Host数据共享

主要是利用协议下的 

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler

方法进行,根据系统的要求,进行相应的视图更新等处理。 



Widget和Container数据共享

    Widget和Container之间,数据的共享可以通过AppGroup配置后,对共用的存储空间内进行数据共享。 

主要步骤有 

1.在target中配置AppGroup


2.利用NSUserDefault或者NSFileManager访问AppGroup共享区域的内容,如果是NSUserDefault需要用创建方法:

[[NSUserDefault alloc] initWithSuiteName:groupID]

如果是NSFileManager需要使用下面的获取路径方法

[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:groupID]



Widget和Container的实时数据交互

    按照苹果的设计来看,本意是不希望Widget和Container存在直接的实时数据交互的,但是如果我们真的有一些特殊需求,比如:
    当Container开启时,可以实时改变一些Widget中的内容;又或者在Widget中触发某个按钮之类的操作,希望可以实时影响应用的展示... 

    这里我想到一种利用他们之间的AppGroup存储可以共享使用,建立文件监视来变相达到目的的方法。查了一下iOS中目前好像没有相应的FileWatchDog类,因此自己做了一个,丢在github上,链接FileWatchDog

    共享数据的原理是:Widget和Container都对同一个文件,进行文件变动监视,这样另一方有什么要传递的数据或指令,可以通过写文件的方式来提醒另一方,达到变相的实时数据交互。


PS:

网上看到过有人在Widget中利用NSURLSession来进行对Container的下载结束的提醒,这种也在特定条件下可以做一些事情,因此一并列在这里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值