Catch up on everthing we announced at this year's Firebase Summit. Learn more

Menyiapkan aplikasi klien Firebase Cloud Messaging di platform Apple

Untuk aplikasi klien Apple, Anda dapat menerima payload notifikasi dan payload data hingga 4.000 byte melalui antarmuka APNs Firebase Cloud Messaging.

Untuk menulis kode klien di Objective-C atau Swift, sebaiknya gunakan FIRMessaging API. Contoh panduan memulai ini menyediakan kode contoh untuk kedua bahasa.

Untuk mengaktifkan pengiriman notifikasi push melalui APNs, Anda membutuhkan:

  • Kunci Autentikasi Notifikasi Push Apple untuk akun Apple Developer. Firebase Cloud Messaging akan menggunakan token ini untuk mengirim notifikasi push ke aplikasi yang diidentifikasi oleh ID Aplikasi.

  • Profil penyediaan untuk ID Aplikasi tersebut dengan notifikasi push diaktifkan. Selain itu, untuk menguji aplikasi ketika sedang dikembangkan, Anda memerlukan profil penyediaan untuk pengembangan guna mengizinkan perangkat Anda menjalankan aplikasi yang belum diluncurkan di App Store.

Anda membuat keduanya di Apple Developer Member Center.

Method swizzling di Firebase Cloud Messaging

FCM SDK menjalankan method swizzling pada dua area utama: memetakan token APNs ke token pendaftaran FCM, dan mencatat data analisis selama penanganan callback pesan downstream. Developer yang memilih untuk tidak menggunakan swizzling dapat menonaktifkannya dengan menambahkan flag FirebaseAppDelegateProxyEnabled di file Info.plist aplikasi dan menyetelnya ke NO (nilai boolean). Area terkait dalam panduan ini menyediakan contoh kode dengan method swizzling yang diaktifkan maupun tidak diaktifkan.

Menambahkan Firebase ke project Apple

Bagian ini membahas tugas-tugas yang mungkin telah diselesaikan jika fitur Firebase lainnya telah diaktifkan untuk aplikasi Anda. Khusus untuk FCM, Anda harus mengupload kunci autentikasi APNs dan mendaftar untuk notifikasi jarak jauh.

Prasyarat

  • Instal yang berikut:

    • Xcode 12.2 atau yang lebih baru
    • CocoaPods 1.10.0 atau yang lebih baru
  • Pastikan project Anda memenuhi persyaratan berikut:

    • Project Anda harus menargetkan versi platform berikut atau yang lebih baru:
      • iOS 10
      • macOS 10.12
      • tvOS 12
      • watchOS 6
  • Siapkan perangkat Apple fisik untuk menjalankan aplikasi Anda, dan selesaikan tugas-tugas berikut:

    • Dapatkan Kunci Autentikasi Notifikasi Push Apple untuk akun Apple Developer.
    • Di XCode, aktifkan Notifikasi Push di App > Capabilities.

Jika Anda belum memiliki project Xcode dan hanya ingin mencoba produk Firebase, download salah satu contoh panduan memulai.

Membuat project Firebase

Agar dapat menambahkan Firebase ke aplikasi Apple, Anda perlu membuat project Firebase yang akan dihubungkan ke aplikasi Anda. Buka bagian Memahami Project Firebase untuk mempelajari project Firebase lebih lanjut.

Mendaftarkan aplikasi ke Firebase

Setelah memiliki project Firebase, Anda dapat menambahkan aplikasi Apple ke dalamnya.

Buka artikel Memahami Project Firebase untuk mempelajari lebih lanjut praktik terbaik dan pertimbangan dalam menambahkan aplikasi ke project Firebase, termasuk cara menangani beberapa varian build.

  1. Buka Firebase console.

  2. Di bagian tengah halaman ringkasan project, klik ikon iOS+ untuk meluncurkan alur kerja penyiapan.

    Jika Anda sudah menambahkan aplikasi ke project Firebase, klik Add app untuk menampilkan opsi platform.

  3. Masukkan ID paket aplikasi Anda di kolom ID paket.

  4. (Opsional) Masukkan informasi lain aplikasi: Nama panggilan aplikasi dan ID App Store.

  5. Klik Daftarkan aplikasi.

Menambahkan file konfigurasi Firebase

  1. Klik Download GoogleService-Info.plist untuk mendapatkan file konfigurasi platform Apple Firebase Anda (GoogleService-Info.plist).

  2. Pindahkan file konfigurasi ke root project Xcode Anda. Jika diminta, pilih untuk menambahkan file konfigurasi ke semua target.

Jika memiliki beberapa ID paket dalam project, Anda harus mengaitkan setiap ID paket dengan aplikasi yang terdaftar di Firebase console, sehingga setiap aplikasi dapat memiliki file GoogleService-Info.plist sendiri.

Menambahkan Firebase SDK ke aplikasi

Sebaiknya gunakan CocoaPods untuk menginstal library Firebase. Namun, jika tidak ingin menggunakan CocoaPods, Anda bisa mengintegrasikan framework SDK secara langsung atau menggunakan Swift Package Manager.

Apakah Anda menggunakan salah satu contoh panduan memulai? Project Xcode dan Podfile (dengan pod) sudah ada, tetapi Anda masih perlu menambahkan file konfigurasi Firebase dan menginstal pod.

  1. Buat Podfile jika belum memilikinya:

    cd your-project-directory
    pod init
  2. Tambahkan pod Firebase yang ingin digunakan dalam aplikasi Anda ke Podfile tersebut.

    Anda dapat menambahkan produk Firebase yang didukung ke aplikasi Apple.

    Untuk mendapatkan pengalaman yang optimal saat menggunakan Firebase Cloud Messaging, sebaiknya aktifkan Google Analytics di project Anda. Selain itu, sebagai bagian dari penyiapan Analytics, Anda perlu menambahkan Firebase SDK untuk Analytics ke aplikasi Anda.

    Analytics diaktifkan

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    
    # For Analytics without IDFA collection capability, use this pod instead
    # pod ‘Firebase/AnalyticsWithoutAdIdSupport’
    
    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'

    Pelajari lebih lanjut IDFA, ID iklan tingkat perangkat, dalam dokumentasi Privasi Pengguna dan Penggunaan Data dan App Tracking Transparency Apple.

    Analytics tidak diaktifkan

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. Instal pod, lalu buka file .xcworkspace untuk melihat project di Xcode:

    pod install
    open your-project.xcworkspace

Mengupload kunci autentikasi APNs

Upload kunci autentikasi APNs Anda ke Firebase. Jika belum memiliki kunci autentikasi APNs, pastikan Anda membuatnya di Apple Developer Member Center.

  1. Pada project Anda di Firebase console, pilih ikon roda gigi, pilih Setelan Project, lalu pilih tab Cloud Messaging.

  2. Di kunci autentikasi APNs di bagian konfigurasi aplikasi iOS, klik tombol Upload.

  3. Cari lokasi tempat Anda menyimpan kunci, pilih lokasi tersebut, lalu klik Buka. Tambahkan ID kunci untuk kunci tersebut (tersedia di Apple Developer Member Center) dan klik Upload.

Melakukan inisialisasi Firebase di aplikasi

Anda harus menambahkan kode inisialisasi Firebase ke aplikasi. Impor modul Firebase dan konfigurasikan instance bersama seperti berikut ini:

  1. Impor modul Firebase di UIApplicationDelegate Anda:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. Konfigurasikan instance bersama FirebaseApp, biasanya ada dalam metode application:didFinishLaunchingWithOptions: aplikasi Anda:

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

Mendaftar untuk notifikasi jarak jauh

Saat aplikasi dimulai, atau pada waktu lain yang diinginkan dalam alur aplikasi, daftarkan aplikasi Anda untuk mengaktifkan notifikasi jarak jauh. Panggil registerForRemoteNotifications seperti yang ditunjukkan berikut:

Swift

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: { _, _ in }
  )
} else {
  let settings: UIUserNotificationSettings =
    UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Objective-C

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

Mengakses token pendaftaran

Secara default, FCM SDK membuat token pendaftaran untuk instance aplikasi klien saat peluncuran aplikasi. Serupa dengan token perangkat APNs, token ini dapat Anda gunakan untuk mengirimkan notifikasi bertarget ke instance tertentu dari aplikasi ini.

Dengan cara yang sama seperti ketika platform Apple mengirimkan token perangkat APNs pada saat aplikasi dimulai, FCM menyediakan token pendaftaran melalui metode messaging:didReceiveRegistrationToken: dari FIRMessagingDelegate. FCM SDK mengambil token baru atau yang ada saat peluncuran awal aplikasi dan setiap kali token diperbarui atau dibatalkan validasinya. Dalam semua kasus, FCM SDK memanggil messaging:didReceiveRegistrationToken: dengan token yang valid.

Token pendaftaran dapat berubah jika:

  • Aplikasi dipulihkan di perangkat baru
  • Pengguna melakukan uninstal/instal ulang aplikasi
  • Pengguna menghapus data aplikasi.

Menetapkan delegasi pesan

Untuk menerima token pendaftaran, terapkan protokol delegasi pesan dan tetapkan properti delegate dari FIRMessaging setelah memanggil [FIRApp configure]. Misalnya, jika delegasi aplikasi Anda sesuai dengan protokol delegasi pesan, Anda dapat menetapkan delegasi di application:didFinishLaunchingWithOptions: ke dirinya sendiri.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Mengambil token pendaftaran saat ini

Token pendaftaran dikirimkan melalui metode messaging:didReceiveRegistrationToken:. Biasanya metode ini dipanggil sekali pada saat aplikasi dimulai dengan token pendaftaran. Saat metode ini dipanggil, inilah saat yang tepat untuk:

  • Mengirim token pendaftaran ke server aplikasi jika token itu masih baru
  • Mengatur token pendaftaran agar berlangganan topik. Cara ini hanya diperlukan untuk langganan baru atau untuk situasi saat pengguna menginstal ulang aplikasi.

Anda dapat mengambil token secara langsung menggunakan token(completion:). Error yang bukan null diberikan jika pengambilan token gagal dengan cara apa pun.

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

Anda dapat menggunakan metode ini kapan saja untuk mengakses token, daripada menyimpannya.

Memantau refresh pada token

Agar mendapatkan pemberitahuan setiap kali token diperbarui, berikan delegasi yang sesuai dengan protokol delegasi pesan. Berikut ini contoh pendaftaran delegasi dan penambahan metode delegasi yang tepat:

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

Atau, Anda dapat memproses NSNotification yang bernama kFIRMessagingRegistrationTokenRefreshNotification, daripada memberikan metode delegasi. Properti token selalu memiliki nilai token saat ini.

Swizzling dinonaktifkan: memetakan token APNs dan token pendaftaran

Jika telah menonaktifkan method swizzling, Anda harus memetakan token APNs ke token pendaftaran FCM secara eksplisit. Ganti metode didRegisterForRemoteNotificationsWithDeviceToken untuk mengambil token APNs, lalu tetapkan properti APNSToken dari FIRMessaging:

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

Setelah token pendaftaran FCM dibuat, Anda dapat mengaksesnya dan memproses peristiwa refresh menggunakan metode yang sama dengan yang mengaktifkan swizzling.

Mencegah inisialisasi otomatis

Saat token pendaftaran FCM dibuat, library mengupload data konfigurasi dan ID ke Firebase. Jika ingin mendapatkan keikutsertaan eksplisit dari pengguna terlebih dahulu, Anda dapat mencegah pembuatan token pada saat konfigurasi dengan menonaktifkan FCM. Untuk melakukan ini, tambahkan nilai metadata ke Info.plist (bukan GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

Untuk mengaktifkan kembali FCM, Anda dapat membuat panggilan runtime:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

Nilai ini akan tetap sama setiap kali aplikasi dimulai ulang.

Langkah berikutnya

Setelah menyiapkan klien Apple, Anda siap untuk menambahkan penanganan pesan dan perilaku lainnya yang lebih canggih ke aplikasi Anda. Lihat panduan ini untuk mengetahui informasi lebih lanjut: