iPhone如何以编程方式访问通知中心

时间:2013-10-07 01:50:49

标签: iphone ios objective-c notifications

根据Apple指南:

如果在运行iOS的设备上轻触应用程序图标,则应用程序会调用相同的方法,但不会提供有关通知的信息。如果在运行

的计算机上单击了应用程序图标

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction.html#//apple_ref/doc/uid/TP40008194

据我所知,点击应用程序图标时似乎无法检测到通知。

所以我尝试以编程方式检索通知中心,但似乎也不可能。

是否无法以编程方式检索通知中心?

我想要做的是检测是否收到通知,即使应用程序在后台也是如此。

3 个答案:

答案 0 :(得分:6)

  

是否无法以编程方式检索通知中心?

不,任何公共API都无法实现。

您的应用与Notification Center的当前状态无关,因为它们是两个分离的实体。

无论如何,正如AdamG所指出的,在iOS 7中你可以实现

application:didReceiveRemoteNotification:fetchCompletionHandler:

,根据documentation,无论您的应用状态如何,都会被调用(即使它没有运行或在后台运行)。

要使用它,您必须支持remote-notification后台模式。方法如下:

  

在Xcode 5及更高版本中,您可以从项目设置的“功能”选项卡中声明应用支持的背景模式。启用“后台模式”选项会将UIBackgroundModes键添加到应用程序的Info.plist文件中。选择一个或多个复选框可将相应的背景模式值添加到该键。

现在,虽然您仍然无法以编程方式访问通知中心,但您可以跟踪通知。

模拟的实现如下:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    // Hey we got a notification!
    // Now we have 30 seconds to do whatever we like...
    // ...and then we have to call the completion handler
    completionHandler(UIBackgroundFetchResultNoData);
}

答案 1 :(得分:1)

我有兴趣知道iOS8是否会在此更改任何内容,并允许我们从定制的iOS8应用程序访问Notification Center小部件?

加文

答案 2 :(得分:0)

在iOS 7下,有一种方法可以做到这一点。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler

然后在应用程序中执行任何操作来处理通知,并确保注册它已被手机接收。

  

当推送通知到达时,系统会向用户显示通知并在后台启动应用程序(如果需要),以便可以调用此方法。使用此方法下载与推送通知相关的任何数据。方法完成后,在handler参数中调用块。

找到here