Thiết lập ứng dụng nhắn tin qua đám mây của Firebase trên các nền tảng của Apple

Đối với các ứng dụng khách của Apple, bạn có thể nhận thông báo và tải trọng dữ liệu lên tới 4096 byte qua giao diện APN của Giải pháp gửi thông báo qua đám mây của Firebase.

Để viết mã ứng dụng khách trong Target-C hoặc Swift, bạn nên sử dụng FIRMessaging API. Ví dụ về bắt đầu nhanh cung cấp mã mẫu cho cả hai ngôn ngữ.

Phương thức thay đổi nhanh trong Giải pháp gửi thông báo qua đám mây của Firebase

SDK FCM thực hiện thay đổi nhanh phương thức trong 2 khía cạnh chính: liên kết mã thông báo APN của bạn với mã thông báo đăng ký FCM và thu thập dữ liệu phân tích trong quá trình xử lý lệnh gọi lại thông báo truyền xuống. Các nhà phát triển không muốn sử dụng tính năng xoáy tròn có thể tắt tính năng này bằng cách thêm cờ FirebaseAppDelegateProxyEnabled vào tệp Info.plist của ứng dụng và đặt thành NO (giá trị boolean). Các phần liên quan trong hướng dẫn sẽ cung cấp ví dụ về mã, cả khi bật và không bật tính năng xoáy có phương thức.

Thêm Firebase vào dự án Apple

Thêm Firebase vào dự án Apple của bạn nếu bạn chưa thêm.

Tải khoá xác thực APN lên

Tải khoá xác thực APN của bạn lên Firebase. Nếu bạn chưa có khoá xác thực APN, hãy nhớ tạo một khoá trong Trung tâm thành viên dành cho nhà phát triển của Apple.

  1. Bên trong dự án của bạn trong bảng điều khiển của Firebase, hãy chọn biểu tượng bánh răng, chọn Cài đặt dự án, sau đó chọn thẻ Gửi thông báo qua đám mây.

  2. Trong khoá xác thực ANG ở bên dưới phần Cấu hình ứng dụng iOS, hãy nhấp vào nút Tải lên.

  3. Duyệt đến vị trí bạn đã lưu khoá, chọn khoá đó rồi nhấp vào Open (Mở). Thêm mã khoá của khoá (có trong Trung tâm thành viên dành cho nhà phát triển của Apple) rồi nhấp vào Tải lên.

Đăng ký nhận thông báo từ xa

Khi khởi động hoặc tại thời điểm mong muốn trong quy trình đăng ký của ứng dụng, hãy đăng ký thông báo từ xa cho ứng dụng của bạn. Gọi registerForRemoteNotifications như sau:

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

Truy cập vào mã thông báo đăng ký

Theo mặc định, SDK FCM sẽ tạo một mã thông báo đăng ký cho phiên bản ứng dụng khách khi khởi chạy ứng dụng. Tương tự như mã thông báo thiết bị APN, mã thông báo này cho phép bạn gửi thông báo được nhắm mục tiêu đến mọi phiên bản cụ thể của ứng dụng.

Giống như cách mà các nền tảng của Apple thường phân phối mã thông báo thiết bị APN khi khởi động ứng dụng, FCM cung cấp mã thông báo đăng ký qua phương thức messaging:didReceiveRegistrationToken: của FIRMessagingDelegate. SDK FCM truy xuất mã thông báo mới hoặc hiện có trong quá trình khởi chạy ứng dụng ban đầu và bất cứ khi nào mã thông báo được cập nhật hoặc không hợp lệ. Trong mọi trường hợp, SDK FCM sẽ gọi messaging:didReceiveRegistrationToken: bằng mã thông báo hợp lệ.

Mã thông báo đăng ký có thể thay đổi khi:

  • Ứng dụng đó được khôi phục trên một thiết bị mới
  • Người dùng gỡ cài đặt/cài đặt lại ứng dụng
  • Người dùng xoá dữ liệu ứng dụng.

