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

当iOS应用关闭或处于非活动状态时,如何在iOS应用中处理推送通知?,ios,objective-c,iphone,apple-push-notifications,Ios,Objective C,Iphone,Apple Push Notifications,我想在应用程序未打开或处于非活动状态时,将从推送通知接收的数据插入数据库。 当应用程序未打开或处于非活动状态时,是否有任何方法可以将收到的所有推送通知保存到我的数据库中?我建议您做什么,并且可以在这个AppDelegate方法中添加方法(将信息保存在数据库中) - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 当你收到通知时,你可以处理

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

我建议您做什么,并且可以在这个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];
PFObject*someObject=[PFObject objectWithClassName:];
messageObject[@“message”]=[userInfo objectForKey:@“alert”];
[someObject saveInBackground];

实际上我还没有尝试过,但我假设它会起作用

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

UIApplicationState applicationState = [application applicationState];
它可以是UIApplicationStateActive、UIApplicationStateInactive或UIApplicationStateBackground

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

希望这有帮助;-)

当您收到通知时,它会直接转到回调方法

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

    // Get info to save from userInfo dictionary

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

}
它独立地来自
背景
前景
。您只需从
用户信息
字典
获取通知所需的信息即可


在这里,您还可以使用
UIApplicationState
检查应用程序的状态。如果您希望在应用程序位于
前台时显示
UIAlertView
,则可以拆分后台/前台状态的逻辑。如果您在
后台
,则不在

使用
通知服务扩展
,我们可以将数据存储到数据库中

a) 使用底部的
+
图标添加
通知服务扩展

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)
    }
}
可能重复的