Recherche…


Introduction

Firebase Cloud Messaging (FCM) est une solution de messagerie multiplate-forme qui vous permet de diffuser des messages de manière fiable et sans frais.

En utilisant FCM, vous pouvez notifier à une application cliente qu'un nouvel email ou d'autres données sont disponibles pour la synchronisation. Vous pouvez envoyer des messages de notification pour activer le réengagement et la rétention des utilisateurs. Pour les cas d'utilisation tels que la messagerie instantanée, un message peut transférer jusqu'à 4 4KB de charge utile vers une application client.

Configurer une application client Firebase Cloud Messaging sur Android

  1. Complétez la partie Installation et configuration pour connecter votre application à Firebase.
    Cela créera le projet dans Firebase.

  2. Ajoutez la dépendance de Firebase Cloud Messaging à votre fichier build.gradle niveau du build.gradle :

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

Vous êtes maintenant prêt à travailler avec le FCM sous Android.

Les clients FCM nécessitent des périphériques exécutant Android 2.3 ou version ultérieure, ainsi que l'application Google Play Store ou un émulateur exécutant Android 2.3 avec les API Google.

Modifier votre fichier AndroidManifest.xml

<service
    android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

<service
    android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

Jeton d'inscription

Au démarrage initial de votre application, le kit SDK FCM génère un jeton d'enregistrement pour l'instance d'application cliente.
Si vous souhaitez cibler des périphériques uniques ou créer des groupes de périphériques, vous devez accéder à ce jeton en étendant FirebaseInstanceIdService .

Le rappel onTokenRefresh déclenche chaque fois qu'un nouveau jeton est généré et vous pouvez utiliser la méthode FirebaseInstanceID.getToken() pour récupérer le jeton actuel.

Exemple:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

   /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the InstanceID token
     * is initially generated so this is where you would retrieve the token.
     */

    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);

    }

}

Ce code que j'ai implanté dans mon application pour repousser l'image, le message et aussi le lien pour ouvrir dans votre webView

Ceci est mon FirebaseMessagingService

    public class MyFirebaseMessagingService extends FirebaseMessagingService { 
Bitmap bitmap;
@Override 
public void onMessageReceived(RemoteMessage remoteMessage) {
    String message = remoteMessage.getData().get("message");
    //imageUri will contain URL of the image to be displayed with Notification 
    String imageUri = remoteMessage.getData().get("image");
    String link=remoteMessage.getData().get("link");
 
    //To get a Bitmap image from the URL received 
    bitmap = getBitmapfromUrl(imageUri);
    sendNotification(message, bitmap,link);
 
} 
 
 
/** 
 * Create and show a simple notification containing the received FCM message. 
 */ 
 
private void sendNotification(String messageBody, Bitmap image, String link) {
    Intent intent = new Intent(this, NewsListActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("LINK",link);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);
    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setLargeIcon(image)/*Notification icon image*/
            .setSmallIcon(R.drawable.hindi)
            .setContentTitle(messageBody)
            .setStyle(new NotificationCompat.BigPictureStyle()
                    .bigPicture(image))/*Notification with Image*/
            .setAutoCancel(true) 
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);
    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
 
    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
} 
public Bitmap getBitmapfromUrl(String imageUrl) {
    try { 
        URL url = new URL(imageUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap bitmap = BitmapFactory.decodeStream(input);
        return bitmap;
 
    } catch (Exception e) {
        // TODO Auto-generated catch block 
        e.printStackTrace();
        return null; 
 
    } 
}} 

Et ceci est MainActivity pour ouvrir le lien dans mon WebView ou autre navigateur dépand sur vos besoins par le biais d'intents.

if (getIntent().getExtras() != null) {
    if (getIntent().getStringExtra("LINK")!=null) {
        Intent i=new Intent(this,BrowserActivity.class);
        i.putExtra("link",getIntent().getStringExtra("LINK"));
        i.putExtra("PUSH","yes");
        NewsListActivity.this.startActivity(i);
        finish();
    }} 

Recevoir des messages

Pour recevoir des messages, utilisez un service qui étend FirebaseMessagingService et remplacez la méthode onMessageReceived .

public class MyFcmListenerService extends FirebaseMessagingService {
    
    /**
     * Called when message is received.
     *
     * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
     */
    @Override
    public void onMessageReceived(RemoteMessage message) {
        String from = message.getFrom();

        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
            Map<String, String> data = message.getData();
        }

        // Check if message contains a notification payload.
        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }

        //.....
    }

Lorsque l'application est en arrière-plan, Android dirige les messages de notification vers la barre d'état système. Un utilisateur touche la notification pour ouvrir le lanceur d’applications par défaut.

Cela inclut les messages contenant à la fois une notification et des données utiles (et tous les messages envoyés depuis la console Notifications). Dans ces cas, la notification est transmise à la barre d'état système du périphérique et la charge de données est fournie dans les extras du but de votre activité de lancement.

Voici un bref récapitulatif:

État App Notification Les données Tous les deux
Premier plan onMessageReceived onMessageReceived onMessageReceived
Contexte Barre d'état système onMessageReceived Notification: barre d'état système
Données: dans les extras de l'intention.

S'abonner à un sujet

Les applications client peuvent s'abonner à tout sujet existant ou créer un nouveau sujet. Lorsqu'une application client s'abonne à un nouveau nom de sujet, un nouveau sujet portant ce nom est créé dans FCM et tout client peut ensuite s'y abonner.

Pour vous abonner à une rubrique, utilisez la méthode subscribeToTopic() spécifiant le nom de la rubrique:

FirebaseMessaging.getInstance().subscribeToTopic("myTopic");


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow