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

5
根据苹果指南: 在运行iOS的设备上点击应用程序图标时,应用程序调用相同的方法,但不提供有关通知的任何信息。如果在计算机上点击应用程序图标,则:

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

据我所知,似乎无法在应用程序图标被点击时检测到通知。因此,我尝试通过编程方式检索通知中心,但也似乎不可能。无法通过编程方式检索通知中心吗?我的目的是即使应用程序处于后台状态,也要检测是否收到通知。
2个回答

6

有没有可能通过编程的方式检索通知中心?

不,无法使用任何公共API实现该功能。

您的应用程序对于通知中心的当前状态是不知情的,因为它们是两个解耦的实体。

不过,正如AdamG所指出的,在iOS 7中,您可以实现

application:didReceiveRemoteNotification:fetchCompletionHandler:

根据文档,无论应用程序处于何种状态(即使未运行或在后台),都会调用该方法。
为了使用它,您必须支持remote-notification的后台模式。以下是操作步骤:

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

现在,虽然仍然无法通过编程方式访问通知中心,但可以跟踪通知的到来。
模拟实现如下:
- (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);
}

0
在iOS 7中有一种方法可以实现这个。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler

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

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

此处找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接