Lors de l'envoi d'une notification réussie via Cloud Functions for Firebase, la notification n'est pas affichée en tant que notification push sur le périphérique ios. J'ai trouvé quelques problèmes similaires, mais aucun ne présente de solution claire.Fonction Cloud pour Firebase sendToDevice ne s'affiche pas en tant que notification sur ios
fonction nuage:
exports.sendInitialNotification = functions.database.ref('branches/{branchId}/notifications/{notifId}').onWrite(event => {
const data = event.data.val()
if (data.finished) return
const tokens = []
const notifId = event.params.notifId
const getPayload = admin.database().ref(`notifications/${notifId}`).once('value').then(snapshot => {
const notif = snapshot.val()
const payload = {
notification: {
title: notif.title,
body: notif.message,
},
data: {
'title': notif.title,
'message': notif.message,
'id': String(notif.id),
}
}
if (notif.actions) {
payload.data['actions'] = JSON.stringify(notif.actions)
}
console.log('payload:', payload)
return payload
}, (error) => {
console.log('error at sendInitialNotification getPayload():', error)
})
const getTokens = admin.database().ref(`notifications/${notifId}/users`).once('value').then(snapshot => {
const users = snapshot.forEach((data) => {
let promise = admin.database().ref(`users/${data.key}/profile/deviceToken`).once('value').then(snap => {
if (tokens.indexOf(snap.val()) !== -1 || !snap.val()) return
return snap.val()
}, (error) => {
console.log('error retrieving tokens:', error)
})
tokens.push(promise)
})
return Promise.all(tokens)
}, (error) => {
console.log('error at sendInitialNotification getTokens()', error)
}).then((values) => {
console.log('tokens:', values)
return values
})
return Promise.all([getTokens, getPayload]).then(results => {
const tokens = results[0]
const payload = results[1]
if (payload.actions) {
payload.actions = JSON.stringify(payload.actions)
}
const options = {
priority: "high",
}
admin.messaging().sendToDevice(tokens, payload, options)
.then(response => {
data.finished = true
admin.database().ref(`notifications/${notifId}`).update({success: true, successCount: response.successCount})
console.log('successfully sent message', response)
}).catch(error => {
data.finished = true
admin.database().ref(`notifications/${notifId}`).update({success: false, error: error})
console.log('error sending message:', error)
})
})
})
... et les journaux dans la console firebase:
successfully sent message { results: [ { error: [Object] } ],
canonicalRegistrationTokenCount: 0, failureCount: 1, successCount: 0, multicastId: 7961281827678412000 }tokens: [ 'eS_Gv0FrMC4:APA91bEBk7P1lz...' ]
payload: { notification: { title: 'test07', body: 'test07' }, data: { title: 'test07', message: 'test07', id: '1502383526361' } }
... mais hélas aucune notification indiquée sur iphone. Je suis sûr qu'il me manque quelque chose le long de l'OOO (ordre des opérations) ici, mais je ne sais pas où est le problème. Si quelqu'un peut signaler mon défaut s'il vous plaît n'hésitez pas à châtier publiquement.
Comme toujours merci d'avance et toute direction est appréciée!
Merci pour le ménage ... Le complément d'enquête cela semble être associé au toujours plus en popularité: «certificat de APNs non valide Vérifiez le certificat dans les paramètres ». J'ai créé et téléchargé une nouvelle clé via: APNs Authentication Key, comme indiqué dans les documents, mais toujours voir l'erreur sur chaque notification envoyée ... À perte! – studiobrain
Bonjour studiobrain. Avez-vous essayé d'envoyer une notification de test simole via [Facteur] (https://stackoverflow.com/documentation/firebase-cloud-messaging/8242/firebase-cloud-messaging/26577/sending-downstream-messages-using-postman#t = 201701200926242458096) et voir si cela fonctionne à partir de là? Cela pourrait vous donner un meilleur message d'erreur. –
J'ai. Le problème que je voyais était dû à l'ID de domaine inverse dans xcode ne correspond pas à ce qui était dans Firebase. Il fonctionne maintenant. – studiobrain