| Platform seçin: | iOS+ Android Web Flutter Unity C++ |
Bu kılavuzda, Apple platformu (ör. iOS) istemci uygulamalarınızda Firebase Cloud Messaging'i kullanmaya nasıl başlayacağınız açıklanmaktadır. Böylece güvenilir bir şekilde mesaj gönderebilirsiniz.
Apple istemci uygulamaları için Firebase Cloud Messaging APNs arayüzü üzerinden 4.096 bayta kadar bildirim ve veri yükü alabilirsiniz.
İstemci kodunuzu Objective-C veya Swift'te yazmak için FIRMessaging API'yi kullanmanızı öneririz. Hızlı başlangıç örneği, her iki dil için de örnek kod sağlar.
Başlamadan önce Firebase'i Apple projenize ekleyin.
Firebase Cloud Messaging içinde yöntem dönüşümü
FCM SDK'sı, iki temel alanda yöntem dönüşümü gerçekleştirir: APNs jetonunuzu Firebase kurulum kimliği veya FCM kayıt jetonuyla eşleme ve alt akış mesajı geri çağırma işleme sırasında analiz verilerini yakalama.
Swizzling kullanmayı tercih etmeyen geliştiriciler, uygulamanın Info.plist dosyasına FirebaseAppDelegateProxyEnabled işaretini ekleyip boole değerini NO olarak ayarlayarak bu özelliği devre dışı bırakabilir. Kılavuzların ilgili bölümlerinde, yöntem dönüşümü etkinleştirilmiş ve etkinleştirilmemiş kod örnekleri verilmiştir.
APN kimlik doğrulama anahtarınızı yükleme
APNs kimlik doğrulama anahtarınızı Firebase'e yükleyin. Henüz bir APNs kimlik doğrulama anahtarınız yoksa Apple Developer Member Center'da bir anahtar oluşturun.
-
Firebase konsolunda
Ayarlar > Genel'e gidin. Ardından Cloud Messaging sekmesini tıklayın. - iOS uygulama yapılandırması altındaki APN kimlik doğrulama anahtarı bölümünde, geliştirme kimlik doğrulama anahtarınızı, üretim kimlik doğrulama anahtarınızı veya her ikisini birden yüklemek için Yükle'yi tıklayın. En az bir tane bildirmeniz gerekir.
- Anahtarınızı kaydettiğiniz konuma gidin, anahtarı seçin ve Aç'ı tıklayın. Anahtarın anahtar kimliğini (Apple Developer Member Center'da bulunur) ekleyin ve Yükle'yi tıklayın.
Uzaktan bildirimlere kaydolma
Başlangıçta veya uygulama akışınızda istediğiniz noktada uygulamanızı uzaktan bildirimler için kaydedin.registerForRemoteNotifications öğesini gösterildiği gibi çağırın:
Swift
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
Objective-C
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
Firebase Kurulum Kimliği'ne erişme
Varsayılan olarak FCM SDK'sı, uygulama örneğini FCM ile kaydeder ve uygulama başlatıldığında istemci uygulama örneği için bir Firebase Kurulum Kimliği (FID) döndürür. APNs cihaz jetonuna benzer şekilde bu FID, uygulamanızın belirli bir örneğine hedeflenmiş bildirimler göndermenize olanak tanır.
Apple platformlarının genellikle uygulama başlangıcında bir APN cihaz jetonu sunması gibi, FCM da bildirimleri hedeflemek için bir FID sağlar. FCM SDK'sı, FIRMessagingDelegate'nin
messaging:didReceiveRegistration: yöntemini kullanarak FID'yi yayınlar, FID değişikliklerini otomatik olarak izler ve bir değişiklik algılandığında yöntemi yeni bir FID ile çağırır.
FID ilk başlatmadan sonra değişebileceğinden, FID'yi düzenli olarak alıp yüklemenizi öneririz.
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 aşağıdaki meta veri işaretini GoogleService-Info.plist dosyanıza değil, Info.plist dosyanıza ekleyin:
FirebaseMessagingInstallationIdEnabled = YES
Mesajlaşma yetkilisini ayarlama
FID'leri almak için mesajlaşma yetki verileni protokolünü uygulayın ve [FIRApp configure] yöntemini çağırdıktan sonra FIRMessaging öğesinin delegate özelliğini ayarlayın.
Örneğin, uygulama temsilciniz mesajlaşma temsilcisi protokolüne uygunsa application:didFinishLaunchingWithOptions: üzerindeki temsilciyi kendisine ayarlayabilirsiniz.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
didReceiveRegistration yöntemini uygulama
Kayıt tamamlandıktan sonra uygulama örnekleri FID kullanılarak hedeflenir.
Kayıt sırasında FID'yi almak için
messaging:didReceiveRegistration: yöntemini uygulayın.
Bu yöntem genellikle FID ile uygulama başlatma başına bir kez çağrılır. Bu yöntem çağrıldığında aşağıdaki işlemleri yapabilirsiniz:
- FID'yi sunucunuza göndermediyseniz veya yakın zamanda gönderdiyseniz uygulama sunucunuza gönderin.
- Abonelik yeniyse veya kullanıcı uygulamayı yeniden yüklediyse FID'yi konulara abone yapın.
Swift
func messaging(_ messaging: Messaging, didReceiveRegistration installationId: String?) { print("Firebase Installation ID: \(String(describing: installationId))") // Note: This callback is fired at each app startup. if let installationId = installationId { // Send the Firebase Installation ID to your app server. sendRegistrationToServer(installationId) } }
Objective-C
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistration:(nullable NSString *)installationId { NSLog(@"Firebase Installation ID: %@", installationId); // Note: This callback is fired at each app startup. if (installationId != nil) { // Send the Firebase Installation ID to your app server. [self sendRegistrationToServer:installationId]; } }
Otomatik başlatma devre dışı bırakıldığında manuel olarak kaydetme
Otomatik başlatmayı devre dışı bıraktıysanız FCM SDK'sı, uygulama örneğini uygulama başlangıcında FCM ile otomatik olarak kaydetmez.
messaging:didReceiveRegistration: yöntemiyle kaydı ve FID yayınını tetiklemek için uygulama başlangıcında register yöntemini çağırmanız gerekir:
Swift
// Trigger manual registration if auto-initialization is turned off. Messaging.messaging().register { error in if let error = error { // Handle the error print("Failed registering: \(error)") return } // Registration was successful. FID is delivered through the messaging:didReceiveRegistration: method. print("Successfully registered.") }
Objective-C
// Trigger manual registration if auto-initialization is turned off. [[FIRMessaging messaging] registerWithCompletion:^(NSError * _Nullable error) { if (error) { // Handle the error NSLog(@"Failed registering: %@", error); return; } // Registration was successful. FID is delivered through the messaging:didReceiveRegistration: method. NSLog(@"Successfully registered."); }];
Swizzling devre dışı: APNs jetonunuzu ve FID'nizi eşleme
Yöntem dönüşümünü devre dışı bıraktıysanız veya bir SwiftUI uygulaması oluşturuyorsanız APN jetonunuzu Firebase yükleme kimlikleriyle (FID) açıkça eşlemeniz gerekir. APNs jetonunu almak için application(_:didRegisterForRemoteNotificationsWithDeviceToken:) yöntemini uygulayın ve ardından Messaging öğesinin apnsToken özelliğini ayarlayın:
Swift
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Objective-C
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
FID kaydedildikten sonra, swizzling etkinleştirildiğinde kullanılan yöntemlerle FID'ye erişebilir ve yenileme etkinliklerini dinleyebilirsiniz.
Kayıt jetonuna erişme (desteği sonlandırıldı)
Varsayılan olarak FCM SDK, uygulama başlatıldığında istemci uygulama örneği için bir kayıt jetonu oluşturur. APNs cihaz jetonuna benzer şekilde bu jeton, uygulamanızın belirli bir örneğine hedeflenmiş bildirimler göndermenize olanak tanır.
Apple platformlarının genellikle uygulama başlangıcında bir APNs cihaz jetonu sağlaması gibi, FCM de FIRMessagingDelegate sınıfının messaging:didReceiveRegistrationToken: yöntemi aracılığıyla bir kayıt jetonu sağlar.
FCM SDK'sı, uygulamanın ilk başlatılması sırasında ve jetonun güncellendiği veya geçersiz kılındığı her durumda yeni ya da mevcut bir jeton alır.
Tüm durumlarda FCM SDK'sı, geçerli bir jetonla messaging:didReceiveRegistrationToken:
öğesini çağırır.
Kayıt jetonu şu durumlarda değişebilir:
- Uygulama yeni bir cihaza geri yüklendiğinde
- Kullanıcı uygulamayı kaldırır/yeniden yükler.
- Kullanıcı uygulama verilerini temizlediğinde
Mesajlaşma yetkilisini ayarlama
Kayıt jetonlarını almak için mesajlaşma temsilcisi protokolünü uygulayın ve [FIRApp configure] işlevini çağırdıktan sonra FIRMessaging öğesinin delegate özelliğini ayarlayın.
Örneğin, uygulama temsilciniz mesajlaşma temsilcisi protokolüne uygunsa application:didFinishLaunchingWithOptions: üzerindeki temsilciyi kendisine ayarlayabilirsiniz.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
Mevcut kayıt jetonu getiriliyor
Kayıt jetonları messaging:didReceiveRegistrationToken: yöntemiyle gönderilir. Bu yöntem genellikle uygulama başlatma başına bir kez kayıt jetonuyla çağrılır. Bu yöntem çağrıldığında, aşağıdakileri yapmak için ideal zamandır:
- Kayıt jetonu yeniyse uygulama sunucunuza gönderin.
- Kayıt jetonunu konulara abone etme Bu, yalnızca yeni abonelikler veya kullanıcının uygulamayı yeniden yüklediği durumlar için gereklidir.
Jetonu doğrudan token(completion:) kullanarak alabilirsiniz. Jeton alma işlemi herhangi bir şekilde başarısız olursa boş olmayan bir hata döndürülür.
Swift
Messaging.messaging().token { token, error in if let error = error { print("Error fetching remote FCM registration token: \(error)") } else if let token = token { print("Remote instance ID token: \(token)") } }
Objective-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error fetching the remote FCM registration token: %@", error); } else { NSLog(@"Remote FCM registration token: %@", token); NSString* message = [NSString stringWithFormat:@"FCM registration token: %@", token]; // display message NSLog(@"%@", message); } }];
Jetonu depolamak yerine erişmek için bu yöntemi istediğiniz zaman kullanabilirsiniz.
Jeton yenilemeyi izleme
Jeton her güncellendiğinde bildirim almak için mesajlaşma temsilci protokolüne uygun bir temsilci sağlayın. Aşağıdaki örnekte, yetki verilmiş kullanıcı kaydedilir ve uygun yetki verilmiş kullanıcı yöntemi eklenir:
Swift
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("Firebase registration token: \(String(describing: 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. }
Objective-C
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken { NSLog(@"FCM registration token: %@", fcmToken); // Notify about received token. NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"]; [[NSNotificationCenter defaultCenter] postNotificationName: @"FCMToken" object:nil userInfo:dataDict]; // TODO: If necessary send token to application server. // Note: This callback is fired at each app startup and whenever a new token is generated. }
Alternatif olarak, bir temsilci yöntemi sağlamak yerine kFIRMessagingRegistrationTokenRefreshNotification adlı bir NSNotification dinleyebilirsiniz. Jeton özelliği her zaman mevcut jeton değerine sahiptir.
Swizzling devre dışı: APNs jetonunuzu ve kayıt jetonunuzu eşleme
Yöntem dönüşümünü devre dışı bıraktıysanız veya bir SwiftUI uygulaması oluşturuyorsanız APNs jetonunuzu FCM kayıt jetonuyla açıkça eşlemeniz gerekir. APNs jetonunu almak için application(_:didRegisterForRemoteNotificationsWithDeviceToken:) yöntemini uygulayın ve ardından Messaging'nin apnsToken özelliğini ayarlayın:
Swift
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Objective-C
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
FCM kayıt jetonu oluşturulduktan sonra, swizzling etkinleştirilmişken kullandığınız yöntemlerle jetona erişebilir ve yenileme etkinliklerini dinleyebilirsiniz.
Otomatik başlatmayı önleme
FCM kaydı oluşturulduğunda kitaplık, tanımlayıcıyı ve yapılandırma verilerini Firebase'e yükler. Öncelikle kullanıcılardan açık bir izin almak istiyorsanız FCM'yi devre dışı bırakarak yapılandırma sırasında otomatik kaydı engelleyebilirsiniz. Bunu yapmak için Info.plist öğenize (GoogleService-Info.plist öğenize değil) bir meta veri değeri ekleyin:
FirebaseMessagingAutoInitEnabled = NO
FCM'yi yeniden etkinleştirmek için çalışma zamanı çağrısı yapabilirsiniz:
Swift
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
Bu değer, ayarlandıktan sonra uygulama yeniden başlatıldığında da geçerli olur.
Bildirim hizmeti uzantısını ayarlama
Apple cihazlara resim içeren bildirimler göndermek için bir bildirim hizmeti uzantısı eklemeniz gerekir. Bu uzantı, cihazların bildirim yükünde gönderilen resimleri görüntülemesine olanak tanır. Bildirimlerde resim göndermeyi planlamıyorsanız bu adımı atlayabilirsiniz.
Hizmet uzantısı eklemek için APN'lerde bildirimleri değiştirme ve sunma ile ilgili gerekli kurulum görevlerini gerçekleştirin, ardından NotificationService.m'ye FCM uzantısı yardımcı API'sini ekleyin.
Özellikle, geri çağırmayı self.contentHandler(self.bestAttemptContent); ile tamamlamak yerine, gösterildiği gibi FIRMessaging
extensionHelper ile tamamlayın:
@interface NotificationService () <NSURLSessionDelegate>
@property(nonatomic) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property(nonatomic) UNMutableNotificationContent *bestAttemptContent;
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
// Modify the notification content here as you want
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]",
self.bestAttemptContent.title];
// Call FIRMessaging extension helper API.
[[FIRMessaging extensionHelper] populateNotificationContent:self.bestAttemptContent
withContentHandler:contentHandler];
}
...
Bildirim mesajı gönderme
Uygulamayı hedef cihaza yükleyip çalıştırın. Apple cihazlarda, uzaktan bildirim alma izni isteğini kabul edin.
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ı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.
Sonraki adımlar
Kurulum adımlarını tamamladıktan sonra Apple platformları için FCM ile devam etmek üzere birkaç seçeneğiniz vardır: