Zoeken…


Invoering

Firebase Cloud Messaging (FCM) is een platformonafhankelijke berichtenoplossing waarmee u betrouwbaar en kosteloos berichten kunt afleveren.

Met FCM kunt u een client-app laten weten dat nieuwe e-mail of andere gegevens beschikbaar zijn om te synchroniseren. U kunt meldingsberichten verzenden om de gebruikers opnieuw te betrekken en te behouden. Voor gebruikssituaties zoals instant messaging, kan een bericht een nuttige lading van maximaal 4KB overbrengen naar een client-app.

Stel een Firebase Cloud Messaging Client-app op Android in

  1. Voltooi het gedeelte Installatie en instellingen om uw app te verbinden met Firebase.
    Hiermee wordt het project in Firebase gemaakt.

  2. Voeg de afhankelijkheid voor Firebase Cloud Messaging toe aan uw build.gradle bestand op build.gradle :

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

Nu bent u klaar om te werken met de FCM in Android.

FCM-clients vereisen apparaten met Android 2.3 of hoger waarop ook de Google Play Store-app is geïnstalleerd, of een emulator met Android 2.3 met Google API's.

Bewerk uw AndroidManifest.xml bestand

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

Registratie token

Bij het eerste opstarten van uw app genereert de FCM SDK een registratietoken voor het exemplaar van de client-app.
Als u afzonderlijke apparaten wilt targeten of apparaatgroepen wilt maken, moet u dit token openen door FirebaseInstanceIdService breiden.

De callback onTokenRefresh wanneer een nieuw token wordt gegenereerd en u kunt de methode FirebaseInstanceID.getToken() gebruiken om het huidige token op te halen.

Voorbeeld:

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

    }

}

Deze code die ik in mijn app heb geïmplementeerd voor het pushen van afbeeldingen, berichten en ook koppelingen voor het openen in uw webView

Dit is mijn 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; 
 
    } 
}} 

En dit is MainActivity om een link in mijn WebView of een andere browser te openen, afhankelijk van uw vereisten via intenties.

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

Ontvang berichten

Om berichten te ontvangen, gebruikt u een service die FirebaseMessagingService uitbreidt en de methode onMessageReceived overschrijft.

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

        //.....
    }

Wanneer de app op de achtergrond staat, stuurt Android meldingsberichten naar het systeemvak. Een gebruiker die op de melding tikt, opent standaard het app-opstartprogramma.

Dit omvat berichten die zowel meldingen als gegevens bevatten (en alle berichten die worden verzonden vanuit de meldingsconsole). In deze gevallen wordt de melding bezorgd in het systeemvak van het apparaat en wordt de gegevensbelasting geleverd in de extra's van de intentie van uw opstartactiviteit.

Hier een korte samenvatting:

App-status Kennisgeving Gegevens Beide
Voorgrond onMessageReceived onMessageReceived onMessageReceived
Achtergrond Systeemvak onMessageReceived Kennisgeving: systeemvak
Data: extra's van de intentie.

Abonneer je op een onderwerp

Client-apps kunnen zich abonneren op elk bestaand onderwerp of ze kunnen een nieuw onderwerp maken. Wanneer een client-app zich abonneert op een nieuwe onderwerpnaam, wordt een nieuw onderwerp met die naam gemaakt in FCM en kan elke client zich daarop abonneren.

Gebruik de methode subscribeToTopic() om de onderwerpnaam op te geven:

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow