iOS Live Activities
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: - Send Push Token to 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 ผ่านการแจ้งเตือนพุชระยะไกล คุณต้องส่งโทเค็น 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)")
// Send `pushToStartTokenUpdates` token to Pushwoosh try await Pushwoosh.LiveActivities.sendPushToStartLiveActivity(token: token) } } }}- เริ่มต้น Live Activity ด้วยการแจ้งเตือนพุชระยะไกล
การจัดการ Live Activities
Anchor link toPushwoosh iOS SDK มีเมธอดต่อไปนี้สำหรับทำงานกับ Live Activities:
// Send Live Activity Push To Start Token to Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity IDstatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methodsstatic 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 ทำให้การถ่ายโอน Activity 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 PushwooshLiveActivitiesPushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)Pushwoosh.LiveActivities.defaultSetup()Pushwoosh.LiveActivities.defaultStart("activity_id", attributes: ["key_attribute": "value_attribute"], content: ["key_content": "value_content"])เรายังคงรองรับเมธอดผ่าน Pushwoosh.sharedInstance() ตามที่ระบุไว้ด้านล่าง แต่โปรดทราบว่าเมธอดเหล่านี้จะถูกเลิกใช้งานในรุ่นต่อๆ ไป
// Send Live Activity Push To Start Token to Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity IDstatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methodsstatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)