Adobe Experience Platform Mobile SDKとライブアクティビティの統合 mobile-live-config-sdk

Adobe Experience Platform Mobile SDKは、Appleのライブアクティビティに対する組み込みのサポートを提供します。 これにより、アプリを開かなくても、ロック画面と Dynamic Island でリアルタイムの動的な更新を直接表示できます。

  1. 必要なモジュールをインポート

    AEPMessagingAEPMessagingLiveActivityActivityKit のモジュールを読み込みます。

  2. 属性の定義

    LiveActivityAttributes に準拠し、LiveActivityData 属性と ContentState 属性を含めます。

  3. ライブアクティビティを登録

    SDK の初期化後に Messaging.registerLiveActivity() を使用します。

  4. ウィジェット設定を作成

    ロック画面と Dynamic Island インターフェイスの両方に ActivityConfiguration を実装します。

  5. ローカルでライブアクティビティを開始(オプション)

    ライブアクティビティは、Journey Optimizerからリモートで開始することも、アプリケーションコード内でローカルに開始することもできます。

  6. デバッグサポートを追加(オプション)

    Assuranceに LiveActivityAssuranceDebuggable を実装します。

正しい設定と互換性を確保するために、次の最小バージョンがインストールされていることを確認します。

recommendation-more-help

前提条件:

  • iOS:

    • iOS 16.1 以降:基本的なライブアクティビティ機能
    • iOS 17.2 以降:プッシュトゥスタートのサポート
    • iOS 18 以降:ブロードキャストチャネルのサポート
  • Xcode: 14.0 以降

  • Swift: 5.7 以降

  • 依存関係: AEPCore、AEPMessaging、AEPMessagingLiveActivity、ActivityKit

  • AEP Mobile SDKのバージョン:iOS Messaging 5.11.0 以降

手順 1:必要なモジュールをインポート import

開始するには、まず AEPMessagingAEPMessagingLiveActivityActivityKit モジュールを読み込む必要があります。

import AEPMessaging
import AEPMessagingLiveActivity
import ActivityKit

手順 2:ライブアクティビティ属性を定義 attributes

LiveActivityAttributes プロトコルに準拠する構造体を作成します。これにより、ライブアクティビティの静的データと動的コンテンツの状態の両方が定義されます。

主なコンポーネントは次のとおりです。

  • Adobe Experience Platform 固有のデータを含む liveActivityData(必須)。

    • 個々のユーザーの場合: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 でライブアクティビティスキーマをデバッグできます。

食品配送ライブアクティビティの例:

@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のドキュメントと実装の詳細については、以下を参照してください。

b22c9c5d-9208-48f4-b874-1cefb8df4d76