web-dev-qa-db-fra.com

Comment spécifier Android canal de notification pour les messages Push FCM dans Android 8

Notre application a maintenant targetSdkVersion 26 (Android 8) et l'application utilise les notifications FCM Push.

Comme documentation FCM prescrit, j'ai mis à jour la bibliothèque client FCM vers la version 11.2.0:

dependencies {
     compile 'com.google.firebase:firebase-messaging:11.2.0'
}

Avec cette mise à jour de la bibliothèque client FCM, les notifications FCM ont commencé à apparaître sur les appareils Android. Bien, mais lorsque l'application est en arrière-plan, c'est le système qui traite le message FCM, donc il utilise la valeur par défaut Android canal de notification nommé "Divers", ce qui n'est pas ce que nous voulons (nous avons d'autres canaux de notification et des sons "Divers" prêtant à confusion dans cette liste).

Comme documentation FCM dit qu'il existe un moyen de spécifier le canal de notification par défaut pour les messages FCM:

(Facultatif) Dans le composant d'application, éléments de métadonnées pour définir une icône par défaut, une couleur et un canal de notification (nouveau dans Android = O) pour les notifications. Android utilise ces valeurs chaque fois que les messages entrants ne définissent pas explicitement l'icône, la couleur ou notification_channel .

Cependant, aucun exemple de code n'est affiché (les exemples sont affichés uniquement pour l'icône et la couleur). Je viens donc de trouver en googlant un échantillon dans Firebase Cloud Messaging Quickstart sur github:

<meta-data
    Android:name="com.google.firebase.messaging.default_notification_channel"
    Android:value="@string/default_notification_channel_id"/>

Mais cela ne fonctionne pas - les notifications FCM apparaissent toujours dans le canal "Divers". Et je vois dans les journaux:

W/FirebaseMessaging: métadonnées manquantes du canal de notification par défaut dans AndroidManifest. La valeur par défaut sera utilisée.

Bien sûr, j'ai essayé de réinstaller l'application. J'ai toujours le problème.

Eh bien, idéalement, il devrait y avoir un moyen de spécifier des canaux de notification sur le back-end au moment de l'envoi des messages. La console de développement FCM, qui permet de tester l'envoi, dispose désormais d'une telle option dans l'interface utilisateur:

enter image description here

Et ça marche bien. Cependant, notre back-end utilise Java API Amazon SNS et je n'ai aucune idée si cette API permet de spécifier Android canal de notification lors de l'envoi d'un message (car il ' une nouvelle Android, et Amazon a besoin de temps pour l'adopter). Ainsi, définir un canal de notification par défaut dans AndroidManifest.xml serait une solution de contournement valide pour l'instant, mais cela ne fonctionne pas.

12
Vit Khudenko

Regardez les documents: https://firebase.google.com/docs/cloud-messaging/http-server-ref

Android_channel_id L'ID du canal de la notification (nouveau dans Android O).

L'application doit créer un canal avec cet ID avant de recevoir une notification avec cette clé.

Si vous n'envoyez pas cette clé dans la demande, ou si l'ID de canal fourni n'a pas encore été créé par votre application, FCM utilise l'ID de canal spécifié dans le manifeste de votre application.

Essayez d'inclure Android_channel_id dans json, vous allez publier sur fcm. Je n'ai aucune idée pourquoi la valeur manifeste ne fonctionne pas pour vous. Essayez d'ajouter simplement un canal à votre demande, vous devriez obtenir le même effet que depuis la console Firebase.

Edit: Je viens de réaliser que vous demandez l'intégration du client Amazon. Peut-être que vous pouvez alors créer une demande json manuellement (je ne sais pas grand-chose sur les services Amazon, désolé).

9
user1209216