Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Thiết lập ứng dụng khách Firebase Cloud Messaging trên iOS

Đối với các ứng dụng khách iOS, bạn có thể nhận được thông báo và tải trọng dữ liệu lên tới 4KB qua giao diện APNs của Firebase Cloud Messaging.

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

Phương pháp thay đổi trong Firebase Cloud Messaging

SDK FCM thực hiện phương pháp quét trong hai khu vực chính: ánh xạ mã thông báo APN của bạn sang 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 tin nhắn xuôi dòng . Các nhà phát triển 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 tệp Info.plist của ứng dụng và đặt thành 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ụ mã, cả có và không có phương thức swizzling được kích hoạt.

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

Phần này bao gồm các tác 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 tải lên khóa xác thực APN của mìnhđăng ký thông báo từ xa .

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

  • Cài đặt như sau:

    • Xcode 10.3 trở lên
    • CacaoPods 1.4.0 trở lên
  • Hãy chắc chắn 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 iOS 8 trở lên.
  • Thiết lập thiết bị iOS vật lý để chạy ứng dụng của bạn và hoàn thành các tác vụ sau:

Nếu bạn chưa có dự án Xcode và chỉ muốn dùng thử sản phẩm Firebase, bạn có thể tải xuống một trong những mẫu khởi động nhanh của chúng tôi.

Tạo một dự án Firebase

Trước khi bạn có thể thêm Firebase vào ứng dụng iOS của mình, bạn cần tạo dự án Firebase để kết nối với ứng dụng iOS của mình. Truy cập Hiểu các dự án Firebase để tìm hiểu thêm về các dự án Firebase.

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

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

Truy cập Hiểu các Dự án Firebase để tìm hiểu thêm về các thực tiễn và cân nhắc tốt nhất để thêm ứng dụng vào dự án Firebase, bao gồm cách xử lý nhiều biến thể xây dựng.

  1. Chuyển đến bảng điều khiển Firebase .

  2. Ở trung tâm của trang tổng quan dự án, nhấp vào biểu tượng iOS ( ) để khởi chạy quy trình thiết lập.

    Nếu bạn đã thêm một ứng dụng vào dự án Firebase của mình, hãy 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 ID gói ứng dụng của bạn vào trường ID gói iOS .

  4. (Tùy chọn) Nhập thông tin ứng dụng khác: Biệt hiệu ứng dụngID cửa hàng ứng dụng .

  5. Nhấp 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 để lấy tệp cấu hình Firebase iOS của bạn ( 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 cho tất cả các mục tiêu.

Nếu bạn có nhiều ID gói trong dự án của mình, bạn phải liên kết từng ID gói với ứng dụng đã đăng ký trong bảng điều khiển Firebase để mỗi ứng dụng có thể có tệp GoogleService-Info.plist .

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

Chúng tôi khuyên bạn nên sử dụng CocoaPods để cài đặt thư viện Firebase. Tuy nhiên, nếu bạn không muốn sử dụng CocoaPods, bạn có thể tích hợp trực tiếp các khung SDK .

Bạn đang sử dụng một trong những mẫu quickstart ? Dự án Xcode và Podfile (có nhóm) đã có sẵn, nhưng bạn vẫn cần thêm tệp cấu hình Firebasecài đặt nhóm.

  1. Tạo một Podfile nếu bạn chưa có:

    cd your-project-directory 
    pod init
  2. Vào Podfile của bạn, hãy thêm các nhóm Firebase mà bạn muốn sử dụng trong ứng dụng của mình.

    Bạn có thể thêm bất kỳ sản phẩm Firebase nào được hỗ trợ vào ứng dụng iOS của mình.

    Để có trải nghiệm tối ưu với Firebase Cloud Messaging, chúng tôi khuyên bạn nên bật Google Analytics trong dự án của mình. Ngoài ra, là một phần của việc thiết lập Analytics, bạn cần thêm SDK Firebase cho Analytics vào ứng dụng của mình.

    Đã bật phân tích

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

    Phân tích không được bật

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. Cài đặt các nhóm, sau đó mở tệp .xcworkspace của bạn để xem dự án trong Xcode:

    pod install
    open your-project .xcworkspace

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 xem Định cấu hình APN bằng FCM .

  1. Bên trong dự án của bạn trong bảng điều khiển Firebase, chọn biểu tượng bánh răng, chọn Cài đặt dự án và sau đó chọn tab Tin nhắn trên đám mây .

  2. Trong khóa xác thực APN trong cấu hình ứng dụng iOS , nhấp vào nút Tải lên .

  3. Duyệt đến vị trí bạn đã lưu khóa, chọn nó và nhấp vào Mở . Thêm ID khóa cho khóa (có sẵn trong Chứng chỉ, Số nhận dạng & Cấu hình trong Trung tâm thành viên nhà phát triển của Apple ) và nhấp vào Tải lên .

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 một thể hiện được chia sẻ như được hiển thị:

  1. Nhập mô-đun Firebase trong UIApplicationDelegate của bạn:

    Nhanh

    import Firebase

    Mục tiêu-C

    @import Firebase;
  2. Định cấu hình phiên bản chia sẻ FirebaseApp , thường là trong ứng dụng của ứng dụng của bạn application:didFinishLaunchingWithOptions: phương thức:

    Nhanh

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

    Mục tiêu-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ư được hiển thị:

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()

Mục tiêu-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, 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ỳ trường hợp cụ thể nào của ứng dụng của bạn.

Trong cùng một cách mà iOS 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 lấy 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 gọi messaging:didReceiveRegistrationToken: với 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 FIRMessaging tính delegate của FIRMessaging sau khi gọi [FIRApp configure] . Ví dụ: nếu đại biểu ứng dụng của bạn tuân thủ giao thức ủy quyền nhắn tin, bạn có thể đặt đại biểu trên application:didFinishLaunchingWithOptions: cho chính nó.

Nhanh

Messaging.messaging().delegate = self

Mục tiêu-C

[FIRMessaging messaging].delegate = self;

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 pháp này được gọi chung 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 cho các đăng ký mới hoặc cho các tình huống 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 instanceIDWithHandler : . Cuộc gọi lại này cung cấp một InstanceIDResult , chứa mã thông báo. Một lỗi không null được cung cấp nếu việc truy xuất InstanceID không thành công theo bất kỳ cách nào.

Nhanh

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

Mục tiêu-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;
  }
}];

Nói chung, mã thông báo có sẵn cục bộ, vì vậy phương pháp này không mở kết nối mạng. 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 phù hợp với giao thức ủy quyền nhắn tin. Ví dụ sau đăng ký đại biểu và thêm phương thức ủy nhiệm thích hợp:

Nhanh

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

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ể nghe một NSNotification có tên kFIRMessagingRegistrationTokenRefreshNotification thay vì cung cấp một phương thức ủy nhiệm. 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 đã vô hiệu hóa phương thức thay đổi, bạn sẽ cần ánh xạ rõ ràng mã thông báo APN của mình sang mã thông báo đăng ký FCM. Ghi đè các phương thức didRegisterForRemoteNotificationsWithDeviceToken để lấy mã thông báo APN, sau đó đặt FIRMessaging của APNSToken :

Nhanh

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
  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 vào nó 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 tính năng quét.

Nhập mã thông báo APN người dùng hiện có

Nếu bạn có một cơ sở người dùng hiện có mà bạn muốn đưa lên ứng dụng khách FCM, hãy sử dụng API batchImport được cung cấp bởi Instance ID. Với API này, bạn có thể nhập hàng loạt mã thông báo APN iOS hiện có vào FCM, ánh xạ chúng sang mã thông báo đăng ký mới, hợp lệ.

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

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

FirebaseMessagingAutoInitEnabled = NO

Để kích hoạ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 trên ứng dụng khởi động lại sau khi được đặt.

Bước tiếp theo

Sau khi bạn đã thiết lập ứng dụng khách iOS của mình, 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 bạn. Xem những hướng dẫn này để biết thêm thông tin: