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

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 các ứng dụng khách của Apple, bạn có thể nhận thông báo và tải dữ liệu lên đến 4000 byte qua giao diện APN của Firebase Cloud Messaging.

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

Để cho phép gửi thông báo đẩy qua APN, bạn cần:

  • Khóa xác thực thông báo đẩy của Apple cho tài khoản Nhà phát triển Apple của bạn. Nhắn tin qua đám mây Firebase sử dụng mã thông báo này để gửi thông báo đẩy tới ứng dụng được ID ứng dụng xác định.

  • Một hồ sơ provisioning cho rằng App ID với thông báo đẩy kích hoạt . Ngoài ra, để kiểm tra ứng dụng của bạn trong khi đang được phát triển, bạn cần có hồ sơ cấp phép để phát triển để cho phép thiết bị của bạn chạy một ứng dụng chưa được xuất bản trên App Store.

Bạn có thể tạo cả trong nhà phát triển của Apple Trung tâm thành viên .

Phương pháp thay đổi nhanh chóng trong Nhắn tin qua đám mây của Firebase

FCM SDK phương pháp Thực hiện swizzling trong hai lĩnh vực chính: lập bản đồ APN của bạn thẻ để đăng ký FCM token và thu thập dữ liệu phân tích trong xử lý thông điệp callback hạ lưu . Phát triển những người không thích sử dụng swizzling có thể vô hiệu hóa nó bằng cách thêm cờ FirebaseAppDelegateProxyEnabled trong file Info.plist của ứng dụng và cài đặt nó vào NO (giá trị boolean). Các khu vự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 bật phương pháp swizzling.

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

Phần này bao gồm các nhiệm vụ bạn có thể đã hoàn thành nếu bạn đã bật các tính năng Firebase khác cho ứng dụng của mình. Đối với FCM cụ thể, bạn sẽ cần phải tải trọng APN xác thực của bạnđăng ký thông báo từ xa .

Điều kiện tiên quyết

  • Cài đặt như sau:

    • Xcode 12.5 trở lên
  • Đảm bảo rằng dự án của bạn đáp ứng các yêu cầu sau:

    • Dự án của bạn phải nhắm mục tiêu các phiên bản nền tảng này trở lên:
      • iOS 10
      • macOS 10.12
      • tvOS 12
      • watchOS 6
  • Thiết lập một thiết bị của Apple vật lý để chạy ứng dụng của bạn, và hoàn thành các nhiệm vụ:

Nếu bạn chưa có một dự án Xcode và chỉ muốn thử ra một sản phẩm căn cứ hỏa lực, bạn có thể tải về một trong chúng tôi mẫu QuickStart .

Tạo dự án Firebase

Trước khi có thể thêm Firebase vào ứng dụng Apple của mình, bạn cần tạo một dự án Firebase để kết nối với ứng dụng của mình. Thăm Hiểu căn cứ hỏa lực dự án để tìm hiểu thêm về các dự án căn cứ hỏa lực.

Đăng ký ứng dụng của bạn với Firebase

Sau khi có dự án Firebase, bạn có thể thêm ứng dụng Apple của mình vào đó.

Thăm Hiểu dự án căn cứ hỏa lực để tìm hiểu thêm về thực tiễn tốt nhất và cân nhắc để thêm các ứng dụng cho một dự án căn cứ hỏa lực, bao gồm cách xử lý nhiều build biến thể.

  1. Tới các căn cứ hỏa lực console .

  2. Ở trung tâm của trang tổng quan về dự án, nhấp vào biểu tượng iOS + để khởi động công việc cài đặt.

    Nếu bạn đã thêm vào một ứng dụng cho dự án căn cứ hỏa lực của bạn, nhấp vào Thêm ứng dụng để hiển thị các tùy chọn nền tảng.

  3. Nhập của ứng dụng của bạn ID bó trong lĩnh vực ID bó.

  4. (Tùy chọn) Nhập thông tin ứng dụng khác: App nicknameApp Store ID.

  5. Bấm vào Đăng ký ứng dụng.

Thêm tệp cấu hình Firebase

  1. Nhấp vào Tải xuống GoogleService-Info.plist để có được nền tảng căn cứ hỏa lực của Apple cấu hình của bạn tập tin ( GoogleService-Info.plist ).

  2. Di chuyển tệp cấu hình của bạn vào thư mục gốc của dự án Xcode của bạn. Nếu được nhắc, hãy chọn thêm tệp cấu hình vào tất cả các mục tiêu.

Nếu bạn có nhiều bó ID trong dự án của bạn, bạn phải kết hợp mỗi bó ID với một ứng dụng đã đăng ký trong các căn cứ hỏa lực console để mỗi ứng dụng có thể có của riêng mình GoogleService-Info.plist tập tin.

Thêm SDK Firebase vào ứng dụng của bạn

Sử dụng Trình quản lý gói Swift để cài đặt và quản lý các phần phụ thuộc của Firebase.

  1. Trong Xcode, với dự án ứng dụng của bạn mở, điều hướng tới File> Swift gói> Thêm gói phụ thuộc.
  2. Khi được nhắc, hãy thêm kho lưu trữ SDK nền tảng Apple Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Chọn thư viện Nhắn tin qua đám mây của Firebase.
  5. Đối với một kinh nghiệm tối ưu với căn cứ hỏa lực Cloud Messaging, chúng tôi khuyên phép Google Analytics trong dự án căn cứ hỏa lực của bạn và thêm SDK căn cứ hỏa lực cho Google Analytics để ứng dụng của bạn. Bạn có thể chọn thư viện không có bộ sưu tập IDFA hoặc có bộ sưu tập IDFA.
  6. Khi hoàn tất, Xcode sẽ tự động bắt đầu giải quyết và tải xuống các phần phụ thuộc của bạn trong nề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ó một chìa khóa APN xác thực, hãy chắc chắn để tạo ra một trong những nhà phát triển của Apple Trung tâm thành viên .

  1. Bên trong dự án của bạn trong căn cứ hỏa lực console, chọn biểu tượng bánh răng, chọn Cài đặt dự án, và sau đó chọn tab Cloud Messaging.

  2. Trong chính xác thực APN theo cấu hình ứng dụng iOS, nhấp vào nút Upload.

  3. Duyệt đến vị trí mà bạn đã lưu chìa khóa của bạn, chọn nó và nhấn Open. Thêm ID key cho phím (có sẵn trong các nhà phát triển của Apple Trung tâm thành viên ) và nhấn Upload.

Khởi tạo Firebase trong ứng dụng của bạn

Bạn sẽ cần thêm mã khởi tạo Firebase vào ứng dụng của mình. Nhập mô-đun Firebase và định cấu hình phiên bản được chia sẻ như được hiển thị:

  1. Nhập module căn cứ hỏa lực trong bạn UIApplicationDelegate :

    Nhanh

    import Firebase

    Objective-C

    @import Firebase;
  2. Cấu hình một FirebaseApp chia sẻ Ví dụ, điển hình là trong ứng dụng của bạn application:didFinishLaunchingWithOptions: phương pháp:

    Nhanh

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

    Objective-C

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

Đăng ký nhận 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ư:

Nhanh

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

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

Theo mặc định, FCM SDK 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.

Trong cùng một cách mà nền tảng của Apple thường cung cấp một thiết bị APN mã thông báo khởi động ứng dụng, FCM cung cấp một mã thông báo đăng ký qua FIRMessagingDelegate 's messaging:didReceiveRegistrationToken: phương pháp. 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 mất hiệu lực. Trong mọi trường hợp, FCM SDK gọi messaging:didReceiveRegistrationToken: với 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 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

Tiếp nhận thẻ đăng ký, thực hiện các giao thức thông điệp đại biểu và thiết lập FIRMessaging 's delegate bất động sản sau khi gọi [FIRApp configure] . Ví dụ, nếu đại biểu ứng dụng của bạn phù hợp với các chuẩn truyền thông đại biểu, bạn có thể thiết lập các đại biểu về application:didFinishLaunchingWithOptions: cho chính nó.

Nhanh

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

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

Thẻ đăng ký được gửi qua các phương pháp messaging:didReceiveRegistrationToken: . Phương thức này thường được gọi một lần khi mỗi ứng dụng bắt đầu với 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 nó đế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 đăng ký mới hoặc trong các trường hợp người dùng đã cài đặt lại ứng dụng.

Bạn có thể lấy thẻ trực tiếp sử dụng thẻ (hoàn thành :) . Lỗi không rỗng đượ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)"
  }
}

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

Làm mới mã thông báo giám sát

Để đượ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 phù hợp với giao thức đại biểu 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.
}

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ể lắng nghe một NSNotification tên kFIRMessagingRegistrationTokenRefreshNotification chứ không phải là cung cấp một phương pháp đại biểu. 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 Swizzling: ánh xạ mã thông báo APN và mã thông báo đăng ký của bạn

Nếu bạn đã vô hiệu hóa phương pháp swizzling, 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. Ghi đè lên các phương pháp didRegisterForRemoteNotificationsWithDeviceToken để lấy APN Token, và sau đó đặt FIRMessaging 's APNSToken bất động sản:

Nhanh

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 mã thông báo đăng ký FCM được tạo, bạn có thể truy cập nó và lắng nghe các sự kiện làm mới bằng các phương pháp tương tự như khi bật swizzling.

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

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

FirebaseMessagingAutoInitEnabled = NO

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

Nhanh

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

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

Bước tiếp theo

Sau khi thiết lập ứng dụng khách Apple, bạn đã sẵn sàng thêm xử lý tin nhắn và các 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: