วิธีสร้างข้อความ Live Activity บน iOS

แนวทางปฏิบัติที่ดีที่สุดสำหรับ iOS Live Activities

การตั้งค่า Live Activity

Live Activity เป็นฟีเจอร์ที่เปิดตัวใน iOS 16.1 โดยใช้ ActivityKit framework คุณสามารถเริ่มใช้งาน Live Activity เพื่อแสดงการอัปเดตแบบเรียลไทม์จากแอปพลิเคชันของคุณบน Dynamic Island และหน้าจอล็อค ตัวอย่างเช่น แอปพลิเคชันกีฬาที่อนุญาตให้ผู้ใช้เริ่มใช้งาน Live Activity และดูการอัปเดตอย่างรวดเร็วในระหว่างเกม (ดูคู่มือฟีเจอร์ของ iOS สำหรับรายละเอียดเพิ่มเติม)

  • ใช้ ActivityKit framework ในโปรเจ็กต์หลักเพื่อเริ่มต้น, อัปเดต, และสิ้นสุด Live Activity ใช้ SwiftUI และ WidgetKit ใน widget extension เพื่อสร้างอินเทอร์เฟซ Live Activity
  • Live Activity สามารถเริ่มต้น, อัปเดต, และสิ้นสุดได้ไม่เพียงแค่โดยใช้ ActivityKit แต่ยังสามารถทำได้ผ่านการแจ้งเตือน Push แบบรีโมท
  • ฟีเจอร์การอัปเดตการแจ้งเตือน Push สำหรับ Live Activity ไม่รองรับการใช้ p12 certificates ผู้ใช้ต้องตั้งค่าการใช้ p8 certificates

นอกจากนี้ Apple ยังจำกัดจำนวนการส่งการแจ้งเตือน Push สำหรับ Live Activity ต่อชั่วโมง หากคุณต้องการอัปเดต Live Activity ด้วยการแจ้งเตือน Push บ่อยครั้ง คุณต้องเพิ่ม NSSupportsLiveActivitiesFrequentUpdates ในไฟล์ info.plist และตั้งค่าค่าบูลีนเป็น YES (สำหรับข้อมูลเพิ่มเติมดูที่ iOS LiveActivity)

การเพิ่มฟังก์ชัน Live Activity ในโปรเจ็กต์ของคุณ

การตั้งค่า

1. การตั้งค่า Info.plist

เพิ่มคู่คีย์-ค่าในไฟล์ Info.plist ในโปรเจ็กต์หลัก โดยที่คีย์คือ NSSupportsLiveActivities และค่าเป็น YES;

alt text

2. เพิ่ม Widget Extension

2.1 สร้าง Target ใหม่

ไปที่ File > New > Target.

2.2 เลือก Widget Extension

alt text

2.3 ตั้งค่า Widget Extension

เลือกช่อง "Include Live Activity" alt text

คลิก Finish

Xcode จะสร้าง Live Activity สำหรับคุณ

LiveActivityWidgetAttributes จะกำหนดคุณสมบัติของ Live Activity รวมถึงทั้งคุณสมบัติที่สามารถเปลี่ยนแปลงได้และที่ไม่สามารถเปลี่ยนแปลงได้

LiveActivityWidgetLiveActivity จะปรับแต่งรูปลักษณ์ของ Live Activity

alt text

จากนั้นใน LiveActivityWidgetBundle ให้แสดง Live Activity alt text

3. การทดสอบ

เริ่มต้น Live Activity ในโปรเจ็กต์หลัก, ฟังการเปลี่ยนแปลงของ push token และรายงาน push token ให้กับ EngageLab เมื่อรายงานสำเร็จแล้ว คุณสามารถใช้บริการของ EngageLab ในการส่งข้อความไปยัง Live Activity บนโทรศัพท์

func startLiveActivity1() { let initialContentState = MTLAAttributes.ContentState(eventStr: "begin", eventTime: 1) let activityAttributes = MTLAAttributes(name: "LiveActivity", number: 33, tag: "") do { // สร้าง Activity let activity = try Activity.request(attributes: activityAttributes, contentState: initialContentState, pushType: PushType.token) // ฟังการเปลี่ยนแปลงของ pushToken Task { for await pushtoken in activity.pushTokenUpdates { let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined() // ลงทะเบียน liveactivity กับ EngageLab เพื่ออัปเดตการแจ้งเตือนผ่าน liveactivityId บนแพลตฟอร์ม Push MTPushService.registerLiveActivity("my_define_liveactivity_id", pushToken: pushtoken, completion: { code, liveactivityId, token, seq in print("ผลลัพธ์:\(code)") }, seq: 1) } } } catch { print("เกิดข้อผิดพลาดในการขอ Live Activity \(error.localizedDescription).") } }
              
              func startLiveActivity1() {
    
    let initialContentState = MTLAAttributes.ContentState(eventStr: "begin", eventTime: 1)
    let activityAttributes = MTLAAttributes(name: "LiveActivity", number: 33, tag: "")
    
    do {
      // สร้าง Activity
      let activity = try Activity.request(attributes: activityAttributes, contentState: initialContentState, pushType: PushType.token)
      
      // ฟังการเปลี่ยนแปลงของ pushToken
      Task {
        for await pushtoken in activity.pushTokenUpdates {
          let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined()
          // ลงทะเบียน liveactivity กับ EngageLab เพื่ออัปเดตการแจ้งเตือนผ่าน liveactivityId บนแพลตฟอร์ม Push
          MTPushService.registerLiveActivity("my_define_liveactivity_id", pushToken: pushtoken, completion: { code, liveactivityId, token, seq in
            print("ผลลัพธ์:\(code)")
          }, seq: 1)
        }
      }
      
    } catch {
      print("เกิดข้อผิดพลาดในการขอ Live Activity \(error.localizedDescription).")
    }
  }

            
โค้ดนี้โชว์เป็นหน้าต่างลอย
  • ตั้งแต่ iOS 17.2 เป็นต้นไป Apple อนุญาตให้ใช้การแจ้งเตือน Push ในการเริ่มต้น Live Activity ซึ่งอาศัย pushToStartToken ใช้ฟังก์ชัน pushToStartTokenUpdates ในการฟังการเปลี่ยนแปลงของ pushToStartToken และรายงานให้กับ EngageLab
func pushToStart() { Task { if #available(iOS 17.2, *) { var beforeToken = "" for await pushtoken in Activity<MTLAAttributes>.pushToStartTokenUpdates { let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined() print("pushToStartToken: MTLAAttributes -> \(pushtokenstr)") if beforeToken == pushtokenstr { return } beforeToken = pushtokenstr MTPushService.registerLiveActivity("MTLAAttributes", pushToStartToken: pushtoken, completion: { code, alias, token, seq in print("ลงทะเบียน MTLAAttributes pushToStartToken ผลลัพธ์: \(pushtokenstr) ผลลัพธ์:\(code) seq:\(seq)") }, seq: seq()) } } else { // การสำรองสำหรับเวอร์ชันก่อนหน้า } } }
              
              func pushToStart() {
    Task {
      if #available(iOS 17.2, *) {
        var beforeToken = ""
        for await pushtoken in Activity<MTLAAttributes>.pushToStartTokenUpdates {
          
          let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined()
          print("pushToStartToken: MTLAAttributes -> \(pushtokenstr)")
          if beforeToken == pushtokenstr {
            return
          }
          beforeToken = pushtokenstr
          
          MTPushService.registerLiveActivity("MTLAAttributes", pushToStartToken: pushtoken, completion: { code, alias, token, seq in
            print("ลงทะเบียน MTLAAttributes pushToStartToken ผลลัพธ์: \(pushtokenstr) ผลลัพธ์:\(code) seq:\(seq)")
          }, seq: seq())
        }
      } else {
        // การสำรองสำหรับเวอร์ชันก่อนหน้า
      }
    }
}

            
โค้ดนี้โชว์เป็นหน้าต่างลอย
icon
ติดต่อฝ่ายขาย