Firebase Cloud Mesajı ile bildirim.

Firebase Cloud Messaging

FCM ve PHP kullanarak Android Push Bildirimleri

Son zamanlarda, Google, Google Cloud Messaging’den (GCM) Firebase Cloud Messaging’e ( FCM ) geçti. GCM gibi, FCM de mesaj göndermenizi sağlayan çapraz platformlu bir mesajlaşma çözümüdür. FCM tamamen ücretsizdir ve sınırlama yoktur.

GCM hakkındaki önceki eğitimlerimden herhangi birini takip ettiyseniz , bugün Firebase’e geçmenizi şiddetle tavsiye ederim. Bu yazıda basit bir uygulama oluşturarak firebase bulut mesajlaşma özelliklerini öğreniyoruz. Mesajları sunucunuzdan gönderebilmeniz için firebase’i arka uçlarınıza nasıl entegre edeceğinizi de öğreneceğiz.

Frebase mesaj tipleri

Freebase cloud messaging hem veri gönderimine olanak sağlıyor hemde bildirim mesajı gönderebiliyorsunuz. Dilerseniz ikisini birden yapabiliyorsunuz.

Bildirim Mesajı

Bildirim mesajları firebase SDK’nın kendisi tarafından yönetilir. Tipik olarak mesaj içeriği, mesaj başlığı, resim vb. içerikler gönderebilir. Uygulama kapalı veya arka plan durumundayken bildirim kendiliğinden görüntülenir. Extra bir çaba sarfetmemize gerek kalmamaktadır.

Bildirim mesajı göndermek için, kson verilerinde bildirim anahtarını kullanmamız gerekmektedir.

{
    "to": "e1w6hEbZn-8:APA91bEUIb2JewYCIiApsMu5JfI5Ak...",
    "notification": {
        "body": "İndirim var!",
        "title": "Size özel ürünler %50 indirimli.",
        "icon": "appicon"
    }
}

Veri mesajı:

Veri mesajları android uygulaması tarafından derlenmelidir. Bildirim ile birlikte bazı ek veriler göndermek istiyorsanız, veri mesajları ideal kullanıma sahiptir. Ancak veri mesajları firebase konsolu üzerinden göndermek mümkün değildir. Frebase API kullanarak bildirimi göndermek için sunucuya derlediğiniz kodları kullanmanız gerekmektedir.

{
   "to" : "e1w6hEbZn-8:APA91bEUIb2JewYCIiApsMu5JfI5Ak...",
   "data" : {
     "name" : "Samsun A30 piyasada",
     "product_id" : "123",
     "final_price" : "2500"
   }
 }

Hem bildirim hemde veri barındıran bildirimler.

Bir bildirim hem mesaj hemde veri barındırabilir. Bu tür mesajlar iki senaryoda birleşirler.

Arka plandayken

Uygulamalar bildirim tepesinnde bildirimi gösterirler. Veri ancak o bildirim ile etkileşime geçildiğinde telefona indirilir.

Ön plandayken

Uygulama her daim veriyi ve mesajı indirir.

{
    "to" : "e1w6hEbZn-8:APA91bEUIb2JewYCIiApsMu5JfI5Ak...",
    "notification": {
        "body": "Cool offers. Get them before expiring!",
        "title": "Flat 80% discount",
        "icon": "appicon"
    },
    "data" : {
     "name" : "LG LED TV S15",
     "product_id" : "123",
     "final_price" : "2500"
   }
}

Mesaj Hedefleme

Firebase kullanarak mesaj gönderirlerken, hedef kitle seçimi yapabilirsiniz. Bir konu adını kullanarak tek bir kullanıcıya veri gönderilebilir. Bir grup için bildirim oluşturabilirsiniz.

Tek kullanıcıya bildirim gönderme işlemi

Tek bir kullanıcıya bildirim göndermek için, göndereceğiniz kullanıcının benzersiz bilgisini json nesnesine eklemek zorundasınız.

{
  "to": "e1w6hEbZn-8:APA91bEUIb2JewYCIiApsMu5JfI5Ak...",
  "data": {
    "message": "This is a Firebase Cloud Messaging Topic Message!",
   }
}

Toplu mesajlaşma

Bu tür mesajlar kullanıcı segmenti belli olduğunda kullanışlıdır. Bu işlemi gerçekleştirmek için tüm kullanıcıların firebase alt yapısına kayıt etmeniz gerekmektedir. Haberler ile ilgilenen kullanıcılara mesaj göndermek istediğinizde, haber adında bir konu oluşturabilir ve haber konusuna bildirim gönderebilirsiniz.

{
  "to": "/topics/news",
  "data": {
    "message": "This is a Firebase Cloud Messaging Topic Message!",
   }
}

Firebase kütüphanesi uygulamanıza entegre etmek

1 . Yapmanız gereken ilk şey http://firebase.google.com/ adresine gidip konsoluna erişmek için bir hesap açmak. Konsola girdikten sonra ilk projenizi oluşturarak başlayabilirsiniz.

2 . Firebase’i entegre edeceğiniz projenin paket adını (benimki niximera.firebasenotifications ). Burada uygulama ekle düğmesine bastığınızda google-services.json dosyası indirilecektir.

3 . Android Studio’da Dosya Yeni Proje’den yeni bir proje oluşturun . Proje detaylarını doldururken firebase konsolunda verdiğiniz aynı paket adını kullanın. niximera.firebasenotifications proje ismini kullanıyorum .

4 . Google-services.json dosyasını projenizin  uygulama  klasörüne  yapıştırın. Bu adım, projeniz bu dosya olmadan build edilemeyeceğinden çok önemlidir.

5 . Şimdi projenin ana dizininde bulunan build.gradle dosyasını açın ve firebase bağımlılığı ekleyin.

build.gradle
dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0-rc1'
        classpath 'com.google.gms:google-services:3.0.0'
    }

6 . App / build.gradle dosyasını açın ve firebase mesajlaşma bağımlılığı ekleyin . Dosyanın en altına, uygulama eklentisi ekleyin : ‘com.google.gms.google-services’

App / build.gradle
dependencies {
    compile 'com.google.firebase:firebase-messaging:9.6.0'
}
 
apply plugin: 'com.google.gms.google-services'

7. Bir mp3 dosyası bulun ve res-raw klasörüne yerleştirin. Bu adım isteğe bağlıdır, ancak bildirim alındığında özel bir bildirim sesi çalmak istiyorsanız bu işlem gereklidir.

8. App paketi altında Config.java adlı bir sınıf oluşturun . Bu sınıf, uygulamada kullandığımız tüm sabit değerleri içerir.

Config.java
package niximera.app;
 
public class Config {
 
    public static final String TOPIC_GLOBAL = "global";
 
    public static final String REGISTRATION_COMPLETE = "registrationComplete";
    public static final String PUSH_NOTIFICATION = "pushNotification";
 
    public static final int NOTIFICATION_ID = 100;
    public static final int NOTIFICATION_ID_BIG_IMAGE = 101;
 
    public static final String SHARED_PREF = "ah_firebase";
}

9 . Utils paketi altında NotificationUtils.java adlı bir sınıf oluşturun . Bu sınıf, mesajı (başlık, mesaj, resim ve zaman damgası ile birlikte) bildirim tepsisinde göstermek için gerekli işlevleri içerir.

NotificationUtils.java
package niximera.firebasenotifications.util;
 
import android.app.ActivityManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import android.text.Html;
import android.text.TextUtils;
import android.util.Patterns;
 
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
 
import niximera.firebasenotifications.R;
import niximera.firebasenotifications.app.Config;
 
/**
 * Created by Ravi on 31/03/15.
 */
public class NotificationUtils {
 
    private static String TAG = NotificationUtils.class.getSimpleName();
 
    private Context mContext;
 
    public NotificationUtils(Context mContext) {
        this.mContext = mContext;
    }
 
    public void showNotificationMessage(String title, String message, String timeStamp, Intent intent) {
        showNotificationMessage(title, message, timeStamp, intent, null);
    }
 
    public void showNotificationMessage(final String title, final String message, final String timeStamp, Intent intent, String imageUrl) {
        // Check for empty push message
        if (TextUtils.isEmpty(message))
            return;
 
        final int icon = R.mipmap.ic_launcher;
 
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        final PendingIntent resultPendingIntent =
                PendingIntent.getActivity(
                        mContext,
                        0,
                        intent,
                        PendingIntent.FLAG_CANCEL_CURRENT
                );
 
        final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                mContext);
 
        final Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
                + "://" + mContext.getPackageName() + "/raw/notification");
 
        if (!TextUtils.isEmpty(imageUrl)) {
 
            if (imageUrl != null && imageUrl.length() > 4 && Patterns.WEB_URL.matcher(imageUrl).matches()) {
 
                Bitmap bitmap = getBitmapFromURL(imageUrl);
 
                if (bitmap != null) {
                    showBigNotification(bitmap, mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound);
                } else {
                    showSmallNotification(mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound);
                }
            }
        } else {
            showSmallNotification(mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound);
            playNotificationSound();
        }
    }
 
 
    private void showSmallNotification(NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) {
 
        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
 
        inboxStyle.addLine(message);
 
        Notification notification;
        notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
                .setAutoCancel(true)
                .setContentTitle(title)
                .setContentIntent(resultPendingIntent)
                .setSound(alarmSound)
                .setStyle(inboxStyle)
                .setWhen(getTimeMilliSec(timeStamp))
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
                .setContentText(message)
                .build();
 
        NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(Config.NOTIFICATION_ID, notification);
    }
 
    private void showBigNotification(Bitmap bitmap, NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) {
        NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle();
        bigPictureStyle.setBigContentTitle(title);
        bigPictureStyle.setSummaryText(Html.fromHtml(message).toString());
        bigPictureStyle.bigPicture(bitmap);
        Notification notification;
        notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
                .setAutoCancel(true)
                .setContentTitle(title)
                .setContentIntent(resultPendingIntent)
                .setSound(alarmSound)
                .setStyle(bigPictureStyle)
                .setWhen(getTimeMilliSec(timeStamp))
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
                .setContentText(message)
                .build();
 
        NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(Config.NOTIFICATION_ID_BIG_IMAGE, notification);
    }
 
    public Bitmap getBitmapFromURL(String strURL) {
        try {
            URL url = new URL(strURL);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
 
    public void playNotificationSound() {
        try {
            Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
                    + "://" + mContext.getPackageName() + "/raw/notification");
            Ringtone r = RingtoneManager.getRingtone(mContext, alarmSound);
            r.play();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 

    public static boolean isAppIsInBackground(Context context) {
        boolean isInBackground = true;
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
            List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
            for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
                if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                    for (String activeProcess : processInfo.pkgList) {
                        if (activeProcess.equals(context.getPackageName())) {
                            isInBackground = false;
                        }
                    }
                }
            }
        } else {
            List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
            ComponentName componentInfo = taskInfo.get(0).topActivity;
            if (componentInfo.getPackageName().equals(context.getPackageName())) {
                isInBackground = false;
            }
        }
 
        return isInBackground;
    }
 
    // Clears notification tray messages
    public static void clearNotifications(Context context) {
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancelAll();
    }
 
    public static long getTimeMilliSec(String timeStamp) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date date = format.parse(timeStamp);
            return date.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }
}

10. Servis paketi altında MyFirebaseInstanceIDService.java adlı bir sınıf oluşturun . Bu sınıf, her uygulamaya özel olacak firebase kayıt kimliğini alır. Tek bir cihaza mesaj göndermek istediğinizde bu kayıt kimliği gereklidir. Daha sonra cihazlara bildirim göndermek için bu simgeyi sunucu uygulamanıza gönderebilirsiniz.

firebase kayıt kimliğinde bir değişiklik olduğunda onTokenRefresh () yöntemi çağrılır.

storeRegIdInPref () kayıt kimliğini ortak tercihlerde saklar .

LocalBroadcastManager – Yayın yöneticisi, kayıt kimliğini dinleyen tüm etkinliklere yayınlar.

MyFirebaseInstanceIDService.java
package niximera.firebasenotifications.service;
 
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
 
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;
 
import info.androidhive.firebasenotifications.app.Config;
 

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
    private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName();
 
    @Override
    public void onTokenRefresh() {
        super.onTokenRefresh();
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
 
        storeRegIdInPref(refreshedToken);
        sendRegistrationToServer(refreshedToken);
 
        Intent registrationComplete = new Intent(Config.REGISTRATION_COMPLETE);
        registrationComplete.putExtra("token", refreshedToken);
        LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete);
    }
 
    private void sendRegistrationToServer(final String token) {
        Log.e(TAG, "sendRegistrationToServer: " + token);
    }
 
    private void storeRegIdInPref(String token) {
        SharedPreferences pref = getApplicationContext().getSharedPreferences(Config.SHARED_PREF, 0);
        SharedPreferences.Editor editor = pref.edit();
        editor.putString("regId", token);
        editor.commit();
    }
}

11. Servis paketi altında MyFirebaseMessagingService.java adlı başka bir sınıf oluşturun . Bu sınıf firebase mesajlarını onMessageReceived () metoduna alır.

