0

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!

+0

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

+0

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. –

+1

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

Répondre

0

Le problème que je voyais était dû à l'ID de domaine inverse dans xcode ne correspond pas à ce qui était dans la base de données incendie.

Typo