iOS - Получение push-сообщений FCM на переднем плане - PullRequest
0 голосов
/ 04 февраля 2019

Используя Swift 4 и Xcode 10, я хотел бы знать, возможно ли использовать службу push-уведомлений Firebase (облачные сообщения) только для получения push-уведомлений только в режиме переднего плана (нет необходимости в фоновом режиме).Я хотел бы обновить пользователя новыми данными, когда он находится в режиме переднего плана, без необходимости обновления пользователем.

Дело в том, что я не хочу запрашивать у пользователя разрешение на уведомления какон не должен знать о «обновлениях в реальном времени», которые я делаю для него.

Мне удалось добиться этого с помощью функции FCM, называемой «Прямые сообщения канала FCM», но проблема для меняв том, что у него есть какой-то механизм организации очередей, и когда пользователь находится в фоновом режиме, а затем возвращается в приложение (режим переднего плана), он получает все обновления, которые ему не хватало.Я не хочу, чтобы этот «механизм очередей» происходил.

Буду признателен за любую помощь!Спасибо.

1 Ответ

0 голосов
/ 05 февраля 2019

Эй, Эйтан Афлало, это тот же вопрос, с которым сталкивается мой друг.

1> Вы должны установить возможности настройки проекта при push-уведомлении.2> Используйте идентификатор уведомления.Выполните шаг ниже.

Я надеюсь, что эта работа.

extension AppDelegate {  

//MARK:- USER NOTIFICATION DELEGATE

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

    if notification.request.identifier == "rig"{
        completionHandler( [.alert,.sound,.badge])
    }else{
        completionHandler([.alert, .badge, .sound])
    }

}



func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
{
    //Handle the notification
    completionHandler(
        [UNNotificationPresentationOptions.alert,
         UNNotificationPresentationOptions.sound,
         UNNotificationPresentationOptions.badge])
}

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

    Messaging.messaging().apnsToken = deviceToken
    let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
    print(deviceTokenString)

}


func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {

    print(userInfo)

    switch application.applicationState {
    case .active:
        let content = UNMutableNotificationContent()
        if let title = userInfo["title"]
        {
            content.title = title as! String
        }
        if let title = userInfo["text"]
        {
            content.body = title as! String
        }
        content.userInfo = userInfo
        content.sound = UNNotificationSound.default()

        let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 0.5, repeats: false)
        let request = UNNotificationRequest(identifier:"rig", content: content, trigger: trigger)

        UNUserNotificationCenter.current().delegate = self
        UNUserNotificationCenter.current().add(request) { (error) in
            if let getError = error {
                print(getError.localizedDescription)
            }
        }
    case .inactive:
        break
    case .background:
        break
    }



}

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    print("i am not available in simulator \(error)")
}

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
    print("Firebase registration token: \(fcmToken)")
    let token = Messaging.messaging().fcmToken
    print("FCM token: \(token ?? "")")

}

}
...