FCM istemcileri, Google Play Store uygulamasının da yüklü olduğu, Android 4.4 veya üzerini çalıştıran cihazlara veya Google API'leri ile Android 4.4 çalıştıran bir emülatöre ihtiyaç duyar. Android uygulamalarınızı Google Play Store aracılığıyla dağıtmakla sınırlı olmadığınızı unutmayın.
SDK'yı kurma
Bu bölüm, uygulamanız için diğer Firebase özelliklerini zaten etkinleştirdiyseniz tamamlamış olabileceğiniz görevleri kapsar. Henüz yapmadıysanız Android projenize Firebase'i ekleyin
Uygulama manifestinizi düzenleyin
Aşağıdakileri uygulamanızın manifest dosyasına ekleyin:
-
FirebaseMessagingService
genişleten bir hizmet. Arka planda uygulamalarla ilgili bildirim almanın ötesinde herhangi bir mesaj işleme işlemi yapmak istiyorsanız bu gereklidir. Ön plana çıkan uygulamalarda bildirim almak, veri yükü almak, yukarı akış mesajları göndermek vb. için bu hizmeti genişletmeniz gerekir.
<service android:name=".java.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
<!-- Set custom default icon. This is used when no icon is set for incoming notification messages. See README(https://goo.gl/l4GJaQ) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_stat_ic_notification" /> <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming notification message. See README(https://goo.gl/6BKBk7) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent" />
default_notification_channel_id
gösterildiği gibi bildirim kanalı nesnenizin kimliğine ayarlayın; FCM, gelen mesajların açıkça bir bildirim kanalı ayarlamadığı durumlarda bu değeri kullanacaktır. Daha fazla bilgi edinmek için Bildirim kanallarını yönetme konusuna bakın.<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id" />
Android 13+ sürümlerinde çalışma zamanı bildirimi izni isteyin
Android 13, bildirimleri göstermek için yeni bir çalışma zamanı izni sunuyor. Bu, Android 13 veya sonraki sürümlerde çalışan ve FCM bildirimlerini kullanan tüm uygulamaları etkiler.
Varsayılan olarak, FCM SDK'sı (sürüm 23.0.6 veya üzeri), bildirimde tanımlanan POST_NOTIFICATIONS
iznini içerir. Ancak uygulamanızın aynı zamanda android.permission.POST_NOTIFICATIONS
sabiti aracılığıyla bu iznin çalışma zamanı sürümünü de istemesi gerekecektir. Kullanıcı bu izni verene kadar uygulamanızın bildirim göstermesine izin verilmeyecektir.
Yeni çalışma zamanı izni istemek için:
Kotlin+KTX
// Declare the launcher at the top of your Activity/Fragment: private val requestPermissionLauncher = registerForActivityResult( ActivityResultContracts.RequestPermission(), ) { isGranted: Boolean -> if (isGranted) { // FCM SDK (and your app) can post notifications. } else { // TODO: Inform user that that your app will not show notifications. } } private fun askNotificationPermission() { // This is only necessary for API level >= 33 (TIRAMISU) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED ) { // FCM SDK (and your app) can post notifications. } else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) { // TODO: display an educational UI explaining to the user the features that will be enabled // by them granting the POST_NOTIFICATION permission. This UI should provide the user // "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission. // If the user selects "No thanks," allow the user to continue without notifications. } else { // Directly ask for the permission requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) } } }
Java
// Declare the launcher at the top of your Activity/Fragment: private final ActivityResultLauncher<String> requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> { if (isGranted) { // FCM SDK (and your app) can post notifications. } else { // TODO: Inform user that that your app will not show notifications. } }); private void askNotificationPermission() { // This is only necessary for API level >= 33 (TIRAMISU) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { // FCM SDK (and your app) can post notifications. } else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) { // TODO: display an educational UI explaining to the user the features that will be enabled // by them granting the POST_NOTIFICATION permission. This UI should provide the user // "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission. // If the user selects "No thanks," allow the user to continue without notifications. } else { // Directly ask for the permission requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS); } } }
Genel olarak kullanıcıya, uygulamaya bildirim gönderme izni vermesi durumunda etkinleştirilecek özellikleri açıklayan bir kullanıcı arayüzü görüntülemelisiniz. Bu kullanıcı arayüzü, kullanıcıya Tamam ve Hayır, teşekkürler düğmeleri gibi kabul etme veya reddetme seçenekleri sunmalıdır. Kullanıcı Tamam'ı seçerse doğrudan izin isteyin. Kullanıcı Hayır, teşekkürler 'i seçerse kullanıcının bildirim olmadan devam etmesine izin verin.
Uygulamanızın kullanıcıdan POST_NOTIFICATIONS
iznini ne zaman istemesi gerektiğine ilişkin daha fazla en iyi uygulama için Bildirim çalışma zamanı iznine bakın.
Android 12L (API düzeyi 32) veya daha düşük sürümleri hedefleyen uygulamalar için bildirim izinleri
Android, uygulamanız ilk kez bir bildirim kanalı oluşturduğunda, uygulama ön planda olduğu sürece kullanıcıdan otomatik olarak izin ister. Ancak kanal oluşturma ve izin isteklerinin zamanlamasına ilişkin önemli uyarılar vardır:
- Uygulamanız arka planda çalışırken ilk bildirim kanalını oluşturursa (FCM SDK bunu bir FCM bildirimi alırken yapar), Android bildirimin görüntülenmesine izin vermez ve bir sonrakine kadar kullanıcıdan bildirim izni istemeyecektir. uygulamanızın açıldığı zaman. Bu , uygulamanız açılmadan ve kullanıcı izni kabul etmeden önce alınan tüm bildirimlerin kaybolacağı anlamına gelir.
- İzin istemek amacıyla platformun API'lerinden yararlanmak için uygulamanızı Android 13+ sürümünü hedefleyecek şekilde güncellemenizi kesinlikle öneririz. Bu mümkün değilse, bildirim izni iletişim kutusunu tetiklemek ve hiçbir bildirimin kaybolmamasını sağlamak için uygulamaya herhangi bir bildirim göndermeden önce uygulamanızın bildirim kanalları oluşturması gerekir. Daha fazla bilgi için bildirim iznine ilişkin en iyi uygulamalara bakın.
İsteğe bağlı: POST_NOTIFICATIONS
iznini kaldırın
Varsayılan olarak FCM SDK'sı POST_NOTIFICATIONS
iznini içerir. Uygulamanız bildirim mesajlarını kullanmıyorsa (FCM bildirimleri aracılığıyla, başka bir SDK aracılığıyla veya doğrudan uygulamanız tarafından gönderilen) ve uygulamanızın bu izni içermesini istemiyorsanız bildirim birleştirmenin remove
işaretleyicisini kullanarak bunu kaldırabilirsiniz. Bu iznin kaldırılmasının yalnızca FCM bildirimlerinin değil tüm bildirimlerin görüntülenmesini engellediğini unutmayın. Aşağıdakileri uygulamanızın manifest dosyasına ekleyin:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" tools:node="remove"/>
Cihaz kayıt jetonuna erişme
Uygulamanızın ilk başlangıcında FCM SDK, istemci uygulaması örneği için bir kayıt belirteci oluşturur. Tek cihazları hedeflemek veya cihaz grupları oluşturmak istiyorsanız FirebaseMessagingService
genişleterek ve onNewToken
geçersiz kılarak bu belirtece erişmeniz gerekir.
Bu bölümde belirtecin nasıl alınacağı ve belirteçte yapılan değişikliklerin nasıl izleneceği açıklanmaktadır. Belirteç ilk başlatmanın ardından döndürülebileceğinden, en son güncellenen kayıt belirtecini almanız önemle tavsiye edilir.
Kayıt jetonu şu durumlarda değişebilir:
- Uygulama yeni bir cihaza geri yüklenir
- Kullanıcı uygulamayı kaldırır/yeniden yükler
- Kullanıcı uygulama verilerini temizler.
Geçerli kayıt jetonunu alın
Geçerli belirteci almanız gerektiğinde FirebaseMessaging.getInstance().getToken()
çağırın:
Kotlin+KTX
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task -> if (!task.isSuccessful) { Log.w(TAG, "Fetching FCM registration token failed", task.exception) return@OnCompleteListener } // Get new FCM registration token val token = task.result // Log and toast val msg = getString(R.string.msg_token_fmt, token) Log.d(TAG, msg) Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show() })
Java
FirebaseMessaging.getInstance().getToken() .addOnCompleteListener(new OnCompleteListener<String>() { @Override public void onComplete(@NonNull Task<String> task) { if (!task.isSuccessful()) { Log.w(TAG, "Fetching FCM registration token failed", task.getException()); return; } // Get new FCM registration token String token = task.getResult(); // Log and toast String msg = getString(R.string.msg_token_fmt, token); Log.d(TAG, msg); Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } });
Belirteç oluşturmayı izleyin
onNewToken
geri çağrısı, yeni bir belirteç oluşturulduğunda tetiklenir.
Kotlin+KTX
/** * Called if the FCM registration token is updated. This may occur if the security of * the previous token had been compromised. Note that this is called when the * FCM registration token is initially generated so this is where you would retrieve the token. */ override fun onNewToken(token: String) { Log.d(TAG, "Refreshed token: $token") // If you want to send messages to this application instance or // manage this apps subscriptions on the server side, send the // FCM registration token to your app server. sendRegistrationToServer(token) }
Java
/** * There are two scenarios when onNewToken is called: * 1) When a new token is generated on initial app startup * 2) Whenever an existing token is changed * Under #2, there are three scenarios when the existing token is changed: * A) App is restored to a new device * B) User uninstalls/reinstalls the app * C) User clears app data */ @Override public void onNewToken(@NonNull String token) { Log.d(TAG, "Refreshed token: " + token); // If you want to send messages to this application instance or // manage this apps subscriptions on the server side, send the // FCM registration token to your app server. sendRegistrationToServer(token); }
Tokenı aldıktan sonra uygulama sunucunuza gönderebilir ve tercih ettiğiniz yöntemi kullanarak saklayabilirsiniz.
Google Play hizmetlerini kontrol edin
Play Hizmetleri SDK'sını kullanan uygulamalar, Google Play hizmetleri özelliklerine erişmeden önce her zaman cihazda uyumlu bir Google Play hizmetleri APK'sı olup olmadığını kontrol etmelidir. Bunu iki yerde yapmanız önerilir: ana etkinliğin onCreate()
yönteminde ve onResume()
yönteminde. onCreate()
check-in işlemi, uygulamanın başarılı bir kontrol olmadan kullanılamayacağını garanti eder. onResume()
check-in işlemi, kullanıcının çalışan uygulamaya geri düğmesi gibi başka bir yöntemle geri dönmesi durumunda kontrolün yine de gerçekleştirilmesini sağlar.
Cihazda Google Play hizmetlerinin uyumlu bir sürümü yoksa uygulamanız, kullanıcıların Play Store'dan Google Play hizmetlerini indirmesine izin vermek için GoogleApiAvailability.makeGooglePlayServicesAvailable()
çağırabilir.
Otomatik başlatmayı önle
Bir FCM kayıt jetonu oluşturulduğunda kitaplık, tanımlayıcıyı ve yapılandırma verilerini Firebase'e yükler. Belirtecin otomatik oluşturulmasını engellemeyi tercih ederseniz, bu meta veri değerlerini AndroidManifest.xml
dosyanıza ekleyerek Analytics koleksiyonunu ve FCM otomatik başlatmayı devre dışı bırakın (her ikisini de devre dışı bırakmalısınız):
<meta-data android:name="firebase_messaging_auto_init_enabled" android:value="false" /> <meta-data android:name="firebase_analytics_collection_enabled" android:value="false" />
FCM otomatik başlatmayı yeniden etkinleştirmek için çalışma zamanı çağrısı yapın:
Kotlin+KTX
Firebase.messaging.isAutoInitEnabled = true
Java
FirebaseMessaging.getInstance().setAutoInitEnabled(true);
Analytics koleksiyonunu yeniden etkinleştirmek için FirebaseAnalytics
sınıfının setAnalyticsCollectionEnabled()
yöntemini çağırın. Örneğin:
setAnalyticsCollectionEnabled(true);
Bu değerler, ayarlandıktan sonra uygulama yeniden başlatıldığında kalıcı olur.
Sonraki adımlar
İstemci uygulaması kurulduktan sonra Bildirimler oluşturucuyla aşağı akış mesajları göndermeye hazırsınız. Bu işlevsellik, indirebileceğiniz, çalıştırabileceğiniz ve inceleyebileceğiniz hızlı başlangıç örneğinde gösterilmektedir.
Uygulamanıza daha gelişmiş başka davranışlar eklemek için bir amaç filtresi tanımlayabilir ve gelen mesajlara yanıt verecek bir etkinlik uygulayabilirsiniz. Ayrıntılar için uygulama sunucusundan mesaj gönderme kılavuzlarına bakın:
Bu özelliklerden yararlanmak için bir sunucu uygulamasına ve sunucu protokollerine (HTTP veya XMPP) veya Admin SDK uygulamasına ihtiyacınız olacağını unutmayın.