Я использую функции 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);
})
})
Он записывает «успешно отправленное сообщение:» совершенно нормально, но мое устройство не получает сообщение.