Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

ตั้งค่าแอพไคลเอนต์ Firebase Cloud Messaging บน iOS

สำหรับแอปไคลเอ็นต์ iOS คุณสามารถรับการแจ้งเตือนและเพย์โหลดข้อมูลสูงสุด 4000 ไบต์ผ่านอินเทอร์เฟซ Firebase Cloud Messaging APN

การเขียนรหัสของลูกค้าใน Objective-C หรือสวิฟท์เราขอแนะนำให้คุณใช้ FIRMessaging API ตัวอย่าง QuickStart แสดงตัวอย่างรหัสสำหรับทั้งสองภาษา

ในการเปิดใช้งานการส่งการแจ้งเตือนแบบพุชผ่าน APN คุณต้อง:

  • รหัสการตรวจสอบสิทธิ์การแจ้งเตือนแบบพุชของ Apple สำหรับบัญชีนักพัฒนา Apple ของคุณ Firebase Cloud Messaging ใช้โทเค็นนี้เพื่อส่งการแจ้งเตือนแบบพุชไปยังแอปพลิเคชันที่ระบุโดย ID แอป

  • รายละเอียดการจัดเตรียมสำหรับการที่ App ID ที่มี การแจ้งเตือนผลักดันการเปิดใช้งาน นอกจากนี้ ในการทดสอบแอปของคุณในขณะที่อยู่ระหว่างการพัฒนา คุณต้องมีโปรไฟล์การจัดเตรียมสำหรับการพัฒนาเพื่ออนุญาตให้อุปกรณ์ของคุณเรียกใช้แอปที่ยังไม่ได้เผยแพร่บน App Store

คุณสามารถสร้างทั้งใน แอปเปิ้ลผู้พัฒนาศูนย์สมาชิก

วิธีการ swizzling ใน Firebase Cloud Messaging

FCM SDK วิธีการดำเนินการ swizzling ในสองประเด็นสำคัญ: การทำแผนที่ของคุณ APNs โทเค็น การลงทะเบียน FCM โทเค็นและจับข้อมูลการวิเคราะห์ในระหว่างการ จัดการข้อความโทรกลับปลายน้ำ นักพัฒนาที่ไม่ต้องการใช้ swizzling สามารถปิดการใช้งานโดยการเพิ่มธง FirebaseAppDelegateProxyEnabled ในไฟล์ Info.plist ของแอปและการตั้งค่าให้ไม่ (ค่าบูลีน) พื้นที่ที่เกี่ยวข้องของคำแนะนำให้ตัวอย่างโค้ด ทั้งที่มีและไม่มีการเปิดใช้วิธีการวนซ้ำ

เพิ่ม Firebase ให้กับโปรเจ็กต์ iOS ของคุณ

ส่วนนี้ครอบคลุมงานที่คุณอาจทำเสร็จแล้ว หากคุณได้เปิดใช้งานคุณลักษณะ Firebase อื่นๆ สำหรับแอปของคุณแล้ว สำหรับ FCM เฉพาะคุณจะต้อง อัปโหลดที่สำคัญการตรวจสอบ APNs ของคุณ และ ลงทะเบียนสำหรับการแจ้งเตือนระยะไกล

ข้อกำหนดเบื้องต้น

  • ติดตั้งสิ่งต่อไปนี้:

    • Xcode 12.2 หรือใหม่กว่า
    • CocoaPods 1.10.0 หรือใหม่กว่า
  • ตรวจสอบให้แน่ใจว่าโครงการของคุณตรงตามข้อกำหนดเหล่านี้:

    • โปรเจ็กต์ของคุณต้องกำหนดเป้าหมายเป็น iOS 10 หรือใหม่กว่า
  • ตั้งค่าอุปกรณ์ iOS ทางกายภาพเพื่อใช้ app ของคุณและให้งานเหล่านี้:

หากคุณไม่ได้มีโครงการ Xcode และเพียงแค่ต้องการที่จะลองผลิตภัณฑ์ Firebase คุณสามารถดาวน์โหลดหนึ่งของเรา ตัวอย่าง QuickStart

สร้างโปรเจ็กต์ Firebase

ก่อนที่คุณจะเพิ่ม Firebase ลงในแอป iOS ได้ คุณต้องสร้างโปรเจ็กต์ Firebase เพื่อเชื่อมต่อกับแอป iOS ของคุณ เยี่ยมชม เข้าใจ Firebase โครงการ เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับโครงการ Firebase

ลงทะเบียนแอปของคุณด้วย Firebase

หลังจากคุณมีโปรเจ็กต์ Firebase แล้ว คุณสามารถเพิ่มแอป iOS ลงไปได้

เยี่ยมชม เข้าใจโครงการ Firebase ที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการปฏิบัติที่ดีที่สุดและการพิจารณาสำหรับการเพิ่มแอพพลิเคกับโครงการ Firebase รวมถึงวิธีการจัดการกับการสร้างสายพันธุ์หลาย

  1. ไปที่ คอนโซล Firebase

  2. ในใจกลางของหน้าภาพรวมโครงการให้คลิกที่ไอคอน iOS ( ) ที่จะเปิดตัวเวิร์กโฟลว์การติดตั้ง

    หากคุณได้เพิ่มแอพในโครงการ Firebase ของคุณให้คลิกเพิ่มแอปเพื่อแสดงตัวเลือกแพลตฟอร์ม

  3. ใส่รหัสชุดของแอปในช่องรหัสกำ iOS

  4. (อุปกรณ์เสริม) ป้อนข้อมูลตรวจสอบอื่น ๆ : ชื่อเล่น App และ App Store ID

  5. คลิกแอปสมัครสมาชิก

เพิ่มไฟล์การกำหนดค่า Firebase

  1. คลิกดาวน์โหลด GoogleService-Info.plist ที่จะได้รับไฟล์ config Firebase iOS ของคุณ ( GoogleService-Info.plist )

  2. ย้ายไฟล์ปรับแต่งของคุณไปที่รูทของโปรเจ็กต์ Xcode หากได้รับแจ้ง ให้เลือกเพื่อเพิ่มไฟล์กำหนดค่าไปยังเป้าหมายทั้งหมด

หากคุณมีรหัสมัดในหลายโครงการของคุณคุณต้องเชื่อมโยง ID แต่ละมัดกับแอปที่ลงทะเบียนใน Firebase คอนโซลเพื่อให้แอปแต่ละคนสามารถมีของตัวเอง GoogleService-Info.plist ไฟล์

เพิ่ม Firebase SDK ให้กับแอปของคุณ

เราขอแนะนำให้ใช้ CocoaPods การติดตั้งห้องสมุด Firebase แต่ถ้าคุณไม่ต้องการใช้ CocoaPods คุณสามารถ บูรณาการกรอบ SDK โดยตรง หรือใช้ สวิฟท์แพคเกจจัดการ แทน

คุณกำลังใช้หนึ่งใน ตัวอย่าง QuickStart ? โครงการ Xcode และ Podfile (ฝัก) มีอยู่แล้ว แต่คุณยังจะต้อง เพิ่มการตั้งค่าไฟล์ Firebase ของคุณ และติดตั้งฝัก

  1. สร้าง Podfile หากคุณยังไม่มี:

    cd your-project-directory
    pod init
  2. ใน Podfile ของคุณ ให้เพิ่มพ็อด Firebase ที่คุณต้องการใช้ในแอปของคุณ

    คุณสามารถเพิ่มใด ๆ ของ ผลิตภัณฑ์ Firebase สนับสนุน ไปยังแอป iOS ของคุณ

    สำหรับประสบการณ์ที่ดีที่สุดกับ Firebase Cloud Messaging เราขอแนะนำให้ เปิดใช้งาน Google Analytics ในโครงการของคุณ นอกจากนี้ ในการตั้งค่า Analytics คุณต้องเพิ่ม Firebase SDK สำหรับ Analytics ในแอปของคุณ

    เปิดใช้งานการวิเคราะห์

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    
    # For Analytics without IDFA collection capability, use this pod instead
    # pod ‘Firebase/AnalyticsWithoutAdIdSupport’
    
    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'

    เรียนรู้เพิ่มเติมเกี่ยว IDFA ระบุการโฆษณาระดับอุปกรณ์ในแอปเปิ้ลของ ความเป็นส่วนตัวของผู้ใช้และการใช้ข้อมูล และ App ติดตามความโปร่งใส เอกสาร

    ไม่ได้เปิดใช้งานการวิเคราะห์

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. ติดตั้งฝักแล้วเปิดของคุณ .xcworkspace ของไฟล์เพื่อดูโครงการใน Xcode นี้:

    pod install
    open your-project.xcworkspace

อัปโหลดคีย์การตรวจสอบสิทธิ์ APN ของคุณ

อัปโหลดคีย์การตรวจสอบสิทธิ์ APN ของคุณไปยัง Firebase หากคุณไม่ได้มีการตรวจสอบที่สำคัญ APNs ให้แน่ใจว่าจะสร้างหนึ่งใน แอปเปิ้ลผู้พัฒนาศูนย์สมาชิก

  1. ภายในโครงการของคุณใน Firebase คอนโซลเลือกไอคอนรูปเฟืองเลือกการตั้งค่าโครงการแล้วเลือกแท็บ Messaging เมฆ

  2. ในการตรวจสอบที่สำคัญ APNs ภายใต้การตั้งค่าแอป iOS คลิกปุ่มอัปโหลด

  3. เรียกดูตำแหน่งที่คุณบันทึกสำคัญของคุณให้เลือกและคลิกเปิด เพิ่ม ID ที่สำคัญสำหรับคีย์ (ที่มีอยู่ใน แอปเปิ้ลผู้พัฒนาศูนย์สมาชิก ) และคลิกอัพโหลด

เริ่มต้น Firebase ในแอปของคุณ

คุณจะต้องเพิ่มรหัสการเริ่มต้น Firebase ให้กับแอปพลิเคชันของคุณ นำเข้าโมดูล Firebase และกำหนดค่าอินสแตนซ์ที่ใช้ร่วมกันตามที่แสดง:

  1. นำเข้าโมดูล Firebase ในของคุณ UIApplicationDelegate :

    Swift

    import Firebase

    วัตถุประสงค์-C

    @import Firebase;
  2. กำหนดค่า FirebaseApp ที่ใช้ร่วมกันเช่นปกติในของแอป application:didFinishLaunchingWithOptions: วิธีการ:

    Swift

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

    วัตถุประสงค์-C

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

ลงทะเบียนเพื่อรับการแจ้งเตือนทางไกล

เมื่อเริ่มต้นระบบหรือ ณ จุดที่ต้องการในขั้นตอนแอปพลิเคชันของคุณ ให้ลงทะเบียนแอปของคุณเพื่อรับการแจ้งเตือนจากระยะไกล โทร registerForRemoteNotifications ดังแสดง:

Swift

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

วัตถุประสงค์-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];

เข้าถึงโทเค็นการลงทะเบียน

โดยค่าเริ่มต้น FCM SDK จะสร้างโทเค็นการลงทะเบียนสำหรับอินสแตนซ์แอปไคลเอ็นต์ในการเปิดใช้แอป เช่นเดียวกับโทเค็นอุปกรณ์ APN โทเค็นนี้ช่วยให้คุณส่งการแจ้งเตือนที่กำหนดเป้าหมายไปยังอินสแตนซ์เฉพาะของแอปของคุณ

ในลักษณะเดียวกับที่ iOS ของคุณมักจะมอบอุปกรณ์ APNs token ในการเริ่มต้นแอป FCM ให้ลงทะเบียนผ่านทาง token FIRMessagingDelegate 's messaging:didReceiveRegistrationToken: วิธีการ FCM SDK จะดึงโทเค็นใหม่หรือโทเค็นที่มีอยู่ในระหว่างการเปิดแอปครั้งแรกและเมื่อใดก็ตามที่โทเค็นได้รับการอัปเดตหรือทำให้ใช้งานไม่ได้ ในทุกกรณีที่ FCM SDK เรียก messaging:didReceiveRegistrationToken: กับโทเค็นที่ถูกต้อง

โทเค็นการลงทะเบียนอาจเปลี่ยนแปลงเมื่อ:

  • แอพถูกกู้คืนในอุปกรณ์ใหม่
  • ผู้ใช้ถอนการติดตั้ง/ติดตั้งแอปอีกครั้ง
  • ผู้ใช้ล้างข้อมูลแอป

ตั้งผู้รับมอบสิทธิ์การส่งข้อความ

ที่จะได้รับโทเค็นการลงทะเบียนใช้โปรโตคอลการส่งข้อความและการตั้งค่าของผู้ร่วมประชุม FIRMessaging 's delegate ทรัพย์สินหลังจากเรียก [FIRApp configure] ตัวอย่างเช่นถ้าผู้รับมอบสิทธิ์ใช้งานของคุณเป็นไปตามโปรโตคอลการส่งข้อความตัวแทนคุณสามารถตั้งค่าผู้รับมอบสิทธิ์ใน application:didFinishLaunchingWithOptions: กับตัวเอง

Swift

Messaging.messaging().delegate = self

วัตถุประสงค์-C

[FIRMessaging messaging].delegate = self;

กำลังเรียกโทเค็นการลงทะเบียนปัจจุบัน

ราชสกุลที่ลงทะเบียนจะถูกส่งผ่านวิธีการ messaging:didReceiveRegistrationToken: โดยทั่วไปจะเรียกวิธีนี้ 1 ครั้งต่อแอปที่เริ่มต้นด้วยโทเค็นการลงทะเบียน เมื่อเรียกวิธีนี้ เป็นเวลาที่เหมาะสมที่สุดที่จะ:

  • หากโทเค็นการลงทะเบียนเป็นโทเค็นใหม่ ให้ส่งไปที่เซิร์ฟเวอร์แอปพลิเคชันของคุณ
  • สมัครสมาชิกโทเค็นการลงทะเบียนในหัวข้อ สิ่งนี้จำเป็นสำหรับการสมัครสมาชิกใหม่หรือในสถานการณ์ที่ผู้ใช้ติดตั้งแอพใหม่อีกครั้ง

คุณสามารถเรียกโทเค็นโดยตรงโดยใช้ โทเค็น (เสร็จ :) มีข้อผิดพลาดที่ไม่เป็นค่าว่างหากการดึงโทเค็นล้มเหลวไม่ว่าในทางใด

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

วัตถุประสงค์-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;
  }
}];

คุณสามารถใช้วิธีนี้ได้ทุกเมื่อเพื่อเข้าถึงโทเค็นแทนการจัดเก็บ

ตรวจสอบการรีเฟรชโทเค็น

หากต้องการรับการแจ้งเตือนทุกครั้งที่มีการอัพเดตโทเค็น ให้ระบุผู้รับมอบสิทธิ์ที่สอดคล้องกับโปรโตคอลการรับมอบสิทธิ์การส่งข้อความ ตัวอย่างต่อไปนี้ลงทะเบียนผู้รับมอบสิทธิ์และเพิ่มวิธีการมอบสิทธิ์ที่เหมาะสม:

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

วัตถุประสงค์-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.
}

หรือคุณสามารถฟังสำหรับ NSNotification ชื่อ kFIRMessagingRegistrationTokenRefreshNotification มากกว่าการจัดหาวิธีการมอบหมาย คุณสมบัติโทเค็นมีค่าโทเค็นปัจจุบันเสมอ

Swizzling ถูกปิดใช้งาน: การแมปโทเค็น APN และโทเค็นการลงทะเบียน

หากคุณปิดใช้วิธีการ Swizzling คุณจะต้องจับคู่โทเค็น APN ของคุณกับโทเค็นการลงทะเบียน FCM อย่างชัดเจน แทนที่การ didRegisterForRemoteNotificationsWithDeviceToken เพื่อดึง APNs โทเค็นและจากนั้นตั้ง FIRMessaging 's APNSToken ทรัพย์สิน:

Swift

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

วัตถุประสงค์-C

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

หลังจากสร้างโทเค็นการลงทะเบียน FCM แล้ว คุณสามารถเข้าถึงและฟังเหตุการณ์การรีเฟรชโดยใช้วิธีการเดียวกับการเปิดใช้งาน Swizzling

ป้องกันการเริ่มต้นอัตโนมัติ

เมื่อมีการสร้างโทเค็นการลงทะเบียน FCM ไลบรารีจะอัปโหลดตัวระบุและข้อมูลการกำหนดค่าไปยัง Firebase หากคุณต้องการรับตัวเลือกที่ชัดเจนจากผู้ใช้ก่อน คุณสามารถป้องกันการสร้างโทเค็น ณ เวลาที่กำหนดค่าได้โดยการปิดใช้งาน FCM การทำเช่นนี้เพิ่มมูลค่าข้อมูลเมตาที่คุณ Info.plist (ไม่ใช่ของคุณ GoogleService-Info.plist ):

FirebaseMessagingAutoInitEnabled = NO

หากต้องการเปิดใช้งาน FCM อีกครั้ง คุณสามารถโทรรันไทม์ได้:

Swift

Messaging.messaging().autoInitEnabled = true

วัตถุประสงค์-C

[FIRMessaging messaging].autoInitEnabled = YES;

ค่านี้จะคงอยู่ตลอดเมื่อรีสตาร์ทแอปเมื่อตั้งค่า

ขั้นตอนถัดไป

หลังจากที่คุณได้ตั้งค่าไคลเอ็นต์ iOS ของคุณแล้ว คุณก็พร้อมที่จะเพิ่มการจัดการข้อความและการทำงานขั้นสูงอื่นๆ ในแอปของคุณ ดูคำแนะนำเหล่านี้สำหรับข้อมูลเพิ่มเติม: