Apple platformu uygulamalarında Firebase Cloud Messaging'i kullanmaya başlama

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ükleri alabilirsiniz.

İstemci kodunuzu Objective-C veya Swift ile 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 dilinde yöntem değiştirme

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. Rehberlerin ilgili bölümlerinde, hem yöntem dönüşümünün etkinleştirildiği hem de etkinleştirilmediği kod örnekleri yer alır.

APNs kimlik doğrulama anahtarınızı yükleyin

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.

  1. Firebase konsolunda Ayarlar > Genel'e gidin. Ardından Cloud Messaging sekmesini tıklayın.
  2. 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.
  3. Anahtarınızı kaydettiğiniz konuma gidin, anahtarınızı 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

Uygulamanızı, başlangıçta veya uygulama akışınızda istediğiniz noktada uzaktan bildirimler için kaydedin. Aşağıdaki gibi registerForRemoteNotifications işlevini ç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, uygulama örneğini FCM ile kaydeder ve uygulama başlatıldığında istemci uygulama örneği için Firebase yükleme 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ı genellikle uygulama başlatıldığında APNs cihaz jetonu sağladığı gibi, FCM da bildirimleri hedeflemek için bir FID sağlar. FCM SDK'sı, FIRMessagingDelegate'nin messaging:didReceiveRegistration: yöntemini kullanarak FID'yi sunar, FID değişikliklerini otomatik olarak izler ve 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.

FID'lerin ne zaman yeniden yayınlandığı ve bunların nasıl manuel olarak izleneceğiyle ilgili ayrıntılar için Firebase yükleme kimliği yaşam döngüsünü izleme başlıklı makaleyi inceleyin.

Firebase Kurulum Kimliği'ni kullanarak kaydı etkinleştirme

Uygulama örneğinizi FCM ile kaydetmeyi etkinleştirmek için Firebase yükleme kimliğini (FID) kullanın. 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 yetkilisi protokolünü uygulayın ve [FIRApp configure] çağrıldı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ı)

FCM SDK, varsayılan olarak uygulama başlatıldığında istemci uygulaması örneği için 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ı genellikle uygulama başlatıldığında APNs cihaz jetonu sağladığı gibi, FCM de FIRMessagingDelegate'nın messaging:didReceiveRegistrationToken: yöntemiyle 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 cihazda geri yüklendiğinde
  • Kullanıcı uygulamayı kaldırır/yeniden yükler.
  • Kullanıcı, uygulama verilerini temizlerse

Mesajlaşma yetkilisini ayarlama

Kayıt jetonları almak için mesajlaşma temsilcisi protokolünü uygulayın ve [FIRApp configure] işlevi çağrıldıktan sonra FIRMessaging kullanıcısının 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 kayıt jetonuyla uygulama başlatıldığında bir kez çağrılır. Bu yöntem çağrıldığında, aşağıdakileri yapmak için ideal zamandır:

  • Kayıt jetonu yeni ise uygulama sunucunuza gönderin.
  • Kayıt jetonunu konulara abone edin. 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 temsilcisi 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ça 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 bir ç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 bildirim hizmeti uzantısı eklemeniz gerekir. Bu uzantı, cihazların bildirim yükünde sunulan resimleri göstermesine olanak tanır. Bildirimlerde resim göndermeyi planlamıyorsanız bu adımı atlayabilirsiniz.

Hizmet uzantısı eklemek için APNs'de bildirimleri değiştirme ve sunma ile ilgili gerekli kurulum görevlerini gerçekleştirin, ardından NotificationService.m bölümüne 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

  1. Uygulamayı hedef cihaza yükleyip çalıştırın. Apple cihazlarda, uzaktan bildirim alma izni isteğini kabul edin.

  2. Uygulamanın cihazda arka planda çalıştığından emin olun.

  3. Firebase konsolunda DevOps & Engagement (DevOps ve Etkileşim) > Messaging'e (Mesajlaşma) gidin.

  4. Kampanya oluşturun.

    • Bu ilk mesajınızsa:

      1. İlk kampanyanızı oluşturun'u seçin.

      2. Firebase Notification mesajları'nı ve Oluştur'u seçin.

    • Daha önce kampanya oluşturduysanız:

      1. Kampanyalar sekmesinde Yeni kampanya'yı seçin.

      2. Bildirimler'i tıklayın.

  5. Mesaj metnini girin.

  6. Sağ bölmeden Test mesajı gönder'i seçin.

  7. Firebase yükleme kimliği veya kayıt jetonu ekleyin etiketli alana kayıt jetonunuzu girin.FCM

  8. 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 teslimi hakkında bilgi edinmek için Firebase konsolunda DevOps ve Etkileşim > Mesajlaşma > Raporlar kontrol paneli'ne 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ın gördüğü 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: