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

Platform seçin: iOS+ Android Web Flutter Unity C++


Bu kılavuzda, mesajları güvenilir bir şekilde gönderebilmeniz için Apple platformu (ör. iOS) istemci uygulamalarınızda Firebase Cloud Messaging'yı kullanmaya nasıl başlayacağınız açıklanmaktadır.

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ğinde her iki dil için de örnek kod sağlanır.

Başlamadan önce Firebase'i Apple projenize ekleyin.

Firebase Cloud Messaging dilinde yöntem değiştirme

FCM SDK, iki temel alanda yöntem değiştirme işlemi gerçekleştirir: APNs jetonunuzu Firebase yükleme kimliği'ne veya FCM kayıt jetonuna eşleme ve aşağı 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 bunu NO boole değerine ayarlayarak devre dışı bırakabilir. Rehberlerin ilgili bölümlerinde, hem yöntemin değiştirildiği hem de değiş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 tane oluşturduğunuzdan emin olun.

  1. Firebase konsolunda Ayarlar > Genel'e gidin. Ardından Cloud Messaging sekmesini tıklayın.
  2. iOS uygulama yapılandırması bölümündeki APNs kimlik doğrulama anahtarı'nda, geliştirme kimlik doğrulama anahtarınızı veya üretim kimlik doğrulama anahtarınızı ya da her ikisini de 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 ekleyin (Apple Developer Member Center'da bulunur) ve Yükle'yi tıklayın.

Uzaktan bildirimlere kaydolma

Uygulamanızı, başlatmada 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 yükleme kimliğine 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. İlk başlatma işleminden sonra FID 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 Installation ID kullanılarak 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 yetkilisi 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 uyuyorsa application:didFinishLaunchingWithOptions: temsilcisini kendisi olarak 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. Kaydolduktan sonra FID'yi almak için messaging:didReceiveRegistration: yöntemini uygulayın. Bu yöntem genellikle uygulama her başlatıldığında FID ile birlikte 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 kısa süre önce gönderdiyseniz uygulama sunucunuza gönderin.
  • Abonelik yeni ise veya kullanıcı uygulamayı yeniden yüklediyse FID'yi konulara abone edin.

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ışı olduğunda manuel olarak kaydetme

Otomatik başlatmayı devre dışı bıraktıysanız FCM SDK'sı, uygulama başlatılırken uygulama örneğini FCM ile otomatik olarak kaydetmez. Kayıt ve FID teslimini messaging:didReceiveRegistration: yöntemiyle tetiklemek için uygulama başlatıldığı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.");
}];
    

Swizzle devre dışı: APNs jetonunuzu ve FID'nizi eşleme

Yöntem dönüşümünü devre dışı bıraktıysanız veya SwiftUI uygulaması oluşturuyorsanız APNs 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, swizzle etkinleştirildiğinde kullanılan yöntemlerle aynı yöntemleri kullanarak FID'ye erişebilir ve yenileme etkinliklerini dinleyebilirsiniz.

Kayıt jetonuna erişme

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, ilk uygulama başlatma sırasında ve jeton güncellendiğinde veya geçersiz kılındığında yeni ya da mevcut bir jetonu alır. Her durumda, FCM SDK, geçerli bir jetonla messaging:didReceiveRegistrationToken: çağrısı yapar.

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

  • Uygulama yeni bir cihazda geri yüklendiğinde
  • Kullanıcı uygulamayı kaldırır/yeniden yüklerse
  • Kullanıcı, uygulama verilerini temizlerse

Mesajlaşma yetkilisi 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 öğesinin delegate özelliğini ayarlayın. Örneğin, uygulama temsilciniz mesajlaşma temsilcisi protokolüne uyuyorsa application:didFinishLaunchingWithOptions: temsilcisini kendisi olarak ayarlayabilirsiniz.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Mevcut kayıt jetonunu getirme

Kayıt jetonları, messaging:didReceiveRegistrationToken: yöntemiyle teslim edilir. Bu yöntem genellikle kayıt jetonuyla uygulama başlatma başına bir kez çağrılır. Bu yöntem çağrıldığında ideal olarak şu işlemler yapılmalıdı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 sağlanı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);
  }
}];

Bu yöntemi, jetonu saklamak yerine istediğiniz zaman jetona erişmek için 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ı kaydediliyor ve uygun yetki verilmiş kullanıcı yöntemi ekleniyor:

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 NSNotification adlı bir kFIRMessagingRegistrationTokenRefreshNotification 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 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 kullanılan yöntemlerle aynı şekilde 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çerliliğini korur.

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 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ğırma işlemini 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 FCM kayıt jetonu ekleyin etiketli alana kayıt jetonunuzu girin.

  8. Test et'i seçin.

Test'i seçtikten sonra, uygulama arka plandayken hedeflenen istemci cihazı bildirimi almalıdı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 ilerlemek üzere kullanabileceğiniz birkaç seçenek aşağıda verilmiştir: