Suche…


Einführung

Firebase Cloud Messaging (FCM) ist eine plattformübergreifende Messaging-Lösung, mit der Sie Nachrichten zuverlässig und kostenlos versenden können.

Mit FCM können Sie eine Client-App darüber informieren, dass neue E-Mails oder andere Daten zur Synchronisierung verfügbar sind. Sie können Benachrichtigungsnachrichten senden, um den Wiedereinstieg und die Aufbewahrung von Benutzern zu fördern. Für Anwendungsfälle wie Instant Messaging kann eine Nachricht eine Nutzlast von bis zu 4KB an eine Client-App übertragen.

Einrichten einer Firebase Cloud Messaging Client-App auf Android

  1. Schließen Sie den Installations- und Setup-Teil ab , um Ihre App mit Firebase zu verbinden.
    Dadurch wird das Projekt in Firebase erstellt.

  2. Fügen Sie der build.gradle Datei auf Modulebene die Abhängigkeit für Firebase Cloud Messaging build.gradle :

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

Jetzt können Sie mit dem FCM in Android arbeiten.

FCM-Clients erfordern Geräte mit Android 2.3 oder höher, auf denen auch die Google Play Store-App installiert ist, oder einen Emulator, auf dem Android 2.3 mit Google-APIs ausgeführt wird.

Bearbeiten Sie Ihre AndroidManifest.xml Datei

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

Registrierungs-Token

Beim ersten Start Ihrer App generiert das FCM-SDK ein Registrierungstoken für die Instanz der Clientanwendung.
Wenn Sie auf einzelne Geräte abzielen oder Gerätegruppen erstellen möchten, müssen Sie auf dieses Token zugreifen, indem Sie FirebaseInstanceIdService .

Der Callback von onTokenRefresh wird immer dann onTokenRefresh wenn ein neues Token generiert wird. Sie können die Methode FirebaseInstanceID.getToken() , um das aktuelle Token abzurufen.

Beispiel:

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

    }

}

Dies ist mein 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; 
 
    } 
}} 

Dies ist MainActivity, um den Link in meinem WebView oder einem anderen Browser zu öffnen, der von Ihren Anforderungen abhängt.

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

Nachrichten erhalten

Verwenden Sie zum Empfangen von Nachrichten einen Dienst, der FirebaseMessagingService und überschreiben Sie die onMessageReceived Methode.

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

        //.....
    }

Wenn sich die App im Hintergrund befindet, leitet Android Benachrichtigungen in die Taskleiste. Ein Benutzer, der auf die Benachrichtigung tippt, öffnet standardmäßig das App-Startprogramm.

Dies umfasst Nachrichten, die sowohl Benachrichtigung als auch Datennutzlast enthalten (und alle von der Benachrichtigungskonsole gesendeten Nachrichten). In diesen Fällen wird die Benachrichtigung an die Systemablage des Geräts gesendet, und die Datennutzlast wird in den Extras der Absicht Ihrer Starteraktivität geliefert.

Hier ein kurzer Rückblick:

App-Status Benachrichtigung Daten Beide
Vordergrund onMessageReceived onMessageReceived onMessageReceived
Hintergrund System Tray onMessageReceived Benachrichtigung: Taskleiste
Daten: in Extras der Absicht.

Abonnieren Sie ein Thema

Client-Apps können ein beliebiges vorhandenes Thema abonnieren oder ein neues Thema erstellen. Wenn eine Client-App einen neuen Themennamen abonniert, wird ein neues Thema mit diesem Namen in FCM erstellt, und jeder Client kann ihn anschließend abonnieren.

Verwenden Sie zum subscribeToTopic() eines Themas die subscribeToTopic() Methode, die den Themennamen angibt:

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow