Функции Firebase сообщают, что сообщение было успешно отправлено, но не получено - PullRequest
0 голосов
/ 04 апреля 2019

Я использую функции firebase и firestore для отправки push-уведомлений. Функция работает нормально, когда база данных firestore изменена, и она даже говорит, что сообщение было успешно отправлено Но мое устройство не получает сообщение, когда оно находится в фоновом режиме или на переднем плане.

Я убедился, что регистрационный токен правильный. .P12 для производства и разработки включены в проект.

В функции didfinishlaunchingwithoptions


Messaging.messaging().delegate = self

InstanceID.instanceID().instanceID { (result, error) in
            if let error = error {
                print("Error fetching remote instance ID: \(error)")
            } else if let result = result {

                let token = result.token

                let db = Firestore.firestore()

                if let driverID = UserDefaults.standard.string(forKey: "driverID"){

                    db.collection("drivers").document(driverID).updateData(["registrationToken":token])

                }

            }

        }

И метод получения делегата для получения регистрации

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {

        print("Firebase registration token: \(fcmToken)")

        let dataDict:[String: String] = ["token": fcmToken]
        NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)

        let db = Firestore.firestore()

        if let driverID = UserDefaults.standard.string(forKey: "driverID"){

            db.collection("drivers").document(driverID).updateData(["registrationToken":fcmToken])

        }

    }

и, наконец, функция, развернутая в firebase

В целях отладки я скопировал вставленный TOKEN вместо получения его из базы данных.

exports.sendDispatchedNotification = functions.firestore.document('/dispatching/{cityID}/{dateID}/trips/uncomplete/{tripID}')
    .onUpdate(async (change) => {

      const payload = {
        notification: {
          title: 'Trip Ready',
          body: 'There is a trip ready for you to start.'
        }
      }

      admin.messaging().sendToDevice("TOKEN", payload)
        .then(response => {
          console.log("successfully sent message:", response)
          return
        })
        .catch(error => {
          console.log("Error sending message:", error);
        })

    })

Он записывает «успешно отправленное сообщение:» совершенно нормально, но мое устройство не получает сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...