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.
-
Firebase konsolunda projenizin içinde, dişli simgesini ve Proje Ayarları'nı, ardından Cloud Messaging sekmesini seçin.
-
iOS uygulama yapılandırması bölümündeki APNs kimlik doğrulama anahtarı'nda Yükle düğmesini tıklayın.
-
Anahtarınızı kaydettiğiniz konuma gidin, anahtarı seçin ve Aç'ı 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: