Sök…


Introduktion

Firebase Cloud Messaging (FCM) är en plattformsmeddelandelösning som låter dig tillförlitligt leverera meddelanden utan kostnad.

Med FCM kan du meddela en klientapp att ny e-post eller annan data är tillgänglig för att synkronisera. Du kan skicka meddelandemeddelanden för att driva återanvändning och behållning av användare. För användningsfall som snabbmeddelanden kan ett meddelande överföra en nyttolast på upp till 4 4KB till en klientapp.

Ställ in en Firebase Cloud Messaging Client-app på Android

  1. Slutför installations- och installationsdelen för att ansluta din app till Firebase.
    Detta skapar projektet i Firebase.

  2. Lägg till beroendet för Firebase Cloud Messaging till din build.gradle fil på build.gradle :

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

Nu är du redo att arbeta med FCM i Android.

FCM-klienter kräver enheter med Android 2.3 eller högre som också har appen Google Play Store installerad, eller en emulator som kör Android 2.3 med Google API: er.

Redigera din AndroidManifest.xml fil

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

Registreringstoken

Vid första starten av din app genererar FCM SDK ett registreringsnummer för klientapp-instansen.
Om du vill rikta in dig på enskilda enheter eller skapa enhetsgrupper måste du komma åt detta token genom att utöka FirebaseInstanceIdService .

onTokenRefresh återuppringning avfyras när ett nytt token genereras och du kan använda metoden FirebaseInstanceID.getToken() att hämta det aktuella tokenet.

Exempel:

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

    }

}

Den här koden som jag har infört i min app för att trycka på bild, meddelande och även länk för att öppna i din webView

Det här är min 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; 
 
    } 
}} 

Och det här är MainActivity för att öppna länken i min WebView eller annan webbläsare och kräva allt från ditt krav.

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

Få meddelanden

För att ta emot meddelanden använder du en tjänst som utvidgar FirebaseMessagingService och åsidosätter metoden 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());
        }

        //.....
    }

När appen är i bakgrunden, skickar Android meddelanden till systemfältet. Ett användarknapp på meddelandet öppnar appstarteren som standard.

Detta inkluderar meddelanden som innehåller både meddelande och datalast (och alla meddelanden som skickas från meddelandekonsolen). I dessa fall levereras meddelandet till enhetens systemfält och datalasten levereras i tillägg till avsikten med din startaktivitet.

Här en kort sammanfattning:

App-tillstånd Underrättelse Data Både
Förgrund onMessageReceived onMessageReceived onMessageReceived
Bakgrund Systemfältet onMessageReceived Meddelande: systemfält
Data: tillägg till avsikten.

Prenumerera på ett ämne

Klientappar kan prenumerera på alla befintliga ämnen, eller de kan skapa ett nytt ämne. När en klientapp prenumererar på ett nytt ämnesnamn skapas ett nytt ämne med det namnet i FCM och varje klient kan därefter prenumerera på det.

För att prenumerera på ett ämne använder du subscribeToTopic() -metoden som anger ämnesnamnet:

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow