Firebase Cloud Messaging успешно отправил sendToDevice, но уведомлений нет - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь написать облачную функцию, которая отправляет push-уведомление на устройство iOS.Журналы говорят, что sendToDevice был успешным.Но мое устройство не получает никаких уведомлений.Ни Xcode, ни Облачные Функции не показывают никаких ошибок.Как я могу диагностировать эту проблему?

Моя облачная функция берет регистрационный токен из базы данных в реальном времени.Этот токен сохраняется в базе данных во время функции didRegisterForRemoteNotificationsWithDeviceToken в приложении ios, подтверждая, что интерфейс регистрируется для удаленных уведомлений.Приложение получило разрешение на отображение уведомлений, а функции push-уведомлений были включены в Xcode.

Этот блок кода взят из моей облачной функции (Node.js) :

// This snapshot was taken from the realtime database
// Xcode logs confirmed that this function is receiving the correct key
const notificationKey = userSnapshot.child("notificationKey").val();

const payload = {
  notification: {
    title: 'Test Notification Title',
    body: 'Test Notification Body',
    sound: 'default',
    badge: '1'
  }
};

return admin.messaging().sendToDevice(notificationKey, payload).then(function (response) {
  console.log("Successfully sent message: ", JSON.stringify(response));
  return;
}).catch(function (error) {
  console.log("Error sending message: ", error);
  return;
});

При вызове облачной функции, приведенной выше, в журналах показывался этот журнал консоли (усеченные номера Id):

"Successfully sent message:  {"results":[{"messageId":"0:154/* ... */"}],"canonicalRegistrationTokenCount":0,"failureCount":0,"successCount":1,"multicastId":576/* ... */}"

Но мое тестовое устройство (iPhone 7) не получало никаких уведомлений.Мое приложение имеет следующие функции делегата (Swift 4) :

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

    print("Notification will present: \(notification.request.content.userInfo)")
}

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

    print("Notification received: \(response.notification.request.content.userInfo)")
}

Ни один оператор печати не появляется в выводе Xcode.Единственные релевантные печатные заявления - это те, которые я включил в didRegisterForRemoteNotificationsWithDeviceToken.Мой сертификат APN, по-видимому, все еще действителен и не истек.

1 Ответ

0 голосов
/ 03 декабря 2018

Проблема заключалась в том, что мой подфайл отсутствовал:

pod 'Firebase/Messaging'

Это позволило моему didReceiveRemoteNotification получать полезные данные уведомлений от облачной функции Firebase.Затем, как только я добавил UNUserNotificationCenter.current().delegate = self в AppDelegate, функции UNUserNotificationCenterDelegate сработали так, как предполагалось.

Странно, как отсутствующий модуль не дал мне ошибок компилятора.

...