web-dev-qa-db-fra.com

Notifications Push Firebase FCM silencieuses pour iOS

J'ai un problème avec les notifications silencieuses sur iOS.

Lorsque ma demande est en arrière-plan, je ne reçois pas de notification silencieuse envoyée par FCM. Mais si j'essaie d'envoyer directement à APNS, la notification est reçue avec succès.

Voici le JSON envoyé à FCM:

{ 
"to" : "<token>",
"priority": "high",
"content_available": true,
"data" : {
  "<key>" : "<string>",
  "<key2>" : "<string>"
}

}

Voici le JSON envoyé directement à APNS:

{
  "aps": {
    "content-available": 1
  },
  "<key>": "<string>",
  "<key>": "<string>"
}

J'ai déjà essayé de supprimer la clé "Priority" car j'ai vu quelqu'un dire que je ne devrais pas définir la priorité si "content_available" est déjà défini. Ça n'a pas marché.

  1. J'ai "Push Notifications" activé dans XCode> Capabilities.
  2. J'ai "Notifications à distance" vérifié dans les modes d'arrière-plan dans XCode> Capacités.
  3. Les notifications FCM fonctionnent correctement lorsque l'application est au premier plan et parfois lorsque l'application est en arrière-plan.
14
vladiulianbogdan

Supprimer "notification" paire de valeurs clés et ajouter "content_available": true

Il ressemblera à ceci

{ 
    "to" : "...",
    "priority": "high",
    "content_available": true,
    "data" : {
      ....
    }
}

Cela devrait en faire un APNS silencieux et vous devez le gérer avec la méthode déléguée APNS correspondante.

Vous devrez gérer cela par le biais des délégués Reportez-vous à cette documentation Firebase pour plus de détails: https://firebase.google.com/docs/cloud-messaging/concept-options

15
Alap Anerao

J'ai trouvé une solution de contournement. J'ai mis une valeur vide pour "son" dans le champ "notification" et les notifications silencieuses sont livrées même lorsque l'application est en arrière-plan.

{ 
    "to" : "...",
    "priority": "high",
    "notification": {
        "sound": ""
    },
    "data" : {
      ....
    }
}

Mon intuition est que Apple ne permet pas les notifications silencieuses avec une priorité "élevée" et en quelque sorte "notification": {"sound": ""} trompe l'APNS que cette notification n'est pas silencieuse .

3
vladiulianbogdan

Je travaillais sur la notification Push Firebase silencieuse en utilisant nodejs. Lorsque j'ai essayé le code ci-dessous, cela fonctionnait bien. Lorsque j'ajoutais "priorité": "élevé" et "contenu_disponible": vrai, cela donnait l'erreur ci-dessous.

Travaillé sous le code

const admin = require('firebase-admin');
const serviceAccount ="...."; //service account path
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

let  fcmToken = "...."; // Your token
let message ={
    "token": fcmToken,
    "data": {
        "updateApi": "activity"
    }
} 

admin.messaging().send(message)
  .then((response) =>{
    console.log('Successfully sent notification:', response);
})
  .catch((error) =>{
    console.log('Error while sending notification:', error);
});

Erreur lorsque j'ai ajouté les priorité et content_available dans l'objet message

{ code: 'messaging/invalid-argument',
     message: 'Invalid JSON payload received. Unknown name "priority" at \'message\': Cannot find field.\nInvalid JSON payload received. Unknown name "content_available" at \'message\': Cannot find field.' },
  codePrefix: 'messaging' }
1
Priy Ranjan