Apple platformlarında Firebase Cloud Messaging istemci uygulaması kurma

Apple istemci uygulamaları için Firebase Cloud Messaging APN'ler arayüzü üzerinden 4096 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.

Firebase Cloud Messaging'te yöntem dönüşümü

FCM SDK'sı iki temel alanda yöntem kaydırması gerçekleştirir: APN'lerinizi FCM kayıt jetonuyla eşler ve aşağı akış mesajı geri çağırma işlemi sırasında analiz verilerini yakalar. Değiştirme işlemini kullanmayı tercih etmeyen geliştiriciler, uygulamanın Info.plist dosyasına FirebaseAppDelegateProxyEnabled işaretini ekleyerek ve NO (boole değeri) olarak ayarlayarak bu özelliği devre dışı bırakabilir. Kılavuzların ilgili bölümlerinde, hem yöntem karıştırma etkin hem de devre dışıyken kod örnekleri sağlanır.

Firebase'i Apple projenize ekleme

Henüz yapmadıysanız Firebase'i Apple projenize ekleyin.

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

APNs kimlik doğrulama anahtarınızı Firebase'e yükleyin. APN kimlik doğrulama anahtarınız yoksa Apple Developer Üye Merkezi'nde bir anahtar oluşturduğunuzdan emin olun.

  1. Firebase konsolunda projenizin içinde, dişli simgesini ve Proje Ayarları'nı, ardından Cloud Messaging sekmesini seçin.

  2. iOS uygulama yapılandırması bölümündeki APNs kimlik doğrulama anahtarı'nda Yükle düğmesini tıklayın.

  3. Anahtarınızı kaydettiğiniz konuma gidin, anahtarı seçin ve 'ı tıklayın. Anahtarın anahtar kimliğini ekleyin ( Apple Developer Üye Merkezi'nde bulunur) ve Yükle'yi tıklayın.

Uzaktan bildirimlere kaydol

Uygulamanızı, başlangıçta veya uygulama akışınızda istediğiniz noktada uzaktan bildirimlere kaydedin. registerForRemoteNotifications'ü aşağıdaki 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];

Kayıt jetonuna erişme

FCM SDK'sı, varsayılan olarak uygulama başlatılırken 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şlatılırken APNs cihaz jetonu sağladığı gibi, FCM de FIRMessagingDelegate'nin messaging:didReceiveRegistrationToken: yöntemi aracılığıyla kayıt jetonu sağlar. FCM SDK'sı, uygulama ilk kez başlatılırken ve jeton güncellendiğinde veya geçersiz olduğunda yeni veya mevcut bir jeton alır. FCM SDK'sı her durumda 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ükler
  • Kullanıcı uygulama verilerini siler.

Mesajlaşma temsilcisini ayarlama

Kayıt jetonları almak için mesajlaşma temsilcisi protokolünü uygulayın ve [FIRApp configure]'yi çağırdıktan sonra FIRMessaging'nin delegate mülkünü ayarlayın. Örneğin, uygulama temsilciniz mesajlaşma temsilcisi protokolüne uygunsa application:didFinishLaunchingWithOptions: üzerinde temsilciyi kendisine ayarlayabilirsiniz.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Mevcut kayıt jetonunu getirme

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ğıdakiler için ideal zamandır:

  • Kayıt jetonu yeniyse 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(complete:) kullanarak alabilirsiniz. Jeton alma işlemi herhangi bir şekilde başarısız olursa null olmayan bir hata sağlanır.

Swift

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching FCM registration token: \(error)")
  } else if let token = token {
    print("FCM registration token: \(token)")
    self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
  }
}

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];

Jetonu saklamak yerine erişmek için dilediğiniz zaman 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ş kişi kaydedilir ve uygun delege yöntemi eklenir:

Swift

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
  print("Firebase registration token: \(String(describing: fcmToken))")

  let dataDict: [String: String] = ["token": fcmToken ?? ""]
  NotificationCenter.default.post(
    name: Notification.Name("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.
}

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, yetki verme yöntemi sağlamak yerine kFIRMessagingRegistrationTokenRefreshNotification adlı bir NSNotification için dinleyebilirsiniz. Jeton mülkü her zaman geçerli jeton değerine sahiptir.

Değiştirme devre dışı: APNs jetonunuzu ve kayıt jetonunuzu eşleme

Yöntem karıştırmayı devre dışı bıraktıysanız veya SwiftUI uygulaması geliştiriyorsanı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'un apnsToken mülkünü 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 karıştırma etkinken kullanılan yöntemlerle aynı yöntemleri kullanarak yenileme etkinliklerini dinleyebilirsiniz.

Otomatik başlatmayı önleme

Bir 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 bir katılım almak istiyorsanız FCM'yi devre dışı bırakarak yapılandırma sırasında jeton oluşturulmasını önleyebilirsiniz. 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 çalışma zamanında çağrı yapabilirsiniz:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

Bu değer, ayarlandıktan sonra uygulama yeniden başlatılsa bile değişmez.

Sonraki adımlar

Apple istemcinizi ayarladıktan sonra, mesajları işleme ve uygulamanıza daha gelişmiş davranışlar eklemeye hazırsınızdır. Daha fazla bilgi için şu kılavuzları inceleyin: