Как получить список активных уведомлений при запуске приложения - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь получить активный список уведомлений.

Если приложение запущено и активно, я получаю данные, но если уведомления получаются, когда приложение закрывается при запуске приложения, массив с уведомлениями является пустым событием, еслисчетчик значков показывает число> 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 секунд ....

...