Apple platformlarında Firebase Cloud Messaging istemci uygulaması kurma

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.

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 FCM kayıt jetonuyla 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 NO (boolean değeri) olarak ayarlayarak bu özelliği 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.

Firebase'i Apple projenize ekleme

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

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 konsolundaki projenizde dişli simgesini, Proje Ayarları'nı ve ardından Cloud Messaging sekmesini seçin.

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

  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. Aşağıdaki gibi registerForRemoteNotifications çağrısı yapı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

Varsayılan olarak, FCM SDK, 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 APNs cihaz jetonu sağladığı gibi FCM de FIRMessagingDelegate'nın messaging:didReceiveRegistrationToken: yöntemiyle kayıt jetonu sağlar. FCM SDK, uygulamanın ilk başlatılması sırasında ve jeton güncellendiğinde ya da geçersiz kılındığında yeni veya mevcut bir jeton 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
  • Kullanıcı uygulamayı kaldırır/yeniden yüklerse
  • Kullanıcı, uygulama verilerini temizlerse

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 adlı kullanıcının 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 uygulama her başlatıldığında bir kez kayıt jetonuyla birlikte ç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 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 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 temsilci kaydedilip uygun temsilci yöntemi ekleniyor:

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, 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ışı: APNs 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, swizzling etkinleştirilmişken kullanılan yöntemlerle aynı şekilde jetona erişebilir ve yenileme etkinliklerini 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 öğenize meta veri değeri ekleyin (GoogleService-Info.plist öğenize değil):

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.

Sonraki adımlar

Apple istemcinizi ayarladıktan sonra, uygulamanıza mesaj işleme ve diğer daha gelişmiş davranışları eklemeye hazırsınız. Daha fazla bilgi için şu kılavuzlara bakın: