当应用程序在后台IOS中时获取推送通知数据

时间:2014-05-11 09:50:26

标签: ios push-notification

您好我正在开发我正在使用推送通知的小型IOS应用程序。所以在我的情况下,我能够收到通知,我也能够访问数据以进行通知。来自通知的数据意味着标题,描述等。所以在我的情况下,我不是在服务器端保存我的通知。我想在本地保存。为此,我想在通知到来之后立即将数据保存在本地。当应用程序处于前台时,我能够访问我的数据,但当应用程序处于后台时,我无法访问我的通知数据。我想访问通知数据,以便我可以保存它。对于通知,我做了以下事情:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[application registerForRemoteNotificationTypes:
 UIRemoteNotificationTypeBadge |
 UIRemoteNotificationTypeAlert |
 UIRemoteNotificationTypeSound];

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];

return YES;
}

 - (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken {
 }

- (void)application:(UIApplication *)application
 didReceiveRemoteNotification:(NSDictionary *)userInfo {
for (NSString *key in [userInfo allKeys])
{
    NSString *data = [userInfo objectForKey:key];
    NSLog(@"inside did register for notification .... %@  ---- > %@",key,data);
}
}

我的要求很简单我希望在我的应用处于后台时访问通知。谁在这里谁已经这样做了?需要帮忙。谢谢。

2 个答案:

答案 0 :(得分:2)

在iOS中,应用无法访问推送通知,直到用户点击通知中心的推送通知为止。
点击推送通知并且应用加载/变为活动状态后,您才能访问推送通知。

仅供参考:

  1. 当应用程序处于后台并收到推送通知时。
    用户点击推送通知后:
    • 可以使用-didReceiveRemoteNotification:方法访问内容。
  2. 当应用未打开且收到推送通知时。
    用户点击推送通知后
    • 可以使用-didFinishLaunchingWithOptions:参数中的launchOptions方法访问内容。
  3. 此外...推送通知不是100%可靠。它们可能会也可能不会被递送(虽然它们在我的观察中并不是很少见,但值得指出)

答案 1 :(得分:1)

iOS 7.0及更高版本中有一种方法可以发送通知并访问其内容,而无需用户点击它。 因此,您发送的通知有效内容有一个名为 content-available 的参数。您可以在以下链接中查看有效负载参数: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

因此,当您将内容可用设置为 1 并发送通知时,即使应用不在后台或前台,iOS也会调用以下功能(必须具有启用远程通知)

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

然后,您可以使用userInfo字典来获取通知数据。