Buka konsol

Menyiapkan aplikasi klien Firebase Cloud Messaging di iOS

Untuk aplikasi klien iOS, Anda bisa menerapkan Firebase Cloud Messaging melalui dua cara yang saling melengkapi:

  • Menerima pesan push dasar hingga 4 KB melalui antarmuka Firebase Cloud Messaging APN.

  • Mengirim pesan upstream dan/atau menerima payload data downstream hingga 4 KB di aplikasi latar depan.

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

Method swizzling di Firebase Cloud Messaging

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

Menambahkan Firebase ke project iOS Anda

Bagian ini membahas tugas yang mungkin telah Anda selesaikan jika Anda telah mengaktifkan fitur Firebase lainnya untuk aplikasi Anda. Khusus untuk FCM, Anda harus mengupload kunci autentikasi APN dan mendaftar untuk notifikasi jarak jauh.

Prasyarat

  • Instal Xcode 10.1 atau versi yang lebih baru.

  • Instal CocoaPods 1.4.0 atau versi yang lebih baru.

  • Buka project Anda di Xcode.

    • Project Anda harus menargetkan iOS 8 atau versi yang lebih baru.

    • Project Swift harus menggunakan Swift 3.0 atau versi yang lebih baru.

  • Siapkan perangkat iOS fisik atau simulator iOS untuk menjalankan aplikasi Anda.

    • Untuk Cloud Messaging, Anda memerlukan:

      • Perangkat iOS fisik
      • Kunci Autentikasi Apple Notifikasi Push untuk akun Developer Apple
      • Di Xcode, aktifkan Notifikasi Push di App > Capabilities.
    • Untuk semua produk Firebase lainnya, Anda dapat menggunakan perangkat iOS fisik atau simulator iOS.

  • Login ke Firebase menggunakan Akun Google Anda.

Jika belum memiliki project Xcode, Anda dapat mendownload salah satu contoh panduan memulai kami jika Anda hanya ingin mencoba produk Firebase.

Membuat project Firebase

Agar dapat menambahkan Firebase ke aplikasi iOS, Anda perlu membuat project Firebase untuk terhubung ke aplikasi iOS. Buka bagian Memahami Project Firebase untuk mempelajari project Firebase lebih lanjut.

Mendaftarkan aplikasi Anda dengan Firebase

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

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

  1. Di tengah halaman ringkasan project Firebase console, klik ikon iOS untuk meluncurkan alur kerja penyiapan.

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

  2. Masukkan ID paket aplikasi Anda di kolom ID paket iOS

    • Temukan ID paket ini dengan membuka aplikasi Anda di XCode, lalu akses tab Umum di direktori Runner level teratas. Nilai kolom ID Paket adalah ID paket iOS (misalnya, com.yourcompany.yourproject).
  3. (Opsional) Masukkan informasi aplikasi lain seperti yang diminta oleh alur kerja penyiapan.

  4. Klik Daftarkan aplikasi.

Menambahkan file konfigurasi Firebase

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

    • Anda dapat mendownload file konfigurasi iOS Firebase lagi kapan saja.

    • Pastikan file konfigurasi tidak ditambahkan dengan karakter tambahan, seperti (2).

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

Jika Anda 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 Anda

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

Perlu diingat, jika Anda menggunakan salah satu contoh panduan memulai, project Xcode dan Podfile (dengan pod) sudah tersedia. Meskipun demikian, Anda tetap harus menambahkan file konfigurasi Firebase dan menginstal pod.

Anda dapat menambahkan produk Firebase yang didukung ke aplikasi iOS.

  1. Buat Podfile jika Anda belum memilikinya:

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

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

    Analytics diaktifkan

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'

    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 APN Anda

Upload kunci autentikasi APN Anda ke Firebase. Jika Anda belum memiliki kunci autentikasi APN, baca cara Mengonfigurasi APN dengan FCM.

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

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

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

Menginisialisasi Firebase di aplikasi Anda

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

  1. Impor modul Firebase di UIApplicationDelegate Anda:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. Konfigurasikan instance bersama FirebaseApp, yang 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

Baik saat startup maupun pada titik lain yang Anda inginkan dalam alur proses aplikasi, daftarkan aplikasi Anda untuk mendapatkan notifikasi jarak jauh. Panggil registerForRemoteNotifications seperti yang ditunjukkan:

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 APN, token ini dapat Anda gunakan untuk mengirimkan notifikasi yang ditargetkan ke instance tertentu dari aplikasi ini.

Dengan cara yang sama seperti ketika iOS mengirimkan token perangkat APN pada saat aplikasi dimulai, FCM menyediakan token pendaftaran melalui metode messaging:didReceiveRegistrationToken: milik 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 diaktifkan kembali di perangkat baru
  • Pengguna melakukan uninstal/instal ulang aplikasi
  • Pengguna menghapus data aplikasi.

Menyetel delegasi pengiriman pesan

Untuk menerima token pendaftaran, terapkan protokol delegasi pengiriman pesan dan tetapkan properti delegate milik FIRMessaging setelah memanggil [FIRApp configure]. Misalnya, jika delegasi aplikasi Anda sesuai dengan protokol delegasi pengiriman pesan, Anda dapat menetapkan delegasi di application:didFinishLaunchingWithOptions: untuk 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:

  • Jika token pendaftaran masih baru, kirim token tersebut ke server aplikasi.
  • 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 instanceIDWithHandler:. Callback ini menyediakan InstanceIDResult, yang berisi token. Error yang bukan null diberikan jika pengambilan InstanceID gagal dengan cara apa pun.

Swift

InstanceID.instanceID().instanceID { (result, error) in
  if let error = error {
    print("Error fetching remote instance ID: \(error)")
  } else if let result = result {
    print("Remote instance ID token: \(result.token)")
    self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
  }
}

Objective-C

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching remote instance ID: %@", error);
  } else {
    NSLog(@"Remote instance ID token: %@", result.token);
    NSString* message =
      [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
    self.instanceIDTokenMessage.text = message;
  }
}];

Umumnya, token tersedia secara lokal, sehingga metode ini tidak membuka koneksi jaringan. Anda dapat menggunakan metode ini kapan saja untuk mengakses token, dan bukan menyimpannya.

Memantau refresh pada token

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

Swift

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(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 mendeteksi NSNotification yang bernama kFIRMessagingRegistrationTokenRefreshNotification, daripada memasukkan metode delegasi. Properti token selalu memiliki nilai token saat ini.

Swizzling dinonaktifkan: memetakan token APN dan token pendaftaran Anda

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

Swift

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
  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 bisa mengakses token itu dan mendeteksi peristiwa refresh menggunakan metode yang sama dengan yang mengaktifkan swizzling.

Mengimpor token APN pengguna yang ada

Jika Anda memiliki basis pengguna yang ingin Anda aktivasikan di aplikasi klien FCM, gunakan API batchImport yang disediakan oleh ID Instance. Dengan API ini, Anda dapat mengimpor token APN secara massal ke dalam FCM dan memetakannya ke token pendaftaran baru yang valid.

Mencegah inisialisasi otomatis

FCM menghasilkan ID Instance yang digunakan sebagai token pendaftaran dalam FCM. Ketika ID Instance dibuat, library akan mengupload data ID dan konfigurasi ke Firebase. Jika ingin mendapatkan keikutsertaan eksplisit sebelum menggunakan ID Instance, Anda dapat mencegah pembuatan pada waktu 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 ada setiap kali aplikasi dimulai ulang.

Langkah berikutnya

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