ส่งข้อความทดสอบไปยังแอป Apple ที่ทำงานอยู่เบื้องหลัง

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

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

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

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

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

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

    • โครงการของคุณต้องกำหนดเป้าหมายเวอร์ชันแพลตฟอร์มเหล่านี้หรือใหม่กว่า:
      • ไอโอเอส 11
      • macOS10.13
      • ทีวีโอเอส 12
      • วอตช์โอเอส 6
  • ตั้งค่า อุปกรณ์ Apple จริง เพื่อเรียกใช้แอพของคุณและทำงานเหล่านี้ให้เสร็จสิ้น:

    • รับคีย์การรับรองความถูกต้องการแจ้งเตือน Apple Push สำหรับ บัญชี Apple Developer ของคุณ
    • เปิดใช้งานการแจ้งเตือนแบบพุชใน XCode ภายใต้ App > Capabilities

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

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

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

ลงทะเบียนแอปของคุณกับ Firebase

หากต้องการใช้ Firebase ในแอป Apple คุณต้องลงทะเบียนแอปกับโปรเจ็กต์ Firebase การลงทะเบียนแอปของคุณมักเรียกว่า "การเพิ่ม" แอปของคุณในโครงการของคุณ

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

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

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

  3. ป้อนรหัสชุดของแอปของคุณในช่อง รหัสชุด

  4. (ไม่บังคับ) ป้อนข้อมูลแอปอื่นๆ: ชื่อเล่นแอป และ รหัส App Store

  5. คลิกลง ทะเบียนแอป

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

  1. คลิก ดาวน์โหลด GoogleService-Info.plist เพื่อรับไฟล์กำหนดค่าแพลตฟอร์ม Firebase Apple ของคุณ ( GoogleService-Info.plist )

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

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

เพิ่ม Firebase SDK ลงในแอปของคุณ

ใช้ Swift Package Manager เพื่อติดตั้งและจัดการการพึ่งพา Firebase

  1. ใน Xcode เมื่อโปรเจ็กต์แอปของคุณเปิดอยู่ ให้ไปที่ File > Add Package
  2. เมื่อได้รับแจ้ง ให้เพิ่มพื้นที่เก็บข้อมูล SDK แพลตฟอร์ม Firebase Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. เลือกไลบรารี Firebase Cloud Messaging
  5. เพิ่มแฟล็ก -ObjC ไปยังส่วน Other Linker Flags ของการตั้งค่า build ของเป้าหมายของคุณ
  6. เพื่อประสบการณ์ที่ดีที่สุดกับ Firebase Cloud Messaging เราขอแนะนำ ให้เปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase ของคุณ และเพิ่ม Firebase SDK สำหรับ Google Analytics ลงในแอปของคุณ คุณสามารถเลือกไลบรารีที่ไม่มีการรวบรวม IDFA หรือด้วยการรวบรวม IDFA
  7. เมื่อเสร็จแล้ว Xcode จะเริ่มแก้ไขและดาวน์โหลดการอ้างอิงของคุณโดยอัตโนมัติในเบื้องหลัง

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

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

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

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

  3. เรียกดูตำแหน่งที่คุณบันทึกกุญแจไว้ เลือกแล้วคลิก เปิด เพิ่ม ID คีย์สำหรับคีย์ (มีอยู่ใน Apple Developer Member Center ) แล้วคลิก อัปโหลด

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

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

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

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    สวิฟท์

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

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

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. กำหนดค่าอินสแตนซ์ที่ใช้ร่วมกันของ FirebaseApp ใน application(_:didFinishLaunchingWithOptions:) ของผู้รับมอบสิทธิ์แอปของคุณ:

    SwiftUI

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

    สวิฟท์

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

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

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. หากคุณใช้ SwiftUI คุณต้องสร้างผู้แทนแอปพลิเคชันและแนบไปกับโครงสร้าง App ของคุณผ่าน UIApplicationDelegateAdaptor หรือ NSApplicationDelegateAdaptor คุณต้องปิดใช้งานการสลับตัวแทนของแอปด้วย สำหรับข้อมูลเพิ่มเติม โปรดดู คำแนะนำ SwiftUI

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

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

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

สวิฟท์


UNUserNotificationCenter.current().delegate = self

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

application.registerForRemoteNotifications()

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


[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
    }];

[application registerForRemoteNotifications];

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

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

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

ในลักษณะเดียวกับที่แพลตฟอร์ม Apple โดยทั่วไปจะส่งโทเค็นอุปกรณ์ APN เมื่อเริ่มแอป FCM จะจัดเตรียมโทเค็นการลงทะเบียนผ่าน messaging:didReceiveRegistrationToken: ของ FIRMessagingDelegate FCM SDK ดึงข้อมูลโทเค็นใหม่หรือที่มีอยู่ในระหว่างการเปิดตัวแอปครั้งแรกและเมื่อใดก็ตามที่โทเค็นได้รับการอัปเดตหรือใช้งานไม่ได้ ในทุกกรณี FCM SDK จะเรียก messaging:didReceiveRegistrationToken: ด้วยโทเค็นที่ถูกต้อง

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

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

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

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

สวิฟท์

Messaging.messaging().delegate = self

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

[FIRMessaging messaging].delegate = self;

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

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

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

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

สวิฟท์

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

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

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

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

สวิฟท์

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 แทนที่จะระบุวิธีการมอบสิทธิ์ คุณสมบัติโทเค็นจะมีค่าโทเค็นปัจจุบันเสมอ

ส่งข้อความแจ้งเตือน

  1. ติดตั้งและเรียกใช้แอปบนอุปกรณ์เป้าหมาย บนอุปกรณ์ Apple คุณจะต้องยอมรับคำขอสิทธิ์เพื่อรับการแจ้งเตือนระยะไกล

  2. ตรวจสอบให้แน่ใจว่าแอปอยู่ในพื้นหลังบนอุปกรณ์

  3. ในคอนโซล Firebase ให้เปิด หน้าข้อความ

  4. หากนี่เป็นข้อความแรกของคุณ ให้เลือก สร้างแคมเปญแรกของคุณ

    1. เลือก ข้อความแจ้งเตือน Firebase และเลือก สร้าง
  5. หรือบนแท็บ แคมเปญ ให้เลือก แคมเปญใหม่ จากนั้นเลือก การแจ้งเตือน

  6. ป้อนข้อความ ช่องอื่นๆ ทั้งหมดเป็นทางเลือก

  7. เลือก ส่งข้อความทดสอบ จากบานหน้าต่างด้านขวา

  8. ในช่องชื่อ เพิ่มโทเค็นการลงทะเบียน FCM ให้ป้อนโทเค็นการลงทะเบียนที่คุณได้รับในส่วนก่อนหน้าของคู่มือนี้

  9. เลือก ทดสอบ

หลังจากที่คุณเลือก ทดสอบ อุปกรณ์ไคลเอนต์เป้าหมาย (ที่มีแอปอยู่เบื้องหลัง) ควรได้รับการแจ้งเตือน

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

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

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