Android

Firebase ile Bildirim Gönderme (Android)

Firebase için genel anlatım yapıldığı için o konulara girmeyeceğim. İlgili konular; Firebase nedir? Avantajları nelerdir? bu adreste anlatılmıştır. Şimdi Firebase ile nasıl notification gönderebiliriz adım adım bunu gerçekleştirelim. Öncelikle Fireb...

İbrahim Höbekkaya |

07.09.2016

Firebase için genel anlatım yapıldığı için o konulara girmeyeceğim.

İlgili konular;

Firebase nedir? Avantajları nelerdir?

bu adreste anlatılmıştır.

Şimdi Firebase ile nasıl notification gönderebiliriz adım adım bunu gerçekleştirelim. Öncelikle Firebase giriş yapıp üstte Konsola Git kısmına giriyoruz. Google hesabınızla giriş yaptıktan sonra bir uygulama oluşturuyoruz. Bunun için altta gördüğünüz ekrandan Create New Projecttıklayoruz.

Burada karşınıza çıkan ekrandan Create New Project diyoruz. Ve gelen ekranda uygulama adıyla beraber konumumuzu da seçtikten sonra create project diyoruz.

Sonrasında açılan pencerede (pencere açılmazsa projenize tıklayarak açabilirsiniz) karşımıza çıkan menüde Add Firebase to your Android App kısmına tıklayıp devam ediyoruz.

İlk adımda karşınıza çıkan pencerede package name kısmına oluşturacağınız projenin package adını yazıyoruz ve Add App diyoruz.

Debug signing certificate SHA-1 kısmını boş geçebilirsiniz.

Bu adımdan sonra  google-services.json isminde bir dosya indirecek.

Bu dosyayı altta gördüğünüz şekilde app dizinine atıyoruz.

 

Sonraki adımda ise hem projenin hemde uygulamanın Gradle dosyalarına eklememiz gereken kodlar veriliyor. Bunlarıda uygun yerlere ekleyerek Android Studio'da "Gradle" dosyalarını senkronize etmek için Sync Now tıklıyoruz ve Firebase consoldaki adımları Finish diyerek bitiriyoruz.

Şimdide projemizde bildirim servisini kullanabilmemiz için gerekli dependency alttaki gibi projenizin build.gradle(Mpdule: app) dosyasına ekleyerek Sync Now tıklıyoruz.

dependencies {

compile 'com.google.firebase:firebase-messaging:9.0.1'

}

apply plugin: 'com.google.gms.google-services'

 

En alttaki apply plugin kısmını dependencies in dışına eklememiz gerekiyor.

Sonrasında projemizde bir FirebaseMessagingService oluşturmamız gerekiyor ve onMessageReceived metodunu kullanarak bildirim işlemlerini bu metod içerisinde gerçekleştiriyoruz.

 

public class MyFirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        showNotification(remoteMessage.getData().get("message")); // Mesaj içeriği alınıp bildirim gösteren metod çağırılıyor
    }

    private void showNotification(String message) {

        Intent i = new Intent(this,MainActivity.class); // Bildirime basıldığında hangi aktiviteye gidilecekse
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                .setAutoCancel(true) // Kullanıcı bildirime girdiğinde otomatik olarak silinsin. False derseniz bildirim kalıcı olur.
                .setContentTitle("FCM Test") // Bildirim başlığı
                .setContentText(message) // Bildirim mesajı
                .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark) // Bildirim simgesi
                .setContentIntent(pendingIntent);

        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        manager.notify(0,builder.build());
    }
}

Daha sonra da bir MyFirebaseInstanceIDService sınıfı oluşturuyoruz aşağıdaki gibi olması gerekiyor.

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

    @Override
    public void onTokenRefresh() {
        String token = FirebaseInstanceId.getInstance().getToken();
        registerToken(token);
        Log.d("TOKEN Verildi", token);
    }

    private void registerToken(String token){

    }}


MainActivity kısmına hiç birşey eklemiyoruz bildirim için bildirimleri servis olarak dinliyoruz çünkü, siz uygulamanızı istediğiniz gibi yönetebilirsiniz servisler dışında.

Son olarak Manifest dosyamızın aşağıdaki gibi olması gerekiyor:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mrhobekkaya.firebasenotification">
<uses-permission-sdk-23 android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <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>
    </application>

</manifest>

 

Uygulama tarafındaki kodlar bu şekilde. Şimdi de yine Firebase konsola gelip soldaki Notifications kısmına gelerek yeni bir bildirim göndermek için Send your First Message'ı tıklıyoruz.

Send Message dediğimizde sonuç;

İşte bu kadar basit arkadaşlar, iyi çalışmalar.

İbrahim Höbekkaya |

07.09.2016

Yorumlar

Kadir
25.03.2020 - 11:41

error: cannot find symbol public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

hatası alıyorum...

bunun için
import com.google.firebase.iid.FirebaseInstanceIdService;
bunu import etmeyi düşündüm ama bunu da tanımadı...

error: cannot find symbol import com.google.firebase.iid.FirebaseInstanceIdService; 
symbol:   class FirebaseInstanceIdService

hatası aldım... Eklememiz gereken bir kütüphane mi var acaba?

Kadir
25.03.2020 - 11:49
Düzeltme : https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceIdService bu sayfadan öğrendiğim kadarıyla FirebaseInstanceIdService sınıfı kullanımdan kaldırılmış... Bu class dosyasını kaldırıp hiç kullanmadan çalıştırabiliriz anlamına mı geliyor bu?
Okan
06.06.2018 - 12:14
teşekkürler
Okan
13.06.2018 - 03:34

Api 27 seviyesine göre nerelerde değişiklik yapmak gerek

Bayar
27.06.2018 - 12:08

Merhaba ben birkaç farklı bildirime sahibim ve bunların her biri için farklı bir notifications iconu göstermek istiyorum. Nasıl yapabilirim.

çiğdem
05.09.2018 - 07:18

ben yapamadım acill yardım edin

 

Okan
30.03.2018 - 04:03

Bu ücretsiz bir hizmet mi ?

İbrahim Höbekkaya
04.04.2018 - 09:38
Evet bildirim gönderme özelliği ücretsiz ama diğer özelliklerde belli bi sınıra kadar ücretsiz. https://firebase.google.com/pricing/ Burada kendileri açıklamış.
Gamze Şen
25.07.2017 - 03:43

Merhaba, daha once servis kullanmadim. Bu projede hangileri servis hangileri activity tam olarak anlamadim o yuzden. Kaynak kodlara ulasma imkanim var mi ?

Ayberk Calpbinici
05.07.2017 - 11:47

Elinize sağlık güzel bir anlatım olmuş. Acaba bu şekilde APP INVENTOR'de geliştirilen uygulamalara bildirim yollanabiliyor mu?

Osman Özaydın
28.05.2017 - 07:25

merhabalar bende bildirim yolladığımda contentTitle çalışıyor ama contentText çalışmıyor Firebaseden gelen mesajı göstermiyor yani nerede hata olabilir.

İlyas Gündemir
10.03.2017 - 12:10

acaba firebase veya benzer hizmet veren platformlarda facebook un bildirimini nasıl gönderebilirim?

ertugrul gündüz
24.02.2017 - 05:05

Herşey güzel lakin uygulama iconum gelen ileti de düzgün gözükmüyor Büyük halde ve bir kısmı gözüküyor

Kaan
14.11.2016 - 08:56

private void registerToken(String token){ } bu kod sayesinde veritabanına yazdırma yapabiliyoruz oluşan kodu. Ama sadece uygulama ilk kurulduğu zaman çalışıyor. Bu yazdırma işlemini uygulama her açıldığında yapmak mümkün mü? Mesela kullanıcı uygulamayı ilk kez kurdu biz bunu veritabanına yazdırdık. Daha sonra veritabanından tokeni sildik diyelim kullanıcı artık bildirim alamayacak, tekrar girişinde de tokeni yazdırmak için ne yapmamız gerekiyor? Yani token veritabanından silinse bile kullanıcı tekrar uygulamayı açtığında tokeni veritabanına yazdıracak

Virüs Temizleme
16.12.2016 - 05:45

Şu anda çok işime yarayacak bu bilgi. Teşekkür ederim.

Yusuf
09.09.2016 - 01:22

Güzel bir yazı olmuş elinize sağlık :)

İbrahim Höbekkaya
10.09.2016 - 11:22
Teşekkür ederim iyi çalışmalar.
Hasan Şentürk
10.09.2016 - 04:43

RemoteMessage  sınıfı Eklenmemiş .Hata veriyor.

Hüseyin
12.09.2016 - 12:24

Bende sorunsuz çalıştı, paylaşım için teşekkürler..

İbrahim Höbekkaya
13.09.2016 - 12:43
Herhangi bir sorun yok kodların çalışması gerekiyordu.
İbrahim Höbekkaya
13.09.2016 - 12:44
Ben teşekkür ederim iyi çalışmalar.
Engin KAN
08.10.2016 - 10:50

Malesef bendede çalışmadı , acaba bir yerde yanlışmı yaptım diye aynı projeyi 3 kere yaptım malesef uygulama çalışıyor hata yok ama notification mesaj gelmiyor , uygulama açık bir şekilde bekledim olmadı , arka planda bekledi yine olmadı :) arka planda derken arama ekranına girdim program altta kaldı onu kast ettim , ama MALESEFF :) güzel anlatım için teşekkürler...
Bende çalışaydı iyiydi :)

Engin Karakaya
12.10.2016 - 08:12

paylaşım için teşekkürler bildirim geldiğinde beyaz kare icon çıkıyor bunu nasıl düzeltiriz 

Yasin
13.10.2016 - 11:52

Ellerinize sağlık güzel bir çalışma olmuş.

Ben bunu eclipse projem için uygulamak istiyorum. Eclipse Build gradleyi yükledim ama sonuş alamadım yardımcı olabilir misiniz ? 

Furkan Yılmaz
01.11.2016 - 04:20

private void registerToken(String token)

 

string dosyasında token isimli yazı yok sendeki token yazısını atarmısın