我想在应用未打开或不活动时将从推送通知接收的数据插入数据库。 当应用程序未打开或处于非活动状态时,有什么方法可以将所有收到的推送通知保存到我的数据库中?
答案 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...
}
独立来自Background
或Foreground
。您只需从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)
}
}