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...
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.
07.09.2016
Yorumlar
Api 27 seviyesine göre nerelerde değişiklik yapmak gerek
Merhaba ben birkaç farklı bildirime sahibim ve bunların her biri için farklı bir notifications iconu göstermek istiyorum. Nasıl yapabilirim.
ben yapamadım acill yardım edin
Bu ücretsiz bir hizmet mi ?
Merhaba, daha once servis kullanmadim. Bu projede hangileri servis hangileri activity tam olarak anlamadim o yuzden. Kaynak kodlara ulasma imkanim var mi ?
Elinize sağlık güzel bir anlatım olmuş. Acaba bu şekilde APP INVENTOR'de geliştirilen uygulamalara bildirim yollanabiliyor mu?
merhabalar bende bildirim yolladığımda contentTitle çalışıyor ama contentText çalışmıyor Firebaseden gelen mesajı göstermiyor yani nerede hata olabilir.
acaba firebase veya benzer hizmet veren platformlarda facebook un bildirimini nasıl gönderebilirim?
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
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
Şu anda çok işime yarayacak bu bilgi. Teşekkür ederim.
Güzel bir yazı olmuş elinize sağlık :)
RemoteMessage sınıfı Eklenmemiş .Hata veriyor.
Bende sorunsuz çalıştı, paylaşım için teşekkürler..
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 :)
paylaşım için teşekkürler bildirim geldiğinde beyaz kare icon çıkıyor bunu nasıl düzeltiriz
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 ?
private void registerToken(String token)
string dosyasında token isimli yazı yok sendeki token yazısını atarmısın
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?