了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

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

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

Để viết mã máy khách của bạn trong Objective-C hoặc Swift, chúng tôi khuyên bạn nên sử dụng FIRMessaging API . Ví dụ khởi động nhanh cung cấp mã mẫu cho cả hai ngôn ngữ.

Phương pháp swizzling trong Firebase Cloud Messaging

FCM SDK thực hiện phương pháp swizzling trong hai lĩnh vực chính: ánh xạ 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ý gọi lại thông báo xuôi dòng . Các nhà phát triển không muốn sử dụng tính nă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 của ứng dụng và đặt thành NO (giá trị boolean). Các khu vực có liên quan của hướng dẫn cung cấp các ví dụ về mã, cả khi có và không kích hoạt phương thức swizzling.

Thêm Firebase vào dự án Apple của bạn

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

Tải lên khóa xác thực APN của bạn

Tải khóa xác thực APN của bạn lên Firebase. Nếu bạn chưa có khóa xác thực APN, hãy đảm bảo tạo một khóa trong Trung tâm thành viên 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 Cài đặt dự án rồi chọn tab Nhắn tin qua đám mây .

  2. Trong khóa xác thực APN bên dưới 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í mà bạn đã lưu khóa của mình, chọn nó và nhấp vào Mở . Thêm ID khóa cho khóa (có sẵn trong Trung tâm thành viên dành cho nhà phát triển của Apple ) và nhấp vào Tải lên .

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

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

Nhanh


UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

Mục tiêu-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 mã thông báo đăng ký

Theo mặc định, SDK FCM tạo 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 bất kỳ phiên bản cụ thể nào của ứng dụng của bạn.

Cũ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 FIRMessagingDelegate 's messaging:didReceiveRegistrationToken: SDK FCM truy xuất mã thông báo mới hoặc hiện có trong lần khởi chạy ứng dụng đầu tiên và bất cứ khi nào mã thông báo được cập nhật hoặc vô hiệu hóa. Trong mọi trường hợp, SDK FCM gọi messaging:didReceiveRegistrationToken: bằng một 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 xóa dữ liệu ứng dụng.

Đặt đại biểu nhắn tin

Để nhận mã thông báo đăng ký, hãy triển khai giao thức ủy 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 ứng dụng ủy quyền của bạn tuân thủ giao thức ủy quyền nhắn tin, bạn có thể đặt ủy quyền trên application:didFinishLaunchingWithOptions: thành chính nó.

Nhanh

Messaging.messaging().delegate = self

Mục tiêu-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 gửi qua phương thức messaging:didReceiveRegistrationToken: . Phương pháp 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, đó là thời điểm lý tưởng để:

  • Nếu mã thông báo đăng ký là mới, hãy gửi nó đến máy chủ ứng dụng của bạn.
  • Theo dõi mã thông báo đăng ký cho các chủ đề. Điều này chỉ được yêu cầu đối với đăng ký 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 mã thông báo trực tiếp bằng mã thông báo (hoàn thành:) . Lỗi non null đượ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.

Nhanh

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)"
  }
}

Mục tiêu-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 pháp này bất cứ lúc nào để truy cập mã thông báo thay vì lưu trữ.

Giám sát làm mới mã thông báo

Để được thông báo bất cứ khi nào mã thông báo được cập nhật, hãy cung cấp một đại biểu tuân theo giao thức ủy nhiệm nhắn tin. Ví dụ sau đăng ký đại biểu và thêm phương thức đại biểu thích hợp:

Nhanh

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

Mục tiêu-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ể lắng nghe NSNotification có tên kFIRMessagingRegistrationTokenRefreshNotification thay vì cung cấp phương thức ủy 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.

Swizzling bị vô hiệu hóa: ánh xạ mã thông báo APN và mã thông báo đăng ký của bạn

Nếu bạn đã tắt phương thức swizzling hoặc bạn đang xây dựng ứng dụng SwiftUI, bạn sẽ cần ánh xạ 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 application(_:didRegisterForRemoteNotificationsWithDeviceToken:) để truy xuất mã thông báo APN, sau đó đặt thuộc tính apnsToken của Messaging :

Nhanh

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
}

Mục tiêu-C

// With "FirebaseAppDelegateProxyEnabled": NO
- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [FIRMessaging messaging].APNSToken = deviceToken;
}

Sau khi mã thông báo đăng ký FCM được tạo, bạn có thể truy cập mã thông báo đó và lắng nghe 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ư khi bật swizzling.

Ngăn khởi tạo tự động

Khi mã thông báo đăng ký FCM được tạo, thư viện sẽ tải mã định danh và dữ liệu cấu hình lên Firebase. Nếu bạn muốn nhận được sự đồng ý rõ ràng từ người dùng trước tiên, 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. Để làm điều này, hãy thêm một giá trị siêu dữ liệu vào Info.plist của bạn (không phải GoogleService-Info.plist của bạn):

FirebaseMessagingAutoInitEnabled = NO

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

Nhanh

Messaging.messaging().autoInitEnabled = true

Mục tiêu-C

[FIRMessaging messaging].autoInitEnabled = YES;

Giá trị này vẫn tồn tại trong các lần khởi động lại ứng dụng sau khi được đặt.

Bước tiếp theo

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