【问题标题】:iPhone how to access the notification center programmaticallyiPhone如何以编程方式访问通知中心
【发布时间】:2013-10-07 01:50:49
【问题描述】:

根据 Apple 指南:

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

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

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

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

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

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

【问题讨论】:

    标签: iphone ios objective-c notifications


    【解决方案1】:

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

    不,任何公共 API 都不可能。

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

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

    application:didReceiveRemoteNotification:fetchCompletionHandler:
    

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      然后在应用程序中执行您需要执行的任何操作来处理通知,并确保注册它是由手机接收的。

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

      找到here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-11
        • 2016-08-07
        • 1970-01-01
        • 1970-01-01
        • 2015-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多