iOS - FCM не получает push-уведомления при закрытии приложения - PullRequest
0 голосов
/ 09 октября 2018

Когда мое приложение убито, я не получаю push-уведомление, но работает нормально с фоном.После получения уведомления я генерирую локальное уведомление, получая данные из моей базы данных.В содержимом полезной нагрузки доступен ключ 1. Пожалуйста, подскажите, где я ошибаюсь, получая уведомление fcm или работая в фоновом режиме.

вот мой код -

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    let state: UIApplicationState = UIApplication.shared.applicationState

    print(userInfo)
    if state == .active{
        let messageBody = userInfo["aps"] as! Dictionary<String,Any>
        print("@@@@@@@@@@@@@ got notification")
        if let message = messageBody["message"] {
            let messageDict = DCUtilityClass.convertToDictionary(text: message as! String)
            let _ = DCPushNotificationAPI.getNotificationResult(info: (messageDict)!)
        }
    } else if state == .inactive {
        let messageBody = userInfo["aps"] as! Dictionary<String,Any>
        print("@@@@@@@@@@@@@ got notification")
        if let message = messageBody["message"] {
            let messageDict = DCUtilityClass.convertToDictionary(text: message as! String)
            let _ = DCPushNotificationAPI.getNotificationResult(info: (messageDict)!)
        }
    } else if state == .background {
        let messageBody = userInfo["aps"] as! Dictionary<String,Any>
        print("@@@@@@@@@@@@@ got notification")
        if let message = messageBody["message"] {
            let messageDict = DCUtilityClass.convertToDictionary(text: message as! String)
            let _ = DCPushNotificationAPI.getNotificationResult(info: (messageDict)!)
        }
    }

    completionHandler(UIBackgroundFetchResult.noData)
    //receiveMessageMethod(recieveMessage: messageBody as! Dictionary<String, Any>)
}

и

class func triggerLocalPushNotification(title:String, body:Dictionary<String,Any>) {


    //creating the notification content
    let content = UNMutableNotificationContent()

    //adding title, subtitle, body and badge

    let messageDictModel = DCChatListHistoryModel.init().initWithUserChatDictionary(userDictionary: body)

    if messageDictModel.mIsGroup{
        if messageDictModel.mGroupDetailsModelArray.count == 0 {
            let groupData =  DCDBDataUtilityClass.getGroupInfoByConversationId(id: messageDictModel.m_id)
            content.title = (groupData?.mGroupsModelArray.first?.mGroup_name)!
            content.body = messageDictModel.mlatest_message
        } else {
            content.title = (messageDictModel.mGroupDetailsModelArray.first?.mGroup_name)!
            content.body = messageDictModel.mlatest_message
        }

    } else {
        var messageSender = ""
        if messageDictModel.mMessageFrom == UserDefaults.standard.value(forKey: "user_id") as! String {
            messageSender = messageDictModel.mMessage_to
        } else {
            messageSender = messageDictModel.mMessageFrom
        }
        let name = DCDBDataUtilityClass.getInfoById(id: messageSender)
        content.title = (name?.mFull_name)!
        content.body = messageDictModel.mlatest_message
    }
    //getting the notification trigger
    //it will be called after 5 seconds
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 0.2, repeats: false)

    //getting the notification request
    let request = UNNotificationRequest(identifier: "iOSNotification", content: content, trigger: trigger)

    //adding the notification to notification center
    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

}
...