Android
Firebase Cloud Messaging
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
Slutför installations- och installationsdelen för att ansluta din app till Firebase.
Detta skapar projektet i Firebase.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");