了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

Apple platformlarında bir Firebase Bulut Mesajlaşma istemci uygulaması kurun

Apple istemci uygulamaları için, Firebase Cloud Messaging APNs arabirimi üzerinden 4000 bayta kadar bildirim ve veri yükleri alabilirsiniz.

İstemci kodunuzu Objective-C veya Swift'te yazmak için FIRMessaging API'sini kullanmanızı öneririz. Hızlı başlangıç ​​örneği, her iki dil için de örnek kod sağlar.

Firebase Cloud Messaging'de swizzling yöntemi

FCM SDK, iki temel alanda yöntem değiştirme gerçekleştirir: APN belirtecinizi FCM kayıt belirtecine eşleme ve aşağı akış ileti geri arama işleme sırasında analiz verilerini yakalama. Swizzling'i kullanmamayı tercih eden geliştiriciler, uygulamanın Info.plist dosyasına FirebaseAppDelegateProxyEnabled bayrağını ekleyip NO (boole değeri) olarak ayarlayarak bunu devre dışı bırakabilir. Kılavuzların ilgili alanları, metot swizzling'in etkin olduğu ve olmadığı durumlarda kod örnekleri sağlar.

Firebase'i Apple projenize ekleyin

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. Halihazırda bir APN kimlik doğrulama anahtarınız yoksa Apple Developer Üye Merkezi'nde bir tane oluşturduğunuzdan emin olun.

  1. Firebase konsolundaki projenizin içinde, dişli çark simgesini seçin, Proje Ayarları'nı seçin ve ardından Bulut Mesajlaşma sekmesini seçin.

  2. iOS uygulama yapılandırması altındaki APN'ler kimlik doğrulama anahtarında , Yükle düğmesine tıklayın.

  3. Anahtarınızı kaydettiğiniz konuma göz atın, onu seçin ve Aç'a tıklayın. Anahtarın anahtar kimliğini ekleyin ( Apple Geliştirici Üye Merkezi'nde bulunur) ve Yükle'yi tıklayın.

Uzaktan bildirimler için kaydolun

Başlangıçta veya uygulama akışınızda istenen noktada, uygulamanızı uzaktan bildirimler için kaydedin. registerForRemoteNotifications gösterildiği gibi arayın:

Süratli


UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

Amaç-C


[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
    }];

[application registerForRemoteNotifications];

Kayıt belirtecine erişin

Varsayılan olarak FCM SDK, uygulama başlatıldığında istemci uygulaması örneği için bir kayıt belirteci oluşturur. APN'nin cihaz belirtecine benzer şekilde, bu belirteç, uygulamanızın belirli herhangi bir örneğine hedefli bildirimler göndermenize olanak tanır.

Apple platformlarının tipik olarak uygulama başlangıcında bir APNs cihaz belirteci sağlaması gibi, FCM de FIRMessagingDelegate 'ın messaging:didReceiveRegistrationToken: yöntemi aracılığıyla bir kayıt belirteci sağlar. FCM SDK, ilk uygulama başlatma sırasında ve belirteç her güncellendiğinde veya geçersiz kılındığında yeni veya mevcut bir belirteci alır. Her durumda, FCM SDK geçerli bir belirteçle messaging:didReceiveRegistrationToken: öğesini çağırır.

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

  • Uygulama yeni bir cihaza geri yüklendi
  • Kullanıcı uygulamayı kaldırır/yeniden yükler
  • Kullanıcı, uygulama verilerini temizler.

Mesajlaşma temsilcisini ayarla

Kayıt belirteçlerini almak için, mesajlaşma temsilci protokolünü uygulayın ve [FIRApp configure] çağırdıktan sonra FIRMessaging delegate özelliğini ayarlayın. Örneğin, uygulama temsilciniz mesajlaşma temsilci protokolüne uygunsa, application:didFinishLaunchingWithOptions: üzerindeki temsilciyi kendisine ayarlayabilirsiniz.

Süratli

Messaging.messaging().delegate = self

Amaç-C

[FIRMessaging messaging].delegate = self;

Geçerli kayıt jetonu getiriliyor

Kayıt belirteçleri, messaging:didReceiveRegistrationToken: yöntemi aracılığıyla teslim edilir. Bu yöntem, kayıt belirteciyle başlayan her uygulama için genellikle bir kez çağrılır. Bu yöntem çağrıldığında, aşağıdakiler için ideal zamandır:

  • Kayıt belirteci yeniyse, uygulama sunucunuza gönderin.
  • Kayıt jetonunu konulara abone olun. 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. Belirteç alımı herhangi bir şekilde başarısız olursa boş olmayan bir hata verilir.

Süratli

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)"
  }
}

Amaç-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;
  }
}];

Belirteci saklamak yerine erişmek için istediğiniz zaman bu yöntemi kullanabilirsiniz.

Belirteç yenilemesini izleyin

Belirteç her güncellendiğinde bilgilendirilmek için, mesajlaşma temsilci protokolüne uyan bir temsilci sağlayın. Aşağıdaki örnek, temsilciyi kaydeder ve uygun temsilci yöntemini ekler:

Süratli

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.
}

Amaç-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 kFIRMessagingRegistrationTokenRefreshNotification adlı bir NSNotification dinleyebilirsiniz. belirteç özelliği her zaman geçerli belirteç değerine sahiptir.

Swizzling devre dışı bırakıldı: APNs belirtecinizi ve kayıt belirtecinizi eşleme

Yöntem swizzling'i devre dışı bıraktıysanız veya bir SwiftUI uygulaması oluşturuyorsanız, APN'ler belirtecinizi FCM kayıt belirteciyle açıkça eşlemeniz gerekir. APNs belirtecini almak için application(_:didRegisterForRemoteNotificationsWithDeviceToken:) yöntemini uygulayın ve ardından Messaging 'in apnsToken özelliğini ayarlayın:

Süratli

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
}

Amaç-C

// With "FirebaseAppDelegateProxyEnabled": NO
- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [FIRMessaging messaging].APNSToken = deviceToken;
}

FCM kayıt jetonu oluşturulduktan sonra, swizzling'in etkin olduğu aynı yöntemleri kullanarak ona erişebilir ve yenileme olaylarını dinleyebilirsiniz.

Otomatik başlatmayı engelle

Bir FCM kayıt belirteci oluşturulduğunda kitaplık, tanımlayıcıyı ve yapılandırma verilerini Firebase'e yükler. Önce kullanıcılardan açık bir onay almak istiyorsanız, FCM'yi devre dışı bırakarak yapılandırma zamanında belirteç oluşturmayı önleyebilirsiniz. Bunu yapmak için Info.plist bir meta veri değeri ekleyin ( GoogleService-Info.plist değil):

FirebaseMessagingAutoInitEnabled = NO

FCM'yi yeniden etkinleştirmek için bir çalışma zamanı araması yapabilirsiniz:

Süratli

Messaging.messaging().autoInitEnabled = true

Amaç-C

[FIRMessaging messaging].autoInitEnabled = YES;

Bu değer, ayarlandıktan sonra uygulama yeniden başlatmalarında devam eder.

Sonraki adımlar

Apple istemcinizi kurduktan 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: