获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Android'de bir Firebase Bulut Mesajlaşma istemci uygulaması kurun

FCM istemcileri, Google Play Store uygulamasının da yüklü olduğu Android 4.4 veya sonraki sürümleri çalıştıran cihazlara veya Google API'leri ile Android 4.4 çalıştıran bir öykünücüye ihtiyaç duyar. Android uygulamalarınızı Google Play Store üzerinden dağıtmakla sınırlı olmadığınızı unutmayın.

SDK'yı kurun

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 bildiriminizi düzenleyin

Aşağıdakileri uygulamanızın bildirimine ekleyin:

  • FirebaseMessagingService genişleten bir hizmet. Bu, arka planda uygulamalarda bildirim almanın ötesinde herhangi bir mesaj işleme yapmak istiyorsanız 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>
  • (İsteğe bağlı) Uygulama bileşeni içinde, varsayılan bir bildirim simgesi ve rengi ayarlamak için meta veri öğeleri. Android, gelen iletiler açıkça simge veya renk ayarlamadığında bu değerleri kullanır.
  • <!-- 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ümlerde bildirim kanalları desteklenir ve önerilir. FCM, temel ayarlarla varsayılan bir bildirim kanalı sağlar. Kendi varsayılan kanalınızı oluşturmayı ve kullanmayı tercih ederseniz, default_notification_channel_id gösterildiği gibi bildirim kanalı nesnenizin kimliğine ayarlayın; FCM, gelen mesajlar açıkça bir bildirim kanalı ayarlamadığında bu değeri kullanır. Daha fazla bilgi edinmek için bkz. Bildirim kanallarını yönetme .
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

Android 13+ üzerinde çalışma zamanı bildirim izni iste

Android 13, bildirimleri göstermek için yeni bir çalışma zamanı izni sunar. 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 üstü), bildirimde tanımlanan POST_NOTIFICATIONS iznini içerir. Ancak, uygulamanızın ayrıca bu iznin çalışma zamanı sürümünü android.permission.POST_NOTIFICATIONS sabiti aracılığıyla istemesi gerekir. Kullanıcı bu izni verene kadar uygulamanızın bildirim göstermesine izin verilmeyecek.

Yeni çalışma zamanı izni istemek için:

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

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

Genel olarak, uygulamaya bildirim gönderme izni vermeleri durumunda etkinleştirilecek özellikleri kullanıcıya açıklayan bir kullanıcı arayüzü göstermelisiniz. Bu kullanıcı arayüzü, kullanıcıya Tamam ve Hayır, teşekkürler düğmeleri gibi kabul etme veya reddetme seçeneklerini sağlamalı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 bildirimler 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 eski sürümleri hedefleyen uygulamalar için bildirim izinleri

Android, uygulama ön planda olduğu sürece, uygulamanız ilk kez bir bildirim kanalı oluşturduğunda kullanıcıdan otomatik olarak izin ister. Ancak, kanal oluşturma ve izin isteklerinin zamanlaması ile ilgili önemli uyarılar vardır:

  • Uygulamanız arka planda çalışırken ilk bildirim kanalını oluşturursa (FCM SDK'sı bir FCM bildirimi alırken bunu yapar), Android bildirimin görüntülenmesine izin vermeyecek ve bir sonrakine kadar kullanıcıdan bildirim izni istemeyecektir. uygulamanızın açıldığı saat. Bu , uygulamanız açılmadan ve kullanıcı izni kabul etmeden önce alınan tüm bildirimlerin kaybolacağı anlamına gelir.
  • İzin istemek için platformun API'lerinden yararlanmak için uygulamanızı Android 13+ hedefleyecek şekilde güncellemenizi şiddetle öneririz. Bu mümkün değilse , bildirim izni iletişim kutusunu tetiklemek ve hiçbir bildirimin kaybolmadığından emin olmak için uygulamaya herhangi bir bildirim göndermeden önce uygulamanızın bildirim kanalları oluşturması gerekir. Daha fazla bilgi için bildirim izni en iyi uygulamalarına bakın.

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

Varsayılan olarak, FCM SDK, POST_NOTIFICATIONS iznini içerir. Uygulamanız bildirim mesajları kullanmıyorsa (FCM bildirimleri aracılığıyla, başka bir SDK aracılığıyla veya doğrudan uygulamanız tarafından yayınlanmış) ve uygulamanızın izni içermesini istemiyorsanız, bildirim birleştirmenin remove işaretçisini 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 belirtecine erişin

Uygulamanızın ilk başlangıcında, FCM SDK, istemci uygulama örneği için bir kayıt belirteci oluşturur. Tek cihazları hedeflemek veya cihaz grupları oluşturmak istiyorsanız, onNewToken FirebaseMessagingService kılarak bu simgeye erişmeniz gerekir.

Bu bölüm, belirtecin nasıl alınacağını ve belirteçteki değişikliklerin nasıl izleneceğini açıklar. Belirteç, ilk başlatmadan sonra döndürülebildiğinden, en son güncelleştirilmiş kayıt belirtecini almanız şiddetle önerilir.

Kayıt jetonu şu durumlarda değişebilir:

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

Geçerli kayıt belirtecini al

Geçerli belirteci almanız gerektiğinde, FirebaseMessaging.getInstance().getToken() arayın:

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

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

Belirteç oluşturmayı izleyin

onNewToken geri çağrısı, yeni bir belirteç oluşturulduğunda tetiklenir.

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

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

Belirteci aldıktan sonra, uygulama sunucunuza gönderebilir ve tercih ettiğiniz yöntemi kullanarak saklayabilirsiniz.

Google Play hizmetlerini kontrol edin

Play Hizmetleri SDK'sına dayanan 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() 'deki kontrol, uygulamanın başarılı bir kontrol olmadan kullanılamayacağını garanti eder. onResume() 'deki check-in, kullanıcı çalışan uygulamaya geri düğmesi gibi başka yollarla dönerse, kontrolün hala gerçekleştirilmesini sağlar.

Cihazda Google Play hizmetlerinin uyumlu bir sürümü yoksa uygulamanız, kullanıcıların Google Play hizmetlerini Play Store'dan indirmesine izin vermek için GoogleApiAvailability.makeGooglePlayServicesAvailable() çağırabilir.

Otomatik başlatmayı engelle

Bir FCM kayıt belirteci oluşturulduğunda kitaplık, tanımlayıcıyı ve yapılandırma verilerini Firebase'e yükler. Belirteç otomatik oluşturmayı engellemeyi tercih ederseniz, AndroidManifest.xml şu meta veri değerlerini ekleyerek Analytics toplama 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 bir çalışma zamanı çağrısı yapın:

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Kotlin+KTX

Firebase.messaging.isAutoInitEnabled = 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şlatmaları boyunca devam eder.

Sonraki adımlar

İstemci uygulaması ayarlandıktan sonra, Bildirim oluşturucu ile aşağı akış mesajları göndermeye hazırsınız. Bu işlevsellik, indirebileceğiniz, çalıştırabileceğiniz ve gözden geçirebileceğiniz hızlı başlangıç ​​örneğinde gösterilmiştir.

Uygulamanıza başka, daha gelişmiş davranışlar eklemek için bir amaç filtresi bildirebilir ve gelen iletilere yanıt vermek için bir etkinlik uygulayabilirsiniz. Ayrıntılar için bir 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 Yönetici SDK'sının bir uygulamasına ihtiyacınız olacağını unutmayın.