Android'de Firebase Cloud Messaging istemci uygulaması kurma

FCM istemcileri, Android 4.4 veya sonraki sürümleri çalıştıran cihazlarda Google Play Store uygulaması yüklü olan daha yüksek bir sürümün veya bir emülatörün Google API'leriyle Android 4.4 çalıştıran. Android uygulamalarınızı Google Play Store'a gidin.

SDK'yı ayarlama

Bu bölümde, daha önce etkinleştirdiyseniz tamamlamış olabileceğiniz görevler ele alınmaktadır diğer Firebase özelliklerini kullanabilirsiniz. Henüz yapmadıysanız Firebase'i Android projenize ekleyin.

Uygulama manifestinizi düzenleyin

Uygulamanızın manifest dosyasına şunu ekleyin:

  • FirebaseMessagingService kapsamını genişleten bir hizmet. Bu, şu durumlarda gereklidir: Android'deki uygulamalarda bildirim almanın ötesinde ileti görebilirsiniz. Ön plandaki uygulamalarda bildirim almak için veri yükü, yukarı akış mesajları göndermek vb. için bu geliştirmenizi sağlar.
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (İsteğe bağlı) Uygulama bileşeninde, varsayılan bildirimi ayarlamak için kullanılan meta veri öğeleri hem simge hem de renk. Android, gelen her gelen gönderide bu değerleri kullanır. e-postalara özel bir simge veya renk atanmaz.
  • <!-- 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" />
  • (İsteğe bağlı) Android 8.0 (API düzeyi 26) ve sonraki sürümlerden bildirim kanallarının desteklenmesi ve kullanılması önerilir. FCM, varsayılan olarak temel ayarlara sahip bir bildirim kanalını kullanın. Dilerseniz kendi varsayılan kanalınızı oluşturun ve kullanın default_notification_channel_id öğesini bildirim kanalı nesnenizin kimliğine ayarlayın gösterildiği gibi; FCM bunu kullanır değeri açık bir şekilde bir bildirim ayarlanmadığında, gelen mesajlarda değeri yardımcı olur. Daha fazla bilgi edinmek için bkz. Bildirim kanallarını yönetin.
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

Android 13 ve sonraki sürümlerde çalışma zamanı bildirim izni isteme

Android 13, bildirimlerin gösterilmesi için çalışma zamanında istenen yeni bir izni kullanıma sunuyor. Bu Android 13 veya sonraki bir sürümde çalışan ve FCM'yi kullanan tüm uygulamaları etkiler bildirimleri etkinleştirebilirsiniz.

FCM SDK'sı (23.0.6 veya sonraki sürümler) varsayılan olarak POST_NOTIFICATIONS izin belgesinde tanımlamamız gerekir. Ancak uygulamanızın, android.permission.POST_NOTIFICATIONS sabit değer ile iznini devre dışı bırakabilirsiniz. Uygulamanızın bildirim göstermesine izin verilen tarihe kadar kullanıcı bu izni verdi.

Yeni çalışma zamanında istenen 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 uygulama için izin vermeleri durumunda etkinleştirilecek bildirim yayınlamanızı sağlar. Bu kullanıcı arayüzü, kullanıcıya kabul etmek veya reddetmek (ör. Tamam ve Hayır, teşekkürler) düğmelerini kullanın. Kullanıcı Tamam'ı seçerse doğrudan izin isteyin. Kullanıcı Hayır, teşekkürler'i seçerse izin ver bildirim olmadan devam etmesini sağlar.

Bildirim çalışma zamanında istenen izin başlıklı makaleyi inceleyin. uygulamanızın Kullanıcının POST_NOTIFICATIONS izni.

Android 12L (API düzeyi 32) veya önceki sürümleri hedefleyen uygulamalar için bildirim izinleri

Android, uygulamanız ilk kez otomatik olarak kullanıcıdan izin ister uygulama ön planda olduğu sürece bir bildirim kanalı oluşturur. Ancak, kanal oluşturma sürecinin zamanlamasıyla ilgili dikkat edilmesi gereken önemli noktalar ve izin istekleri:

  • Uygulamanız çalışırken ilk bildirim kanalını oluşturursa arka plan (FCM SDK bunu bir FCM bildirimi) Android, bildirimin görüntülenene kadar kullanıcıdan bildirim izni istemeyen tekrar açılır. Bu durum, alınan tüm bildirimlerin kullanıcı iznin kaybedildiğini gösterir.
  • Uygulamanızı Android 13 ve sonraki sürümleri hedefleyecek şekilde güncellemeniz önerilir: İzin istemek için platformun API'lerinden yararlanmalıdır. Bu durumda Herhangi bir bildirim göndermeden önce uygulamanızın bildirim kanalları oluşturması gerekir. bildirim izninin tetiklenmesi için uygulamaya bildirim gönderme iletişim kutusunu kullanın ve hiçbir bildirimin kaybolmadığından emin olun. Görüntüleyin bildirim izinleri ile ilgili en iyi uygulamalar konulu videomuzu izleyin.

İsteğe bağlı: POST_NOTIFICATIONS iznini kaldırın

FCM SDK, varsayılan olarak POST_NOTIFICATIONS iznini içerir. Uygulamanız bildirim mesajları kullanmıyorsa (FCM aracılığıyla olsun) başka bir SDK üzerinden ya da doğrudan uygulamanız tarafından yayınlanan bildirimler) iznin uygulamanızda bulunmuyorsa şunu kullanarak kaldırabilirsiniz: manifest birleştirme remove işaretçi. Bu iznin kaldırılması, bildirimlerine göz atmanızı öneririm. Şunları ekleyin: uygulamanızın manifest dosyası:

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" tools:node="remove"/>

Cihaz kayıt jetonuna erişme

Uygulamanız ilk kez başlatıldığında FCM SDK'sı bir kayıt oluşturur jeton olacaktır. Tek bir cihazı veya oluşturmak istiyorsanız, erişim kapsamını genişleterek bu jetona erişmeniz FirebaseMessagingService ve onNewToken geçersiz kılınıyor.

Bu bölümde, jetonun nasıl alınacağı ve değişikliklerin nasıl izleneceği açıklanmaktadır jetona aktarılmalıdır. Jeton, ilk gösterimden sonra döndürülebileceği için startup'ı kullanıyorsanız en son güncellenmiş kaydı almanız jeton.

Kayıt jetonu aşağıdaki durumlarda değişebilir:

  • Uygulama yeni bir cihaza geri yüklenir.
  • Kullanıcı uygulamayı kaldırır/yeniden yükler
  • Kullanıcı uygulama verilerini siler.

Geçerli kayıt jetonunu al

Geçerli jetonu almanız gerektiğinde FirebaseMessaging.getInstance().getToken():

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();
        }
    });

Jeton oluşturmayı izleme

Yeni jeton oluşturulduğunda onNewToken geri çağırması 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);
}

Jetonu aldıktan sonra uygulama sunucunuza ve mağazanıza gönderebilirsiniz tercih ettiğiniz yöntemi kullanarak yapabilirsiniz.

Google Play Hizmetleri'ni kontrol etme

Play Hizmetleri SDK'sını kullanan uygulamalar cihazda uyumlu bir Google Play hizmetleri APK'sı olup olmadığını her zaman kontrol etmelidir. Google Play Hizmetleri özelliklerine erişerek. Bu işlemi iki yer: ana etkinliğin onCreate() yönteminde ve onResume() yöntemini çağırın. onCreate() check-in, uygulamanın özelliği başarılı bir kontrol olmadan kullanılamaz. onResume() kontrolü, Kullanıcı, çalışan uygulamaya geri düğmesine basarsanız kontrol işlemi devam eder.

Cihazda Google Play Hizmetleri'nin uyumlu bir sürümü yoksa uygulamanız GoogleApiAvailability.makeGooglePlayServicesAvailable() kullanıcıların Play Store'dan Google Play hizmetlerini indirmelerine olanak tanımak için

Otomatik başlatmayı engelle

FCM kayıt jetonu oluşturulduğunda kitaplık, tanımlayıcı ve yapılandırma verilerini Firebase'e gidin. Jetonların otomatik olarak oluşturulmasını önlemek isterseniz Analytics toplama özelliğini devre dışı bırakın ve Bu meta veri değerlerini AndroidManifest.xml:

<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şlatma özelliğini yeniden etkinleştirmek için bir çalışma zamanı çağrısı yapın:

Kotlin+KTX

Firebase.messaging.isAutoInitEnabled = true

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Analytics veri toplama özelliğini yeniden etkinleştirmek için setAnalyticsCollectionEnabled() yöntemini çağırın.FirebaseAnalytics Örneğin:

setAnalyticsCollectionEnabled(true);

Bu değerler, ayarlandıktan sonra uygulamanın yeniden başlatılmasında da değişmeden kalır.

Sonraki adımlar

İstemci uygulaması kurulduktan sonra kullanıma hazır hale gelirsiniz. Bildirim oluşturucu. Bu işlev hızlı başlangıç örneğinde gösterildiği gibi indirebileceğiniz, çalıştırabileceğiniz ve inceleyebileceğiniz

Uygulamanıza başka, daha gelişmiş davranışlar eklemek için gelen e-postalara yanıt vermek için intent filtresi tanımlayabilir ve mesaj. Ayrıntılı bilgi için uygulama sunucusundan mesaj gönderme ile ilgili kılavuzlara göz atın:

Unutmamanız gereken noktalar bundan yararlanmak için özellikleri kullanabilmeniz için bir sunucu protokolü ve sunucu protokolleri (HTTP veya XMPP) ya da Admin SDK'nın uygulanması.