替代NSDistributedNotificationCenter以获取iPhone应用之间的通信

时间:2012-01-27 21:32:37

标签: iphone notifications message center

我一直在寻找一种方法来实时比较同一部手机上的应用程序之间的时间戳,NSDistributedNotificationCenter听起来像一个理想的解决方案,因为我可能不知道听它的应用程序的名称,但它听起来像它的在iOS中不可用。

是否有相同的方式在不知道姓名的情况下通知多个应用程序的时间敏感事件?

针对iOS 5+的编码并假设有问题的应用程序将注册通知。

5 个答案:

答案 0 :(得分:3)

查看CPDistributedMessagingCenter中的/System/Library/PrivateFrameworks/AppSupport.framework。但是,它是一个私有框架(可能随操作系统版本而改变,AppStore中不允许)。

此处的文档:http://iphonedevwiki.net/index.php/CPDistributedMessagingCenter

我的示例代码:

https://github.com/H2CO3/PwnTube

https://github.com/H2CO3/Cereal

答案 1 :(得分:2)

我很确定你可以使用Mach端口。它们有点低,但运作良好。

答案 2 :(得分:1)

我找到了一种在iOS上使用CFNotificationCenterGetDistributedCenter()的方法。它存在于设备上,但不存在于iOS SDK中的导出

void *libHandle = dlopen("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", RTLD_LAZY);
CFNotificationCenterRef (*CFNotificationCenterGetDistributedCenter)() = (CFNotificationCenterRef (*)())dlsym(libHandle, "CFNotificationCenterGetDistributedCenter");
if(CFNotificationCenterGetDistributedCenter) {
    CFNotificationCenterAddObserver(CFNotificationCenterGetDistributedCenter(), NULL, &NotificationUpdateApp, CFSTR("TestApp"), NULL, CFNotificationSuspensionBehaviorCoalesce);
}
dlclose(libHandle);

答案 3 :(得分:0)

不是真的。在非越狱设备上,您可以做的最接近您要求的是让您的服务器与其他应用程序的服务器通信,并让该服务器向相关应用程序发送推送通知。如果没有NSDistributedNotificationCenter(正如你猜测的那样,在iOS上不可用),你实际上没有任何其他选择。

答案 4 :(得分:0)

这个问题有点陈旧,但我会发布我的答案仅供参考。

NSDistributedNotificationCenter尚不适用于iOS,除非您正在开发一个您假装在AppStore上发布的应用程序,否则您无法使用AppSupport.framework,因为它是私有的。

iOS8发布了App Extensions,它使我们能够与其他应用进行通信。我不知道你要做什么,但我相信如果你只是想比较一些其他应用程序的时间戳,它应该可以解决你的问题。

链接到AppExtensions文档: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/

希望它对某人有帮助。