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



根据苹果指南:

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

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

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

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

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

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

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

不,任何公共 API 都无法做到这一点。

你的应用与通知中心的当前状态无关,因为它们是两个解耦的实体。

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

application:didReceiveRemoteNotification:fetchCompletionHandler:

根据文档,无论应用程序的状态如何(因此即使它未运行或在后台(,都会调用它。

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

在 Xcode 5 及更高版本中,您可以从项目设置的"功能"选项卡中声明 App 支持的后台模式。启用"后台模式"选项会将 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);
}

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

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

然后在应用程序中执行您需要执行的操作来处理通知,并确保注册电话已收到通知。

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

在这里找到。

最新更新