| 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 dönüşümü
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ı dağıtmak için Google Play Store'u kullanmak zorunda değilsiniz.
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. onResume() içindeki kontrol, kullanıcının çalışan uygulamaya geri düğmesi gibi başka bir yöntemle dönmesi durumunda 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ükleme
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 dizininden aşağıdaki komutu çalıştırın:
flutter pub add firebase_messagingİşlem tamamlandıktan sonra Flutter uygulamanızı yeniden derleyin:
flutter run
Bildirim izni iste
Bir cihaza bildirim mesajı göndermek için register() kullanarak cihazı FCM ile kaydetmeniz gerekir. Bildirim izni verilmediyse bu yöntem, kullanıcıdan bildirim izni ister.
Aksi takdirde, başarılı olursa FID'yi onRegistered üzerinden gönderir veya bir hata nedeniyle geleceği 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 Kurulum Kimliği'ne 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 kaydettikten sonra söz konusu uygulama örneğinin Firebase Kurulum Kimliği (FID) gerekir. FID, onRegistered akışı üzerinden eşzamansız olarak yayınlanı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 Kurulum Kimliği değişikliği algılandığında ve uygulama FCM ile yeniden kaydedildiğinde ya da 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 verilmediyse bu yöntem, kullanıcıdan bildirim izni ister. Aksi takdirde bir jeton döndürür veya
hata nedeniyle geleceğ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ı önlemek istiyorsanız 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 istiyorsanız setAutoInitEnabled() yöntemini ç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şturma.
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şimleri yönetme
Kullanıcılar bir bildirime dokunduğunda hem Android hem de iOS'te varsayılan davranış, uygulamayı açmaktır. Uygulama sonlandırıldıysa başlatılır, arka plandaysa ö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önderilir ve kullanıcı bu mesajı seçerse uygulama açıldığında ilgili görüşmenin açılmasını 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 plandan 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 gösterilmektedir:
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: