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 dönüşümü işlemi gerçekleştirir: APNs jetonunuzu FCM kayıt jetonuyla eşleme ve aşağı akış mesajı geri çağırma işleme sırasında analiz verilerini yakalama. Yöntem dönüşümü işlemini kullanmayı tercih etmeyen geliştiriciler, uygulamanın Info.plist dosyasına FirebaseAppDelegateProxyEnabled işaretini ekleyip NO (Boole değeri) olarak ayarlayarak bu işlemi devre dışı bırakabilir. Kılavuzların ilgili bölümlerinde, hem yöntem dönüşümü işlemi etkinleştirilmiş hem de devre dışı bırakılmış 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ı 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 gereklidir.
  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];

Kayıt jetonuna erişme

FCM SDK, varsayılan olarak uygulama başlatıldığında istemci uygulaması ö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ı genellikle uygulama başlatıldığında bir 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ı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üklerse
  • Kullanıcı, uygulama verilerini temizlerse

Mesajlaşma yetkilisini ayarlama

Kayıt jetonları almak için mesajlaşma yetkilisi protokolünü uygulayın ve [FIRApp configure] işlevini çağırdıktan sonra FIRMessaging'nın delegate özelliğini ayarlayın. Örneğin, uygulama yetkiliniz mesajlaşma yetkilisi protokolüne uyuyorsa application:didFinishLaunchingWithOptions: üzerindeki yetkiliyi 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şlatıldığında 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.

Swizzling devre dışı: APN'ler 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, bu jetona erişebilir ve yenileme etkinliklerini, swizzling etkinleştirilmişken kullanılan yöntemlerle aynı şekilde dinleyebilirsiniz.

Otomatik başlatmayı önleme

FCM kayıt jetonu 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 jeton oluşturulmasını 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 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 APNs'de 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ğı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. Add an FCM registration token (FCM kayıt jetonu ekle) 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: