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 dönüşümü

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. Swizzle'ı kullanmayı tercih etmeyen geliştiriciler, uygulamanın Info.plist dosyasına FirebaseAppDelegateProxyEnabled işaretini ekleyip NO boole değerine ayarlayarak bu özelliği devre dışı bırakabilir. Kılavuzların ilgili bölümlerinde, hem yöntemin karıştırıldığı hem de karıştırılmadığı kod örnekleri verilmektedir.

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ı altında, geliştirme kimlik doğrulama anahtarınızı, üretim kimlik doğrulama anahtarınızı veya 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 'ı tıklayın. Anahtarın anahtar kimliğini ekleyin (Apple Developer Member Center'da bulunur) ve Yükle'yi tıklayın.

Uzak bildirimlere kaydolma

Uygulama akışınızda başlangıçta veya istediğiniz noktada uygulamanızı uzaktan bildirimler için kaydedin. Gösterildiği gibi Call registerForRemoteNotifications:

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ğ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, 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 verildiği ve bunların manuel olarak nasıl izleneceği hakkında ayrıntılı bilgi için Firebase kurulum kimliği yaşam döngüsünü izleme başlıklı makaleyi inceleyin.

Firebase kurulum kimliği kullanılarak kaydı etkinleştirme

FCM kullanarak uygulama örneğinizi kaydetmeyi etkinleştirmek için Firebase Kurulum Kimliği (FID)'ni 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 temsilcisini ayarlama

FID'leri almak için mesajlaşma yetkilisi protokolünü uygulayın ve [FIRApp configure] çağrıldıktan sonra delegate özelliğini FIRMessaging olarak ayarlayın. Örneğin, uygulama temsilciniz mesajlaşma temsilcisi protokolüne uygunsa application:didFinishLaunchingWithOptions: üzerindeki temsilciyi kendisi olarak ayarlayabilirsiniz.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

didReceiveRegistration yöntemini uygulayın

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 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 yakın zamanda 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ışı bırakıldığında manuel olarak kaydetme

Otomatik başlatmayı devre dışı bıraktıysanız FCM SDK'sı, uygulama başlatıldığında 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 işlevini ç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ışı: APN'ler jetonunuzu ve FID'nizi eşleme

Method swizzling'i 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

Varsayılan olarak, FCM SDK, 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 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 cihaza geri yüklendiğinde
  • Kullanıcı uygulamayı kaldırır/yeniden yüklerse
  • Kullanıcı, uygulama verilerini temizler.

Mesajlaşma temsilcisini ayarlama

Kayıt jetonları almak için mesajlaşma temsilcisi 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 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 şunları 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 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);
  }
}];

Jetonu saklamak yerine istediğiniz zaman erişmek için bu yöntemi 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 NSNotification adlı kFIRMessagingRegistrationTokenRefreshNotification öğesini dinleyebilirsiniz. Jeton özelliği her zaman mevcut jeton değerine sahiptir.

Swizzle devre dışı: APN jetonunuzu ve kayıt jetonunuzu eşleme

Method swizzling'i 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, bu jetona erişebilir ve yenileme etkinliklerini, swizzling etkinleştirilmişken kullanılan yöntemlerle aynı şekilde 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 (GoogleService-Info.plist değil) öğenize 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 bildirim hizmeti uzantısı eklemeniz gerekir. Bu uzantı, cihazların bildirim yükünde gönderilen 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 kurulum 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çeneği aşağıda bulabilirsiniz: