how do killed app receive firebase message

428 views Asked by At

Receive notifications in the background and in the foreground. but I can't get notifications if the application is killed.

open Background fetch and Remote notification from capabilities installed on certificates via firebase json file into "content-available" = true, 'priority'=>'high', I added I want to be able to receive notifications after the application is completely closed

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate {

var window: UIWindow?
let gcmMessageIDKey = "message_id"

static var DEVICE_ID = String()
var msg_body = ""
var msg_title = ""

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    UIApplication.shared.statusBarStyle = .lightContent

    FirebaseApp.configure()
    Messaging.messaging().delegate = self

    if #available(iOS 10.0, *) {
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self

        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: {_, _ in })
    } else {
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        application.registerUserNotificationSettings(settings)
    }

    application.registerForRemoteNotifications()

    return true
}

func connectToFcm() {
    Messaging.messaging().shouldEstablishDirectChannel = true
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    if let refreshedToken = InstanceID.instanceID().token() {
        AppDelegate.DEVICE_ID = refreshedToken
        print("*********")
        print("InstanceID token: \(refreshedToken)")
        print("*********")
    }else{
        print("Can't get token device")
    }

    connectToFcm()

}

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    print("Failed to register for remote notifications with error: \(error)")
}


func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    print(userInfo)

    guard let data: [String: Any] = userInfo as? [String: Any] else {
        return
    }

            let listData = data["notification"] as! String
            let jsonData = listData.data(using: .utf8)
            do {
                let decoder = JSONDecoder()
                let dataJson = try decoder.decode(DataNotif.self, from: jsonData!)

                msg_body = dataJson.body!
                msg_title = dataJson.title!

                createNotification(title: msg_title, body: msg_body)

            }catch{
                print("error")
            }

    completionHandler(UIBackgroundFetchResult.newData)
}

// messaging
func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {

    if let token = InstanceID.instanceID().token() {
        AppDelegate.DEVICE_ID = token
        print("*********")
        print("Token Instance: \(token)")
        print("*********")
    }

    connectToFcm()
}

func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {

    print("Received data message: \(remoteMessage.appData)")

    guard let data: [String: Any] = remoteMessage.appData as? [String: Any] else {
        return
    }

            let listData = data as! NSDictionary
            let jsonData = listData.data(using: .utf8)
            do {
                let decoder = JSONDecoder()
                let dataJson = try decoder.decode(DataNotif.self, from: jsonData!)

                msg_body = dataJson.body!
                msg_title = dataJson.title!

                createNotification(title: msg_title, body: msg_body)

            }catch{
                print("error")
          }


}

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

    completionHandler([.alert, .badge, .sound])
}

func applicationDidBecomeActive(_ application: UIApplication) {
    UIApplication.shared.applicationIconBadgeNumber = 0
    connectToFcm()
}

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    completionHandler(.newData)
}

func applicationDidEnterBackground(_ application: UIApplication) {
    Messaging.messaging().shouldEstablishDirectChannel = false
    print("Disconnect FCM")
}

func createNotification(title: String, body: String) {
    let content = UNMutableNotificationContent()
    content.title = NSString.localizedUserNotificationString(forKey: title, arguments: nil)
    content.body = NSString.localizedUserNotificationString(forKey: body, arguments: nil)
    content.sound = UNNotificationSound.default
    content.badge = NSNumber(integerLiteral: UIApplication.shared.applicationIconBadgeNumber + 1)

    let request = UNNotificationRequest.init(identifier: "pushNotif", content: content, trigger: nil)

    let center = UNUserNotificationCenter.current()
    center.add(request)
}
}
1

There are 1 answers

0
Majed Dkahellalah On

You must enable the following :) enter image description here