> Ne zaman bildirim tipi mesajı gönderilir Uygulama arka planda olduğunda, Firebase otomatik bildirim gösterir. Uygulama ön planda ise, handleNotification() yöntemi bildirim iletisini işler.

> Zaman veri tipi mesajı gönderildiğinde, handleDataMessage() metodu ne olursa olsun uygulama durumuna (ön / arka plan) yük işlemek için kullanılır.

LocalBroadcastManager , mesajı yayın alıcısı için kayıtlı tüm etkinliklere yayınlamak için kullanılır.

MyFirebaseMessagingService.java
package niximera.firebasenotifications.service;
 
import android.content.Context;
import android.content.Intent;
import android.support.v4.content.LocalBroadcastManager;
import android.text.TextUtils;
import android.util.Log;
 
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
 
import org.json.JSONException;
import org.json.JSONObject;
 
import niximera.firebasenotifications.activity.MainActivity;
import niximera.firebasenotifications.app.Config;
import niximera.firebasenotifications.util.NotificationUtils;
 
public class MyFirebaseMessagingService extends FirebaseMessagingService {
 
    private static final String TAG = MyFirebaseMessagingService.class.getSimpleName();
 
    private NotificationUtils notificationUtils;
 
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.e(TAG, "From: " + remoteMessage.getFrom());
 
        if (remoteMessage == null)
            return;
 
        if (remoteMessage.getNotification() != null) {
            Log.e(TAG, "Notification Body: " + remoteMessage.getNotification().getBody());
            handleNotification(remoteMessage.getNotification().getBody());
        }
 
        if (remoteMessage.getData().size() > 0) {
            Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());
 
            try {
                JSONObject json = new JSONObject(remoteMessage.getData().toString());
                handleDataMessage(json);
            } catch (Exception e) {
                Log.e(TAG, "Exception: " + e.getMessage());
            }
        }
    }
 
    private void handleNotification(String message) {
        if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) {
            Intent pushNotification = new Intent(Config.PUSH_NOTIFICATION);
            pushNotification.putExtra("message", message);
            LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification);
 
            NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
            notificationUtils.playNotificationSound();
        }
    }
 
    private void handleDataMessage(JSONObject json) {
        Log.e(TAG, "push json: " + json.toString());
 
        try {
            JSONObject data = json.getJSONObject("data");
 
            String title = data.getString("title");
            String message = data.getString("message");
            boolean isBackground = data.getBoolean("is_background");
            String imageUrl = data.getString("image");
            String timestamp = data.getString("timestamp");
            JSONObject payload = data.getJSONObject("payload");
 
            Log.e(TAG, "title: " + title);
            Log.e(TAG, "message: " + message);
            Log.e(TAG, "isBackground: " + isBackground);
            Log.e(TAG, "payload: " + payload.toString());
            Log.e(TAG, "imageUrl: " + imageUrl);
            Log.e(TAG, "timestamp: " + timestamp);
 
 
            if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) {
                Intent pushNotification = new Intent(Config.PUSH_NOTIFICATION);
                pushNotification.putExtra("message", message);
                LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification);
 
                NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
                notificationUtils.playNotificationSound();
            } else {
                Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
                resultIntent.putExtra("message", message);
 
                if (TextUtils.isEmpty(imageUrl)) {
                    showNotificationMessage(getApplicationContext(), title, message, timestamp, resultIntent);
                } else {
                    showNotificationMessageWithBigImage(getApplicationContext(), title, message, timestamp, resultIntent, imageUrl);
                }
            }
        } catch (JSONException e) {
            Log.e(TAG, "Json Exception: " + e.getMessage());
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());
        }
    }
 
    
    private void showNotificationMessage(Context context, String title, String message, String timeStamp, Intent intent) {
        notificationUtils = new NotificationUtils(context);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        notificationUtils.showNotificationMessage(title, message, timeStamp, intent);
    }
 
    
    private void showNotificationMessageWithBigImage(Context context, String title, String message, String timeStamp, Intent intent, String imageUrl) {
        notificationUtils = new NotificationUtils(context);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        notificationUtils.showNotificationMessage(title, message, timeStamp, intent, imageUrl);
    }
}

12. AndroidManifest.xml dosyasını açın ve iki firebase servisini ekleyin MyFirebaseMessagingService ve MyFirebaseInstanceIDService .

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="niximera.firebasenotifications">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".activity.MainActivity"
            android:label="@string/title_main_activity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <!-- Firebase Bildirimleri-->
        <service android:name=".service.MyFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
 
        <service android:name=".service.MyFirebaseInstanceIDService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>
        <!-- ./Firebase Notifications -->
    </application>
</manifest>

13. Son olarak, gelen mesajları ekranda görüntülemek için ana etkinliğimizi değiştirmemiz gerekiyor. Ana aktivite activity_main.xml dosyasını açın ve paftayı aşağıdaki gibi değiştirin.

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="niximera.firebasenotifications.activity.MainActivity">
 
    <TextView
        android:id="@+id/txt_push_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp"
        android:gravity="center_horizontal"
        android:textColor="@color/colorPrimary"
        android:textSize="26dp" />
 
    <TextView
        android:id="@+id/txt_reg_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />
</RelativeLayout>

14. MainActivity.java’yı açın ve gerekli değişiklikleri yapın. Burada onResume() yönteminde yayın alıcılarını kaydediyoruz . Böylece bu aktivite push mesajları ve kayıt kimliği alır.

displayFirebaseRegId() , firebase kayıt kimliğini paylaşılan tercihlerden alır ve ekranda görüntüler. Bu sadece referanslarınız içindir, uygulamanın herhangi bir yerinde reg kimliğini kullanmayız.

Konuya Abone Olma

Herhangi bir konuya abone olmak istediğinizde subscribeToTopic () işlevi kullanılabilir. Bir istemci uygulaması yeni bir konu adına abone olduğunda (Firebase projeniz için halihazırda bulunmayan biri), bu adın yeni bir konusu FCM’de oluşturulur ve herhangi bir müşteri daha sonra abone olabilir.

FirebaseMessaging.getInstance().subscribeToTopic('news');

Konu listesinden çıkmak

Benzer şekilde, müşteri unsubscribeFromTopic () yöntemini çağırarak bir konunun aboneliğini iptal edebilir .

FirebaseMessaging.getInstance().unsubscribeFromTopic('news');
MainActivity.java
package niximera.firebasenotifications.activity;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
 
import com.google.firebase.messaging.FirebaseMessaging;
 
import niximera.firebasenotifications.R;
import niximera.firebasenotifications.app.Config;
import niximera.firebasenotifications.util.NotificationUtils;
 
public class MainActivity extends AppCompatActivity {
 
    private static final String TAG = MainActivity.class.getSimpleName();
    private BroadcastReceiver mRegistrationBroadcastReceiver;
    private TextView txtRegId, txtMessage;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        txtRegId = (TextView) findViewById(R.id.txt_reg_id);
        txtMessage = (TextView) findViewById(R.id.txt_push_message);
 
        mRegistrationBroadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
 
                if (intent.getAction().equals(Config.REGISTRATION_COMPLETE)) {                    
 FirebaseMessaging.getInstance().subscribeToTopic(Config.TOPIC_GLOBAL);
 
                    displayFirebaseRegId();
 
                } else if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) { 
                    String message = intent.getStringExtra("message");
 
                    Toast.makeText(getApplicationContext(), "Push notification: " + message, Toast.LENGTH_LONG).show();
 
                    txtMessage.setText(message);
                }
            }
        };
 
        displayFirebaseRegId();
    }

    private void displayFirebaseRegId() {
        SharedPreferences pref = getApplicationContext().getSharedPreferences(Config.SHARED_PREF, 0);
        String regId = pref.getString("regId", null);
 
        Log.e(TAG, "Firebase reg id: " + regId);
 
        if (!TextUtils.isEmpty(regId))
            txtRegId.setText("Firebase Reg Id: " + regId);
        else
            txtRegId.setText("Firebase Reg Id is not received yet!");
    }
 
    @Override
    protected void onResume() {
        super.onResume();
 
        LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
                new IntentFilter(Config.REGISTRATION_COMPLETE));
        LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
                new IntentFilter(Config.PUSH_NOTIFICATION));
 
        NotificationUtils.clearNotifications(getApplicationContext());
    }
 
    @Override
    protected void onPause() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mRegistrationBroadcastReceiver);
        super.onPause();
    }
}

Şimdi firebase bulut mesajlaşma entegrasyonunu tamamladık. Bunu doğrulamak için projeyi çalıştırın ve ekranda firebase reg kimliğini görmelisiniz. Reg kimliğini LogCat’ta da bulabilirsiniz.

Comments

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

GIPHY App Key not set. Please check settings

Yükleniyor…

0

Ne düşünüyorsun?

Http Error 500 Hatası Nedir? Nasıl Düzeltilir?

Mercedes Me Mobil Uygulaması