Thiết lập ứng dụng Giải pháp gửi thông báo 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 đến 4096 byte trên giao diện APN Firebase Cloud Messaging.

Để viết mã ứng dụng khách trong Target-C hoặc Swift, bạn nên sử dụng FIRMessaging API. Chiến lược phát hành đĩa đơn ví dụ về tính năng bắt đầu nhanh sẽ cung cấp mã mẫu cho cả hai ngôn ngữ.

Phương thức tạo xoáy trong Firebase Cloud Messaging

SDK FCM thực hiện một số phương thức nhanh chóng ở 2 khía cạnh chính: liên kết mã thông báo APN vào mã thông báo đăng ký FCM và thu thập dữ liệu phân tích trong khoảng thời gian 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 thích sử dụng swizzling có thể tắt tính năng này bằng cách thêm cờ FirebaseAppDelegateProxyEnabled vào tệp Info.plist và đặt thành NO (giá trị boolean). Các lĩnh vực liên quan của hướng dẫn sẽ cung cấp các ví dụ về mã, cả khi có và không có bật tính năng tạo nhanh phương thức.

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

Nếu bạn chưa làm như vậy, thêm Firebase vào dự án Apple của bạn.

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 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 Firebase, hãy chọn biểu tượng bánh răng, chọn Project Settings (Cài đặt dự án), sau đó chọn Thẻ Giải pháp gửi thông báo qua đám mây.

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

  3. Duyệt tới vị trí bạn đã lưu khoá của mình, chọn khoá đó rồi nhấp vào Mở. Thêm mã khoá cho 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 bạn, đăng ký ứng dụng của bạn để nhận thông báo từ xa. Gọi điện registerForRemoteNotifications như minh hoạ:

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 đến vào phiên bản cụ thể bất kỳ của ứng dụng.

Tương tự như cách mà các nền tảng của Apple thường cung cấp 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ý quaFIRMessagingDelegate messaging:didReceiveRegistrationToken:. SDK FCM truy xuất mộ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 bị mất hiệu lực. Trong mọi trường hợp, SDK FCM sẽ gọi messaging:didReceiveRegistrationToken: có 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 tính năng uỷ quyền nhắn tin giao thức và thiết lập thuộc tính delegate của FIRMessaging sau khi gọi [FIRApp configure]. Ví dụ: nếu ứng dụng uỷ quyền của bạn tuân theo phương thức uỷ quyền thông báo giao thức, bạn có thể đặt ủy quyền trên application:didFinishLaunchingWithOptions: cho chính nó.

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 thông qua phương thức messaging:didReceiveRegistrationToken:. Phương thức này thường được gọi một lần mỗi ứng dụng sẽ 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 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ể trực tiếp truy xuất 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 mã thông báo thay vì lưu trữ nó.

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

Để được thông báo mỗi khi mã thông báo được cập nhật, hãy cung cấp thực thể đại diện phù hợp vào giao thức uỷ quyền nhắn tin. Ví dụ sau đây đăng ký uỷ quyền và thêm phương thức uỷ quyền thích 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ể nghe 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: hãy liên kết mã thông báo APN của bạn và mã thông báo đăng ký

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

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ách sử dụng các phương pháp tương tự như với thao tác nhanh bật.

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 giá trị nhận dạng và dữ liệu cấu hình cho Firebase. Nếu bạn muốn nhận được chọn cho phép từ người dùng trước, 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 vô hiệu hoá 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ý tin nhắn và các hành vi khác nâng cao hơn cho ứng dụng của bạn. Hãy xem những hướng dẫn sau để biết thêm thông tin: