Live Activities สำหรับ iOS
Live Activities จะแสดงข้อมูลล่าสุดของแอปของคุณบนหน้าจอล็อกของ iPhone หรือ iPad และใน Dynamic Island คุณสมบัตินี้ช่วยให้ผู้ใช้เห็นข้อมูลสดได้ทันทีและดำเนินการด่วนที่เกี่ยวข้องกับข้อมูลที่แสดงได้
นี่คือตัวอย่างบางส่วนของการใช้ Live Activities:
- แสดงสถานะคำสั่งซื้อในแอปเดลิเวอรี่
- แสดงการนับถอยหลังแบบเรียลไทม์ในแอปฝึกซ้อม
- แสดงข้อมูลการติดตามในแอปแท็กซี่
- แสดงสถิติเกมและคะแนนปัจจุบันในแอปพลิเคชันกีฬา
- แสดงพยากรณ์อากาศรายชั่วโมงในแอปพลิเคชันสภาพอากาศ
คุณสามารถเปิดใช้งาน Live Activities โดยใช้ Pushwoosh iOS SDK ตามที่อธิบายไว้ด้านล่าง หากต้องการจัดการ Live Activities และอัปเดตเนื้อหา ให้ใช้เมธอด /updateLiveActivity
การตั้งค่า
Anchor link toเพิ่ม Widget Extension
Anchor link to- สร้าง Target ใหม่
ไปที่ File > New > Target และเลือก Widget Extension

- การกำหนดค่า Widget Extension กรุณาป้อนชื่อและตรวจสอบให้แน่ใจว่าได้เลือก Include Live Activity แล้วคลิก Finish

การกำหนดค่า Info.plist
Anchor link toค้นหาไฟล์ Info.plist ใน Target หลัก แล้วเพิ่มคีย์ “Supports Live Activities” และตั้งค่าเป็น YES
<key>NSSupportsLiveActivities</key> <true/>
การเปิดใช้งาน Live Activities จากแอป
Anchor link toหากต้องการเปิดใช้งาน Live Activities ให้เพิ่มโค้ดลงใน Widget Extension ที่มีอยู่ หรือสร้างใหม่หากแอปของคุณยังไม่มี Live Activities ใช้ฟังก์ชันการทำงานของ SwiftUI และ WidgetKit สำหรับส่วนติดต่อผู้ใช้ ActivityKit จะจัดการวงจรชีวิตของแต่ละ Live Activity: API ของมันใช้เพื่อร้องขอ อัปเดต และสิ้นสุด Live Activity รวมถึงรับการแจ้งเตือนพุชของ ActivityKit คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Live Activities ได้ใน เอกสารของ Apple
- ไปที่ไฟล์ ContentView ของโปรเจกต์คุณใน Xcode และสร้าง Button
import SwiftUI
struct ContentView: View { var body: some View { VStack(spacing: 20) {
Button(action: { LiveActivityManager.shared.startActivity() }, label: { Text("Start Live Activity") .foregroundColor(.white) .padding() .background(Color.blue) .cornerRadius(10) }) } .padding() }}
#Preview { ContentView()}

- สร้างไฟล์ LiveActivityManager.swift เพื่อจัดการ Live Activities
import Foundationimport ActivityKitimport UIKitimport PushwooshFrameworkimport PushwooshLiveActivities
class LiveActivityManager: NSObject, ObservableObject { public static let shared: LiveActivityManager = LiveActivityManager()
private var currentActivity: Activity<FoodDeliveryAttributes>? = nil
override init() { super.init() }
func startActivity() { guard ActivityAuthorizationInfo().areActivitiesEnabled else { print("You can't start live activity.") return } do { let pushwooshData = PushwooshLiveActivityAttributeData(activityId: "activity_id") let atttribute = FoodDeliveryAttributes(orderNumber: "1234567", pushwoosh: pushwooshData) let initialState = FoodDeliveryAttributes.ContentState( status: "Preparing your meal", estimatedTime: "25 min", emoji: "👨🍳", pushwoosh: nil ) let activity = try Activity<FoodDeliveryAttributes>.request( attributes: atttribute, content: .init(state:initialState , staleDate: nil), pushType: .token ) self.currentActivity = activity
Task { for await pushToken in activity.pushTokenUpdates { let pushTokenString = pushToken.reduce("") { $0 + String(format: "%02x", $1) } print("Activity:\(activity.id) push token: \(pushTokenString)")
// MARK: - ส่ง Push Token ไปยัง Pushwoosh Pushwoosh.LiveActivities.startLiveActivity( token: pushTokenString, activityId: "activity_id" ) } } } catch { print("Start Activity Error: \(error.localizedDescription)") } }}
- เพียงเท่านี้ จากนั้นให้เรารันโปรเจกต์และกดปุ่ม ‘Start Live Activity’ จากนั้นไปที่หน้าจอล็อกและจะเห็น Live Activity ที่สร้างขึ้น

เริ่ม Live Activity ด้วยการแจ้งเตือนพุชระยะไกล
Anchor link to- ในการเริ่ม Live Activity ผ่านการแจ้งเตือนพุชระยะไกล (Remote Push Notification) คุณต้องส่งโทเค็น pushToStartTokenUpdates ไปยัง Pushwoosh
func getPushToStartToken() { if #available(iOS 17.2, *) { Task { for await data in Activity<LiveActivityAttributes>.pushToStartTokenUpdates { let token = data.map {String(format: "%02x", $0)}.joined() print("Activity PushToStart Token: \(token)")
// ส่งโทเค็น `pushToStartTokenUpdates` ไปยัง Pushwoosh try await Pushwoosh.LiveActivities.sendPushToStartLiveActivity(token: token) } } }}
- เริ่ม Live Activity ด้วยการแจ้งเตือนพุชระยะไกล
การจัดการ Live Activities
Anchor link toPushwoosh iOS SDK มีเมธอดต่อไปนี้สำหรับทำงานกับ Live Activities:
// ส่งโทเค็น Push To Start ของ Live Activity ไปยัง Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// เมธอดสำหรับเริ่ม Live Activity ด้วย Activity IDstatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// เมธอดสำหรับหยุด Live Activitystatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)
คุณยังสามารถอัปเดต Live Activities ตามเซกเมนต์ได้โดยใช้พารามิเตอร์ Activity ID เมื่อสร้างกิจกรรม คุณต้องส่งพารามิเตอร์ Activity ID ที่ไม่ซ้ำกันในเมธอด ซึ่งจะเกี่ยวข้องกับเซกเมนต์ผู้ใช้ที่เฉพาะเจาะจง
ตัวอย่างเช่น ผู้ใช้ N คนได้ติดตามเหตุการณ์เดียวกันใน Live Activity จำเป็นที่พารามิเตอร์ Activity ID จะต้องไม่ซ้ำกันสำหรับผู้ใช้ N คนทั้งหมดนี้
เมื่อคุณทำงานกับ Live Activity เสร็จสิ้น ให้ใช้เมธอดเหล่านี้:
static func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
เมธอด Setup()
Anchor link toPushwoosh ทำให้การถ่ายโอน ID ของกิจกรรมง่ายขึ้นโดยการแนะนำฟังก์ชัน PushwooshLiveActivities.setup
ซึ่งจัดการวงจรชีวิตทั้งหมดของ Live Activity ภายในแอปพลิเคชัน ฟังก์ชันนี้จะคอยฟังการอัปเดตโทเค็นทั้ง pushToStart และ pushToUpdate โดยอัตโนมัติ การใช้วิธีนี้ทำให้แอปพลิเคชันไม่จำเป็นต้องติดตามการเริ่มต้นของ Live Activities หรือจัดการการอัปเดตโทเค็นสำหรับการอัปเดตกิจกรรมด้วยตนเองอีกต่อไป
เราขอแนะนำให้ใช้วิธีนี้เนื่องจากจะจัดการการจัดการโทเค็นทั้งหมดในฝั่งของเรา ซึ่งจะช่วยลดปริมาณโค้ดที่คุณต้องดูแลในฝั่งของคุณ สิ่งนี้จะทำให้การผสานรวมง่ายขึ้นและรับประกันประสบการณ์ที่ราบรื่นและมีประสิทธิภาพมากขึ้นสำหรับแอปของคุณ
ใน AppDelegate ตรวจสอบให้แน่ใจว่าคุณได้ import PushwooshFramework
และ PushwooshLiveActivities
และเรียกใช้เมธอด setup
จากโมดูล Pushwoosh.LiveActivities
AppDelegate.swift
if #available(iOS 16.1, *) { Pushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)}
FoodDeliveryAttributes
import WidgetKitimport SwiftUIimport ActivityKitimport PushwooshFrameworkimport PushwooshLiveActivities
struct FoodDeliveryAttributes: PushwooshLiveActivityAttributes { public struct ContentState: PushwooshLiveActivityContentState { var status: String var estimatedTime: String var emoji: String var pushwoosh: PushwooshLiveActivityContentStateData? }
var orderNumber: String var pushwoosh: PushwooshLiveActivityAttributeData}
FoodDeliveryAttributes
: โครงสร้างนี้สอดคล้องกับโปรโตคอล PushwooshLiveActivityAttributes
ใช้เพื่อกำหนดแอตทริบิวต์ของ Live Activity ภายในแอป
คู่มือการย้ายระบบ
Anchor link toตั้งแต่ Pushwoosh iOS SDK เวอร์ชัน 6.8.0 เป็นต้นไป เราได้อัปเดตโครงสร้าง SDK ตอนนี้เมธอดของ Live Activities จะเข้าถึงผ่านโมดูล PushwooshLiveActivities
หากคุณใช้ Pushwoosh iOS SDK เวอร์ชันก่อนหน้า 6.8.0 และเรียกใช้เมธอดที่แสดงด้านล่าง และได้อัปเดตเป็นเวอร์ชัน 6.8.0 หรือใหม่กว่าแล้ว โปรดทราบการเปลี่ยนแปลงต่อไปนี้:
static func setup<Attributes: PushwooshLiveActivityAttributes>(_ activityType: Attributes.Type)static func defaultSetup()static func defaultStart(_ activityId: String, attributes: [String: Any], content: [String: Any])
ตอนนี้ หากต้องการเข้าถึงเมธอดเหล่านี้ คุณควรใช้โมดูล LiveActivity
import PushwooshFrameworkimport PushwooshLiveActivities
Pushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)Pushwoosh.LiveActivities.defaultSetup()Pushwoosh.LiveActivities.defaultStart("activity_id", attributes: ["key_attribute": "value_attribute"], content: ["key_content": "value_content"])
เรายังคงรองรับเมธอดผ่าน Pushwoosh.sharedInstance()
ดังที่แสดงด้านล่าง แต่โปรดทราบว่าเมธอดเหล่านี้จะถูกเลิกใช้งานในอนาคต
// ส่งโทเค็น Push To Start ของ Live Activity ไปยัง Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// เมธอดสำหรับเริ่ม Live Activity ด้วย Activity IDstatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// เมธอดสำหรับหยุด Live Activitystatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)