Ricerca…


introduzione

Firebase Cloud Messaging (FCM) è una soluzione di messaggistica multipiattaforma che ti consente di consegnare i messaggi in modo affidabile senza alcun costo.

Utilizzando FCM, è possibile notificare a un'app client che sono disponibili nuove e-mail o altri dati da sincronizzare. È possibile inviare messaggi di notifica per guidare il riutilizzo e la fidelizzazione degli utenti. Per casi d'uso come la messaggistica istantanea, un messaggio può trasferire un carico utile fino a 4KB in un'app client.

Configurare un'app client di messaggistica cloud Firebase su Android

  1. Completa la parte Installazione e configurazione per collegare la tua app a Firebase.
    Questo creerà il progetto in Firebase.

  2. Aggiungi la dipendenza per Firebase Cloud Messaging al tuo file build.gradle livello di build.gradle :

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

Ora sei pronto per lavorare con FCM in Android.

I client FCM richiedono dispositivi con Android 2.3 o versioni successive con installata l'app Google Play Store o un emulatore con Android 2.3 con API Google.

Modifica il tuo file 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>

Token di registrazione

All'avvio iniziale della tua app, l'SDK di FCM genera un token di registrazione per l'istanza dell'app client.
Se si desidera scegliere come target singoli dispositivi o creare gruppi di dispositivi, è necessario accedere a questo token estendendo FirebaseInstanceIdService .

Il callback onTokenRefresh ogni volta che viene generato un nuovo token ed è possibile utilizzare il metodo FirebaseInstanceID.getToken() per recuperare il token corrente.

Esempio:

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);

    }

}

Questo è il mio 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; 
 
    } 
}} 

E questo è MainActivity per aprire il link nella mia WebView o altro depanditore del browser in base alle tue esigenze tramite intenti.

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();
    }} 

Ricevi messaggi

Per ricevere messaggi, utilizzare un servizio che estenda FirebaseMessagingService e sovrascrivi il metodo 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());
        }

        //.....
    }

Quando l'app è in background, Android indirizza i messaggi di notifica alla barra delle applicazioni. Un utente che tocca la notifica apre l'avvio dell'app per impostazione predefinita.

Ciò include i messaggi che contengono sia la notifica che il carico utile dei dati (e tutti i messaggi inviati dalla console delle notifiche). In questi casi, la notifica viene inviata alla barra delle applicazioni del dispositivo e il carico di dati viene consegnato negli extra dell'intento dell'attività di avvio.

Ecco un breve riassunto:

Stato dell'app Notifica Dati Tutti e due
Primo piano onMessageReceived onMessageReceived onMessageReceived
sfondo Area di notifica onMessageReceived Notifica: vassoio di sistema
Dati: in extra dell'intento.

Iscriviti a un argomento

Le app client possono iscriversi a qualsiasi argomento esistente oppure possono creare un nuovo argomento. Quando un'app client si iscrive a un nuovo nome di argomento, in FCM viene creato un nuovo argomento di tale nome e qualsiasi client può successivamente sottoscriverlo.

Per iscriverti a un argomento usa il metodo subscribeToTopic() specificando il nome dell'argomento:

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow