实时活动与Adobe Experience Platform Mobile SDK集成 mobile-live-config-sdk

Adobe Experience Platform Mobile SDK为Apple的实时活动提供内置支持。 这样,您的应用程序就可以直接在锁屏界面和Dynamic Island上显示实时的动态更新,而无需打开应用程序。

  1. 导入所需的模块

    导入以下模块: AEPMessagingAEPMessagingLiveActivityActivityKit

  2. 定义属性

    符合LiveActivityAttributes,包括LiveActivityDataContentState属性。

  3. 注册实时活动

    在SDK初始化后使用Messaging.registerLiveActivity()

  4. 创建构件配置

    对Lock Screen和Dynamic Island接口实施ActivityConfiguration

  5. 在本地启动实时活动(可选)

    可以通过Journey Optimizer远程启动实时活动,也可以在应用程序代码中本地启动实时活动。

  6. 添加调试支持(可选)

    为Assurance实施LiveActivityAssuranceDebuggable

验证是否安装了以下最低版本,以确保配置和兼容性正确。

recommendation-more-help

先决条件:

  • iOS:

    • iOS16.1或更高版本:基本实时活动功能
    • iOS 17.2+:即按即用支持
    • iOS 18+:广播频道支持
  • Xcode: 14.0或更高版本

  • Swift: 5.7或更高版本

  • 依赖项: AEPCore、AEPMessaging、AEPMessagingLiveActivity、ActivityKit

  • AEP Mobile SDK版本: iOS消息5.11.0或更高版本

步骤1:导入所需的模块 import

若要开始,您首先需要导入以下模块: AEPMessagingAEPMessagingLiveActivityActivityKit

import AEPMessaging
import AEPMessagingLiveActivity
import ActivityKit

第2步:定义您的实时活动属性 attributes

创建符合LiveActivityAttributes协议的结构。 这会定义实时活动的静态数据和动态内容状态。

关键组件包括:

  • liveActivityData (必需),其中包含特定于Adobe Experience Platform的数据。

    • 对于个人用户:使用LiveActivityData(liveActivityID: "unique-id")
    • 用于广播:使用LiveActivityData(channelID: "channel-id")
  • 静态属性,特定于您的用例的自定义属性,如restaurantName

  • ContentState​定义可在实时活动生命周期中更新的动态数据。 它必须符合CodableHashable

  • LiveActivityOrigin枚举指定活动是在应用程序内本地启动,还是通过iOS 17.2及更高版本中支持的即点即用通知远程启动。 此值允许SDK在数据收集期间区分本地启动和远程触发的实时活动。

示例

@available(iOS 16.1, *)
struct FoodDeliveryLiveActivityAttributes: LiveActivityAttributes {
    // Mandatory: AEP Integration Data
    var liveActivityData: LiveActivityData

    // Static Attributes: Custom properties that do not change
    var restaurantName: String

    // Dynamic Content State: Data that can be updated
    struct ContentState: Codable, Hashable {
        var orderStatus: String
    }
}
@available(iOS 16.1, *)
public struct LiveActivityData: Codable {
    /// Unique identifier for broadcast Live activity channels
    public let channelID: String?

    /// Unique identifier for individual Live activity
    public let liveActivityID: String?

    /// Indicates local vs remote creation
    public let origin: LiveActivityOrigin?

    // Initializers
    public init(channelID: String)        // For broadcast Live activity
    public init(liveActivityID: String)   // For individual Live activity
}

您还可以为应用程序注册多种实时活动类型:

if #available(iOS 16.1, *) {
    Messaging.registerLiveActivity(AirplaneTrackingAttributes.self)
    Messaging.registerLiveActivity(FoodDeliveryLiveActivityAttributes.self)
    Messaging.registerLiveActivity(GameScoreLiveActivityAttributes.self)
}

步骤3:注册实时活动 register

在SDK初始化后,在AppDelegate中注册您的实时活动类型,这允许您:

  • 启用自动推送启动令牌收集(iOS 17.2+)
  • 自动收集实时活动更新令牌
  • 支持生命周期管理和事件跟踪

食品配送实时活动示例:

if #available(iOS 16.1, *) {
    Messaging.registerLiveActivity(FoodDeliveryLiveActivityAttributes.self)
}

步骤4:创建实时活动构件 widgets

实时活动通过构件显示,您需要创建构件捆绑包和配置:

食品配送实时活动示例:

@main
struct FoodDeliveryWidgetBundle: WidgetBundle {
    var body: some Widget {
        FoodDeliveryLiveActivityWidget()
    }
}

@available(iOS 16.1, *)
struct FoodDeliveryLiveActivityWidget: Widget {
    var body: some WidgetConfiguration {
        ActivityConfiguration(for: FoodDeliveryLiveActivityAttributes.self) { context in
            // Lock Screen UI
            VStack {
                Text("Order from \(context.attributes.restaurantName)")
                Text("Status: \(context.state.orderStatus)") // possible status may include "Ordered", "Order accepted", "Preparing", "On the Way","Delivered"
            }
        } dynamicIsland: { context in
            // Dynamic Island UI
            DynamicIsland {
                // Expanded UI
            } compactLeading: {
                // Compact leading UI
            } compactTrailing: {
                // Compact trailing UI
            } minimal: {
                // Minimal UI
            }
        }
    }
}

步骤5:在本地启动实时活动(可选) local

虽然Journey Optimizer可以远程启动实时活动,但您也可以本地启动它:

食品配送实时活动示例:

let attributes = FoodDeliveryLiveActivityAttributes(
    liveActivityData: LiveActivityData(liveActivityID: "order123"),
    restaurantName: "Pizza Palace"
)

let contentState = FoodDeliveryLiveActivityAttributes.ContentState(
    orderStatus: "Ordered"
)

let activity = try Activity<FoodDeliveryLiveActivityAttributes>.request(
    attributes: attributes,
    contentState: contentState,
    pushType: .token
)

步骤6:添加调试支持(可选) debug

如果需要,您可以在Adobe Assurance中调试Live活动架构:

食品配送实时活动示例:

@available(iOS 16.1, *)
extension FoodDeliveryLiveActivityAttributes: LiveActivityAssuranceDebuggable {
    static func getDebugInfo() -> (attributes: FoodDeliveryLiveActivityAttributes, state: ContentState) {
        return (
            FoodDeliveryLiveActivityAttributes(
                liveActivityData: LiveActivityData(liveActivityID: "debug-order-123"),
                restaurantName: "Debug Restaurant"
            ),
            ContentState(orderStatus: "Ordered")
        )
    }
}

其他资源

有关全面的SDK文档和实施详细信息:

TIP
如果您遇到令牌注册、有效负载对齐或实时活动投放问题,请参阅实时活动故障诊断以获取详细的调试指导。
b22c9c5d-9208-48f4-b874-1cefb8df4d76