Szukaj…


Wprowadzenie

Firebase Cloud Messaging (FCM) to wieloplatformowe rozwiązanie do przesyłania wiadomości, które umożliwia niezawodne dostarczanie wiadomości bez żadnych kosztów.

Za pomocą FCM możesz powiadomić aplikację kliencką, że nowa wiadomość e-mail lub inne dane są dostępne do synchronizacji. Możesz wysyłać powiadomienia, aby zwiększyć zaangażowanie użytkowników i ich utrzymanie. W przypadkach użycia, takich jak wiadomości błyskawiczne, wiadomość może przenieść do aplikacji klienckiej ładunek o wielkości do 4KB .

Skonfiguruj aplikację Firebase Cloud Messaging Client na Androida

  1. Ukończ część Instalacja i konfiguracja, aby połączyć aplikację z Firebase.
    Spowoduje to utworzenie projektu w Firebase.

  2. Dodaj zależność dla Firebase Cloud Messaging do pliku build.gradle poziomie modułu:

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

Teraz jesteś gotowy do pracy z FCM w systemie Android.

Klienci FCM wymagają urządzeń z Android 2.3 lub nowszym, które mają również zainstalowaną aplikację Sklep Google Play lub emulatora z Androidem 2.3 z interfejsami API Google.

Edytuj plik 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 rejestracyjny

Przy pierwszym uruchomieniu aplikacji zestaw FCM SDK generuje token rejestracyjny dla instancji aplikacji klienckiej.
Jeśli chcesz kierować reklamy na pojedyncze urządzenia lub tworzyć grupy urządzeń, musisz uzyskać dostęp do tego tokena, rozszerzając FirebaseInstanceIdService .

onTokenRefresh zwrotne onTokenRefresh uruchamiane za każdym razem, gdy generowany jest nowy token, i można użyć metody FirebaseInstanceID.getToken() aby pobrać bieżący token.

Przykład:

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

    }

}

Ten kod, który wdrożyłem w mojej aplikacji do przesyłania obrazu, wiadomości, a także linku do otwierania w twoim webView

To jest moja 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; 
 
    } 
}} 

I to jest MainActivity, aby otworzyć link w moim WebView lub innej przeglądarce zależnie od twoich wymagań poprzez zamiary.

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

Odbieraj wiadomości

Aby odbierać wiadomości, skorzystaj z usługi rozszerzającej FirebaseMessagingService i zastąp metodę 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());
        }

        //.....
    }

Gdy aplikacja działa w tle, system Android kieruje powiadomienia do paska zadań. Stuknięcie powiadomienia przez użytkownika domyślnie otwiera program uruchamiający aplikacje.

Obejmuje to wiadomości zawierające zarówno powiadomienia, jak i ładunek danych (oraz wszystkie wiadomości wysyłane z konsoli powiadomień). W takich przypadkach powiadomienie jest dostarczane do zasobnika systemowego urządzenia, a ładunek danych jest dostarczany jako dodatek do celu działania programu uruchamiającego.

Oto krótkie podsumowanie:

Stan aplikacji Powiadomienie Dane Obie
Pierwszoplanowy onMessageReceived onMessageReceived onMessageReceived
tło Taca systemowa onMessageReceived Powiadomienie: taca systemowa
Dane: zgodnie z intencją.

Subskrybuj temat

Aplikacje klienckie mogą zasubskrybować dowolny istniejący temat lub mogą utworzyć nowy temat. Gdy aplikacja kliencka subskrybuje nową nazwę tematu, w FCM tworzony jest nowy temat o tej nazwie, a następnie dowolny klient może go subskrybować.

Aby zasubskrybować temat, użyj metody subscribeToTopic() określającej nazwę tematu:

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow