如何在应用关闭或处于非活动状态时处理iOS应用中的推送通知?

时间:2015-02-20 13:36:25

标签: ios objective-c iphone apple-push-notifications

我想在应用未打开或不活动时将从推送通知接收的数据插入数据库。 当应用程序未打开或处于非活动状态时,有什么方法可以将所有收到的推送通知保存到我的数据库中?

4 个答案:

答案 0 :(得分:0)

我建议你做什么,可能的是在这个AppDelegate方法中添加方法(在这里保存数据库)。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

当您收到通知时,您可以在此处理您想要发生的事情。传递的NSDictionary值存储了所有推送信息,你可以通过这样的方式获得它们的值

//Your dictionary may be set up a bit differently but that's okay
[userInfo objectForKey:@"alert"];

这包含推送通知中的消息或“警告”消息。您可以使用该密钥并将其存储在NSString实例中并将其保存到数据库中(但这适用于您)。我正在使用Parse.com作为我的后端,所以我会这样做以在后台保存一个对象。

PFObject *someObject = [PFObject objectWithClassName:<Class Name>];
messageObject[@"message"] = [userInfo objectForKey:@"alert"];
[someObject saveInBackground];

我实际上没有尝试过,但我认为它会起作用

答案 1 :(得分:0)

接收通知时,您需要检查应用程序对象中的属性 applicationState

UIApplicationState applicationState = [application applicationState];

它可以是UIApplicationStateActive,UIApplicationStateInactive或UIApplicationStateBackground。

希望这会有所帮助; - )

答案 2 :(得分:0)

始终收到通知,它直接转到回调方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    // Get info to save from userInfo dictionary

    // Save it with Core Data, Archiving, NSUserDefaults, SQLite...

}

独立来自BackgroundForeground。您只需从userInfo Dictionary获取通知所需的信息。

此处您还可以使用UIApplicationState查看应用的状态。如果您想在应用UIAlertView上显示Foreground,则可以分割背景/前景状态的逻辑。或者不是,如果你在Background

答案 3 :(得分:0)

使用Notification service extension,我们可以将数据存储到数据库中。

a)使用底部的Notification service extension图标添加+

b)为此创建配置文件

c)打开新创建的目标并打开NotificationService.swift文件

d)使用以下方法处理通知

override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
    self.contentHandler = contentHandler
    bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
   // print("Notification service extension user info :", bestAttemptContent?.userInfo)
    
    if let bestAttemptContent = bestAttemptContent {
        // Modify the notification content here...
       // bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"
        if let aps = bestAttemptContent.userInfo["aps"] as? NSDictionary,
           let data = aps["data"] as? NSDictionary {
            saveNotificationIntoDB(data: data)
        }
        contentHandler(bestAttemptContent)
    }
}