| Platform seçin: | iOS+ Android Web Flutter Unity C++ |
Bu kılavuzda, mesajları güvenilir bir şekilde gönderebilmek için Flutter istemci uygulamalarınızda Firebase Cloud Messaging kullanmaya nasıl başlayacağınız açıklanmaktadır.
Hedeflediğiniz platforma bağlı olarak, uygulamanız gereken bazı ek kurulum adımları vardır.
iOS+
Yöntem karıştırma
Apple cihazlarda FCM Flutter eklentisini kullanmak için yöntem dönüşümü gereklidir. Bu izin olmadan FCM kayıt işleme gibi önemli Firebase özellikleri düzgün çalışmaz.
Android
Google Play hizmetleri
FCM istemcileri için Android 7.0 veya sonraki sürümlerin yüklü olduğu ve Google Play Hizmetleri'nin de yüklü olduğu cihazlar ya da Google API'leri ile Android 7.0 çalıştıran bir emülatör gerekir. Android uygulamalarınızı yalnızca Google Play Store üzerinden dağıtmak zorunda olmadığınızı unutmayın.
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() uygulamasındaki kontrol,
uygulamanın başarılı bir kontrol olmadan kullanılamamasını sağlar. Check-in
onResume(), kullanıcı çalışan uygulamaya geri düğmesi gibi başka bir yolla dönerse kontrolün yine de yapılmasını sağlar.
Cihazda Google Play Hizmetleri'nin uyumlu bir sürümü yoksa uygulamanız, kullanıcıların Google Play Hizmetleri'ni Play Store'dan indirmesine olanak tanımak için GoogleApiAvailability.makeGooglePlayServicesAvailable() yöntemini çağırabilir.
Web
FCM ile web kimlik bilgilerini yapılandırma
FCM web arayüzü, desteklenen web push hizmetlerine gönderme isteklerini yetkilendirmek için Gönüllü Uygulama Sunucusu Kimlik Tanımlaması veya "VAPID" anahtarları olarak adlandırılan web kimlik bilgilerini kullanır. Uygulamanızı push bildirimlerine abone yapmak için Firebase projenizle bir anahtar çifti ilişkilendirmeniz gerekir. Firebase konsolu üzerinden yeni bir anahtar çifti oluşturabilir veya mevcut anahtar çiftinizi içe aktarabilirsiniz.
FCM eklentisini yükleyin
Henüz yapmadıysanız Flutter için Firebase eklentilerini yükleyip ilk kullanıma hazırlayın.
Eklentiyi yüklemek için Flutter projenizin kökünden aşağıdaki komutu çalıştırın:
flutter pub add firebase_messagingİşlem tamamlandıktan sonra Flutter uygulamanızı yeniden oluşturun:
flutter run
Bildirim izni iste
Bir cihaza bildirim mesajı göndermek için register() kullanarak cihazı FCM ile kaydetmeniz gerekir. Bildirim izni verilmemişse bu yöntem, kullanıcıdan bildirim izni ister.
Aksi takdirde, işlem başarılı olursa FID'yi onRegistered üzerinden iletir veya bir hata nedeniyle gelecekteki işlemleri reddeder.
// You may set the permission requests to "provisional" which allows the user to choose what type
// of notifications they would like to receive once the user receives a notification.
final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true);
// For apple platforms, make sure the APNS token is available before making any FCM plugin API calls
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken != null) {
// APNS token is available, make FCM plugin API requests...
}
Firebase yükleme kimliğine erişme
Firebase Kurulum Kimliği'ni kullanarak kaydı etkinleştirme
Firebase Kurulum Kimliği (FID) kullanarak uygulama örneğinizi FCM ile kaydetmeyi etkinleştirmek için öncelikle uygulamanızın Android ve Apple platformları için yapılandırmasında FID'leri etkinleştirmeniz gerekir (Web'de statik etkinleştirme yapılandırması gerekmez):
Android
AndroidManifest.xml dosyanızın <application> öğesinin içine aşağıdaki <meta-data> öğesini ekleyin:
<meta-data android:name="firebase_messaging_installation_id_enabled"
android:value="true" />iOS+
FirebaseMessagingInstallationIdEnabled anahtarını Info.plist dosyanıza ekleyin ve true (YES) olarak ayarlayın:
<key>FirebaseMessagingInstallationIdEnabled</key> <true/>
onRegistered akışına abone olma
Belirli bir cihazdaki uygulama örneğinize mesaj göndermek için FCM ile kaydedildikten sonra söz konusu uygulama örneğinin Firebase yükleme kimliğine (FID) ihtiyacınız vardır. FID, onRegistered akışı üzerinden eşzamansız olarak sağlanır.
Android ve Apple platformlarında, otomatik başlatma etkinleştirildiğinde (varsayılan) FCM, başlangıçta uygulama örneğini otomatik olarak kaydeder. Ancak register() için açık bir çağrı yapılması gerekir:
- Web'de İsteğe bağlı olarak
vapidKeyveserviceWorkerScriptPathparametrelerini iletebilirsiniz. - Android ve Apple platformlarında otomatik başlatma devre dışı bırakılmışsa veya
unregister()çağrıldıktan sonra. Ayrıca, kayıtlı FID ileonRegistered'i tetiklemek için dilediğiniz zamanregister()yöntemini çağırabilirsiniz.
Kayıt etkinliği yayınlandığında dinleyicinizin etkin olması için register() çağrısı yapmadan önce her zaman onRegistered öğesine abone olun:
final messaging = FirebaseMessaging.instance;
messaging.onRegistered
.listen((String installationId) {
// TODO: Send the Firebase Installation ID (FID) to your application server.
})
.onError((err) {
// Error getting Firebase Installation ID.
});
// Required on Web, and on Android/Apple if auto-initialization is disabled.
await messaging.register(
// Optional on Web (ignored on Android and Apple platforms)
vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu",
);
onRegistered akışı, aşağıdaki senaryolarda FID'yi yayınlar:
- Otomatik başlatma etkinleştirildiğinde Android ve Apple platformlarında ilk uygulama başlatma ve rutin senkronizasyon sırasında otomatik olarak.
- Manuel
register()çağrısı her tamamlandığında (uygulama örneği zaten kayıtlı olsa bileonRegistered, kayıtlı FID'yi yayınlamaya devam eder). - Firebase yükleme kimliği değişikliği algılandığında ve uygulama FCM ile yeniden kaydedildiğinde veya web'de bir
pushsubscriptionchangeetkinliği tetiklendiğinde.
Firebase Kurulum Kimliği'ni (FID) aldıktan sonra uygulama sunucunuza gönderin ve tercih ettiğiniz yöntemi kullanarak depolayın.
Kayıt jetonuna erişme (desteği sonlandırıldı)
Belirli bir cihaza mesaj göndermek için cihaz kayıt jetonunu bilmeniz gerekir. Bir uygulama örneğinin kayıt jetonunu almak için getToken() işlevini çağırın. Bildirim izni verilmemişse bu yöntem, kullanıcıdan bildirim izni ister. Aksi takdirde, jeton döndürür veya hata nedeniyle gelecekteki isteği reddeder.
Web platformlarında, VAPID ortak anahtarınızı getToken() yöntemine iletin:
final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");
Jeton her güncellendiğinde bildirim almak için onTokenRefresh
akışına abone olun:
FirebaseMessaging.instance.onTokenRefresh
.listen((fcmToken) {
// TODO: If necessary send token to application server.
// Note: This callback is fired at each app startup and whenever a new
// token is generated.
})
.onError((err) {
// Error getting token.
});
Otomatik başlatmayı önleme
FCM kaydı oluşturulduğunda kitaplık, tanımlayıcıyı ve yapılandırma verilerini Firebase'e yükler. Otomatik kaydı önlemeyi tercih ederseniz derleme sırasında otomatik başlatmayı devre dışı bırakın.
Otomatik başlatma devre dışı bırakıldığında, çalışma zamanında register() yöntemini çağırarak uygulama örneğini açıkça kaydedebilirsiniz (Firebase Kurulum Kimliği'ni almak için önce onRegistered yöntemine abone olduğunuzdan emin olun):
await FirebaseMessaging.instance.register();
iOS
iOS'te Info.plist öğenize bir meta veri değeri ekleyin:
FirebaseMessagingAutoInitEnabled = NO
Android
Android'de, aşağıdaki meta veri değerlerini AndroidManifest.xml dosyanıza ekleyerek Analytics veri toplamayı ve FCM otomatik başlatmayı devre dışı bırakın (her ikisini de devre dışı bırakmanız gerekir):
<meta-data
android:name="firebase_messaging_auto_init_enabled"
android:value="false" />
<meta-data
android:name="firebase_analytics_collection_enabled"
android:value="false" />
Çalışma zamanında FCM otomatik başlatma özelliğini yeniden etkinleştirme
Belirli bir uygulama örneği için otomatik başlatmayı etkinleştirmek üzere setAutoInitEnabled() işlevini çağırın:
await FirebaseMessaging.instance.setAutoInitEnabled(true);
Bu değer, ayarlandıktan sonra uygulama yeniden başlatıldığında da geçerli olur.
Test bildirim mesajı gönderme
Uygulamayı hedef cihaza yükleyip çalıştırın. Apple cihazlarda, uzaktan bildirim alma izni isteğini kabul etmeniz gerekir.
Uygulamanın cihazda arka planda çalıştığından emin olun.
Firebase konsolunda DevOps & Engagement (DevOps ve Etkileşim) > Messaging'e (Mesajlaşma) gidin.
Kampanya oluşturun.
Bu ilk mesajınızsa:
İlk kampanyanızı oluşturun'u seçin.
Firebase Notifications'ı ve Oluştur'u seçin.
Daha önce kampanya oluşturduysanız:
Kampanyalar sekmesinde Yeni kampanya'yı seçin.
Bildirimler'i tıklayın.
Mesaj metnini girin.
Sağ bölmeden Test mesajı gönder'i seçin.
Firebase Kurulum Kimliği veya FCM kayıt jetonu ekleyin etiketli alana kayıtlı Firebase Kurulum Kimliğinizi veya kayıt jetonunuzu girin.
Test et'i seçin.
Test'i seçtikten sonra, uygulamanın arka planda olduğu hedef istemci cihaz bildirimi alır.
Uygulamanıza mesaj teslimiyle ilgili bilgi edinmek için Firebase konsolunda DevOps & Engagement (DevOps ve Etkileşim) > Messaging (Mesajlaşma) > Reports (Raporlar) kontrol paneline gidin. Bu kontrol panelinde, Apple ve Android cihazlarda gönderilen ve açılan mesajların sayısı ile Android uygulamaları için "gösterim" (kullanıcılar tarafından görülen bildirimler) verileri kaydedilir.
Etkileşimi işleme
Kullanıcılar bir bildirime dokunduğunda hem Android hem de iOS'te uygulama açılır. Uygulama sonlandırılırsa başlatılır, arka planda ise ön plana getirilir.
Bildirimin içeriğine bağlı olarak, uygulama açıldığında kullanıcının etkileşimini yönetmek isteyebilirsiniz. Örneğin, bildirim kullanılarak yeni bir sohbet mesajı gönderilirse ve kullanıcı bunu seçerse uygulama açıldığında söz konusu görüşmeyi açmak isteyebilirsiniz.
firebase-messaging paketi, bu etkileşimi yönetmek için iki yöntem sunar:
getInitialMessage():Uygulama sonlandırılmış bir durumdan açılırsa bu yöntem,RemoteMessageiçeren birFuturedöndürür. Kullanıldıktan sonraRemoteMessagekaldırılır.onMessageOpenedApp: Uygulama arka plan durumundan açıldığındaRemoteMessageyayınlayan birStream.
Kullanıcılarınızın sorunsuz bir deneyim yaşamasını sağlamak için her iki senaryoyu da ele almanız gerekir. Aşağıdaki kod örneğinde bunun nasıl yapılabileceği açıklanmaktadır:
class Application extends StatefulWidget { @override StatecreateState() => _Application(); } class _Application extends State { // In this example, suppose that all messages contain a data field with the key 'type'. Future setupInteractedMessage() async { // Get any messages which caused the application to open from // a terminated state. RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage(); // If the message also contains a data property with a "type" of "chat", // navigate to a chat screen if (initialMessage != null) { _handleMessage(initialMessage); } // Also handle any interaction when the app is in the background using a // Stream listener FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage); } void _handleMessage(RemoteMessage message) { if (message.data['type'] == 'chat') { Navigator.pushNamed(context, '/chat', arguments: ChatArguments(message), ); } } @override void initState() { super.initState(); // Run code required to handle interacted messages in an async function // as initState() must not be async setupInteractedMessage(); } @override Widget build(BuildContext context) { return Text("..."); } }
Etkileşimi nasıl ele alacağınız kurulumunuza bağlıdır. Daha önce gösterilen örnek, StatefulWidget kullanımına dair temel bir örnektir.
Sonraki adımlar
Kurulum adımlarını tamamladıktan sonra Flutter için FCM ile devam etmek üzere kullanabileceğiniz birkaç seçenek vardır: