Я пытаюсь получить активный список уведомлений.
Если приложение запущено и активно, я получаю данные, но если уведомления получаются, когда приложение закрывается при запуске приложения, массив с уведомлениями является пустым событием, еслисчетчик значков показывает число> 0 новых уведомлений.
NotificationManager.swift
import Foundation
import UserNotifications
struct Notification: Encodable {
var field1: String?
var field2: String?
}
func isAnyNil(optionals: Optional<Any> ...) -> Bool {
return optionals.contains { $0 == nil }
}
@available(iOS 10.0, *)
func json(from notifications:Array<UNNotification>) -> String? {
if #available(iOS 10.0, *) {
var formattedNotifications = [Notification]()
for i in 0..<notifications.count {
let rec = notifications[i] as? UNNotification
print("--------------NOTIFICATION-----------------")
let aps = rec?.request.content.userInfo["aps"] as? NSDictionary
let alert = aps?["alert"] as? NSDictionary
let title = alert?["field1"] as? String
let body = alert?["field2"] as? String
if (isAnyNil(optionals: field1, field2)) { continue }
formattedNotifications.append(Notification(
info1: field1,
info2: field2
))
}
print("----- BEFORE JSON CONVERSION ------")
print(formattedNotifications)
do {
let jsonData = try JSONEncoder().encode(formattedNotifications)
let jsonString = String(data: jsonData, encoding: .utf8)!
return(jsonString)
} catch { return "[]" }
} else {
return "[]"
}
}
@objc(NotificationManager)
class NotificationManager: NSObject {
@objc static func requiresMainQueueSetup() -> Bool {
return true
}
@objc func getActiveNotifications(_ resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock ) -> Void {
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().getDeliveredNotifications(completionHandler: { (notifications) in
resolve(json(from: notifications))
})
} else {
reject("Not available", "Not supported", nil);
}
}
}
Info.plist OneSignalNotificationServiceExtension:
<key>OneSignal_disable_badge_clearing</key>
<true/>
AppDelegate.m
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
}
// Required for the register event.
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
}
- (void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"Registering device failed: %@", error);
}
// Required for the localNotification event.
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[RCTPushNotificationManager didReceiveLocalNotification:notification];
}
Мне не очень понятно, возможно ли это при запуске приложения, когда приложение было закрыто.Я читал в некоторых сообщениях, что уведомления кэшируются только на несколько минут, но при запуске приложения я не получаю даже те, которые были получены за последние 30-60 секунд ....