Thiết lập tính năng uỷ quyền nhắn tin

Để nhận mã thông báo đăng ký, hãy triển khai giao thức uỷ quyền nhắn tin và đặt thuộc tính delegate của FIRMessaging sau khi gọi [FIRApp configure]. Ví dụ: nếu tính năng uỷ quyền ứng dụng của bạn tuân thủ giao thức uỷ quyền nhắn tin, thì bạn có thể thiết lập tính năng uỷ quyền trên application:didFinishLaunchingWithOptions: cho chính giao thức đó.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Đang tìm nạp mã thông báo đăng ký hiện tại

Mã thông báo đăng ký được phân phối qua phương thức messaging:didReceiveRegistrationToken:. Phương thức này thường được gọi một lần cho mỗi ứng dụng bắt đầu bằng mã thông báo đăng ký. Khi phương thức này được gọi, đây là thời điểm lý tưởng để:

  • Nếu mã thông báo đăng ký là mới, hãy gửi mã đó đến máy chủ ứng dụng của bạn.
  • Đăng ký mã thông báo đăng ký cho các chủ đề. Điều này chỉ bắt buộc đối với các gói thuê bao mới hoặc trong trường hợp người dùng đã cài đặt lại ứng dụng.

Bạn có thể truy xuất trực tiếp mã thông báo bằng cách sử dụng token(complete:). Lỗi không rỗng sẽ được cung cấp nếu truy xuất mã thông báo không thành công theo bất kỳ cách nào.

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

Bạn có thể sử dụng phương thức này bất cứ lúc nào để truy cập vào mã thông báo thay vì lưu trữ mã đó.

Giám sát quá trình làm mới mã thông báo

Để nhận thông báo mỗi khi mã thông báo được cập nhật, hãy cung cấp một thực thể uỷ quyền phù hợp với giao thức uỷ quyền nhắn tin. Ví dụ sau đây đăng ký phương thức uỷ quyền và thêm phương thức uỷ quyền phù hợp:

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

Ngoài ra, bạn có thể theo dõi NSNotification có tên kFIRMessagingRegistrationTokenRefreshNotification thay vì cung cấp phương thức uỷ quyền. Thuộc tính mã thông báo luôn có giá trị mã thông báo hiện tại.

Đã tắt tính năng xoay vòng: ánh xạ mã thông báo APN và mã thông báo đăng ký

Nếu đã tắt tính năng thay đổi nhanh phương thức hoặc đang tạo một ứng dụng SwiftUI, bạn cần liên kết rõ ràng mã thông báo APN của mình với mã thông báo đăng ký FCM. Triển khai phương thức application(_:didRegisterForRemoteNotificationsWithDeviceToken:) để truy xuất mã thông báo APN, sau đó đặt thuộc tính apnsToken của Messaging:

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

Sau khi tạo mã thông báo đăng ký FCM, bạn có thể truy cập vào mã đó và theo dõi các sự kiện làm mới bằng các phương thức tương tự như khi bật phương thức làm mới.

Ngăn việc khởi chạy tự động

Khi mã thông báo đăng ký FCM được tạo, thư viện sẽ tải dữ liệu cấu hình và giá trị nhận dạng lên Firebase. Nếu trước tiên, nếu muốn người dùng chọn tham gia rõ ràng, bạn có thể ngăn việc tạo mã thông báo tại thời điểm định cấu hình bằng cách tắt FCM. Để thực hiện việc này, hãy thêm giá trị siêu dữ liệu vào Info.plist (chứ không phải GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

Để bật lại FCM, bạn có thể thực hiện một lệnh gọi trong thời gian chạy:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

Giá trị này sẽ vẫn tồn tại khi ứng dụng khởi động lại sau khi đặt.

Các bước tiếp theo

Sau khi thiết lập ứng dụng Apple, bạn có thể thêm tính năng xử lý thông báo và các hành vi nâng cao hơn khác vào ứng dụng của mình. Hãy xem những hướng dẫn sau để biết thêm thông tin: