Android
Firebase Cloud Messaging
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
Ukończ część Instalacja i konfiguracja, aby połączyć aplikację z Firebase.
Spowoduje to utworzenie projektu w Firebase.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");