Skip to content

ライブアクティビティ

ライブアクティビティは、ロック画面に表示される永続的な対話型通知であり、リアルタイムで物事に注目することができます。ライブアクティビティはロック画面に表示されるため、通知が見逃されないようにすることができます。永続的であるため、ユーザーに電話機のロックを解除させなくても、最新の内容をユーザーに表示できます。

iPhone ロック画面の配信トラッカーのライブアクティビティ。車のついたステータス棒がほぼ半分に満ちている。「ピックアップまで2分」というテキストが表示されています

ライブアクティビティは、静的情報と、更新された動的情報を組み合わせて表示します。たとえば、配達のステータス追跡機能を提供するライブアクティビティを作成できます。このライブアクティビティには、あなたの会社の名前が静的情報として含まれ、さらに、配達ドライバーが目的地に近づくにつれて更新される「配達までの時間」が動的情報として含まれます。

開発者は Braze を使用して、ライブアクティビティのライフサイクルを管理し、Braze REST API を呼び出してライブアクティビティの更新を行い、登録済みのすべてのデバイスが可能な限り早く更新を受信できるようにすることができます。また、Braze でライブアクティビティを管理しているため、プッシュ通知、アプリ内メッセージ、コンテンツカードなど、その他のメッセージングチャネルとそれらを連携させて使用することで、採用を促進できます。

前提条件

その他の前提条件は次のとおりです。

  • ライブアクティビティは、iOS 16.1 以降のiPhone およびiPad でのみ使用できます。この機能を使用するには、プロジェクトがこのiOS バージョンをターゲットとしていることを確認します。
  • Push Notification 資格を、Xcode プロジェクトの [署名 & 機能] の下に追加する必要があります。
  • ライブアクティビティでは、通知を送信するために .p8 キーを使用する必要があります。.p12.pem などの古いファイルはサポートされません。
  • Braze Swift SDK のバージョン8.2.0以降は、ライブアクティビティをリモートで登録できます。この機能を使用するには、iOS 17.2 以降が必要です。

ライブアクティビティの実装

ステップ1:アクティビティを作成する

まず、Apple のドキュメントのライブアクティビティでライブデータを表示する手順に従い、iOS アプリケーションにライブアクティビティをセットアップします。このタスクの一部として、YES に設定した NSSupportsLiveActivitiesInfo.plist に含めます。

Live Activity の正確な性質はビジネスケースに固有であるため、Activity オブジェクトを設定して初期化する必要があります。以下を定義することが重要です。

  • ActivityAttributes:このプロトコルは、ライブアクティビティに表示される静的 (不変) コンテンツと動的 (可変) コンテンツを定義します。
  • ActivityAttributes.ContentState:この型は、アクティビティの進行に伴って更新される動的データを定義します。

また、SwiftUI を使用して、サポートされているデバイスでロック画面とダイナミックアイランドの UI 表示を作成します。

ライブアクティビティに関する Apple の前提条件と制限をよく理解してください。これらの制約は、Braze の制約とは異なります。

競争している2つの野生動物救助チームに、居住地に生息するフクロウに対してポイントが与えられる Superb Owl ショーの更新をユーザーに提供するライブアクティビティを作成すると想定してみましょう。この例では、SportsActivityAttributes という構造体を作成しましたが、ActivityAttributes の独自の実装を使用できます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#if canImport(ActivityKit)
  import ActivityKit
#endif

@available(iOS 16.1, *)
struct SportsActivityAttributes: ActivityAttributes {
  public struct ContentState: Codable, Hashable {
    var teamOneScore: Int
    var teamTwoScore: Int
  }

  var gameName: String
  var gameNumber: String
}

ステップ2:アクティビティを開始する

まず、アクティビティの登録方法を選択します。

  • リモート:アプリケーションとユーザーのライフサイクル(Push to Start トークンが必要になる前) でできるだけ早く、registerPushToStart メソッドを使用します。次に、/messages/live_activity/start エンドポイントを使用してアクティビティを開始します。
  • ローカル:Live Activity のインスタンスを作成し、launchActivity メソッドを使用して、管理するBrazeのプッシュトークンs を作成します。

ステップ 2.1:BrazeKit をウィジェット拡張に追加する

Xコードプロジェクトで、アプリの名前を選択し、一般を選択します。[フレームワークとライブラリ] の下に BrazeKit がリストされていることを確認します。

Xcode サンプルプロジェクトの [フレームワークとライブラリ] の下にある BrazeKit フレームワーク。

ステップ2.2: BrazeLiveActivityAttributes プロトコルの追加

ActivityAttributes 実装で、BrazeLiveActivityAttributes プロトコルに適合性を追加してから、brazeActivityId 文字列を属性モデルに追加します。この文字列に値を割り当てる必要はありません。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import BrazeKit

#if canImport(ActivityKit)
  import ActivityKit
#endif

@available(iOS 16.1, *)
struct SportsActivityAttributes: ActivityAttributes, BrazeLiveActivityAttributes {
  public struct ContentState: Codable, Hashable {
    var teamOneScore: Int
    var teamTwoScore: Int
  }

  var gameName: String
  var gameNumber: String
  var brazeActivityId: String?
}

ステップ 2.3:push-to-start の登録

次にライブアクティビティのタイプを登録し、そのタイプに関連付けられたすべての push-to-start トークンとライブアクティビティインスタンスを Braze が追跡できるようにします。

次の例では、LiveActivityManager クラスがLive Activity オブジェクトを処理します。次に、registerPushToStart メソッドが SportActivityAttributes を登録します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import BrazeKit

#if canImport(ActivityKit)
  import ActivityKit
#endif

class LiveActivityManager {

  @available(iOS 17.2, *)
  func registerActivityType() {
    // This method returns a Swift background task.
    // You may keep a reference to this task if you need to cancel it wherever appropriate, or ignore the return value if you wish.
    let pushToStartObserver: Task = Self.braze?.liveActivities.registerPushToStart(
      forType: Activity<SportsActivityAttributes>.self,
      name: "SportsActivityAttributes"
    )
  }

}

ステップ2.4: プッシュ・トゥ・スタート通知を送信する

/messages/live_activity/start エンドポイントを使用してリモートのpush-to-start 通知を送信します。

Apple のActivityKit フレームワーク を使用して、Braze SDKが管理できるプッシュトークンを取得できます。これにより、Braze がバックエンドのApple プッシュ通知サービス(APN) にプッシュトークンを送信するため、Braze API を使用してライブアクティビティを更新できます。

  1. Apple のActivityKit API を使用して、Live Activity 実装のインスタンスを作成します。
  2. pushType パラメータを.token として設定します。
  3. 定義したライブアクティビティの ActivitiesAttributesContentState を渡します。
  4. Brazeインスタンスにアクティビティを登録するには、launchActivity(pushTokenTag:activity:) に渡します。pushTokenTag パラメータは、定義するカスタム文字列です。作成するLive Activity ごとに一意である必要があります。

ライブアクティビティを登録すると、Braze SDKはプッシュトークンs の変化を抽出して観察します。

たとえば、ライブアクティビティオブジェクトのインターフェイスとしてLiveActivityManager というクラスを作成します。次に、pushTokenTag"sports-game-2024-03-15" に設定します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import BrazeKit

#if canImport(ActivityKit)
  import ActivityKit
#endif

class LiveActivityManager {
  
  @available(iOS 16.2, *)
  func createActivity() {
    let activityAttributes = SportsActivityAttributes(gameName: "Superb Owl", gameNumber: "Game 1")
    let contentState = SportsActivityAttributes.ContentState(teamOneScore: "0", teamTwoScore: "0")
    let activityContent = ActivityContent(state: contentState, staleDate: nil)
    if let activity = try? Activity.request(attributes: activityAttributes,
                                            content: activityContent,
      // Setting your pushType as .token allows the Activity to generate push tokens for the server to watch.
                                            pushType: .token) {
      // Register your Live Activity with Braze using the pushTokenTag.
      // This method returns a Swift background task.
      // You may keep a reference to this task if you need to cancel it wherever appropriate, or ignore the return value if you wish.
      let liveActivityObserver: Task = AppDelegate.braze?.liveActivities.launchActivity(pushTokenTag: "sports-game-2024-03-15",
                                                                                        activity: activity)
    }
  }
  
}

ライブアクティビティウィジェットによって、この最初の内容がユーザーに表示されます。

2 つのチームのスコアを持つiPhone ロックスクリーンでのライブアクティビティ。Wild Bird Fund チームと Owl Rehab チームのスコアは両方とも0です。

ステップ3:アクティビティトラッキングを再開する

Braze がアプリ起動時にライブアクティビティを追跡できるようにするには、次のようにします。

  1. AppDelegate ファイルを開きます。
  2. 使用可能な場合は、ActivityKit モジュールをインポートします。
  3. アプリケーションで登録したすべての ActivityAttributes タイプについて、application(_:didFinishLaunchingWithOptions:)resumeActivities(ofType:) を呼び出します。

これにより、Brazeは、すべての有効なライブアクティビティのプッシュトークン 更新を追跡するタスクを再開できます。ユーザーがデバイス上のライブアクティビティを明示的に削除した場合、削除されたと見なされ、Brazeはそれを追跡できなくなることに注意してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import UIKit
import BrazeKit

#if canImport(ActivityKit)
  import ActivityKit
#endif

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

  static var braze: Braze? = nil

  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    
    if #available(iOS 16.1, *) {
      Self.braze?.liveActivities.resumeActivities(
        ofType: Activity<SportsActivityAttributes>.self
      )
    }

    return true
  }
}

ステップ 4:アクティビティを更新する

2チームのスコアを持つiPhoneロック画面でのライブアクティビティ。Wild Bird Fund チームは2ポイントで、Owl Rehab チームは4ポイントです。

/messages/live_activity/update エンドポイントを使用すると、Braze REST API を介して渡されたプッシュ通知を介してライブアクティビティを更新できます。このエンドポイントを使用して、Live Activity のContentState を更新します。

ContentState を更新すると、ライブアクティビティのウィジェットに新しい情報が表示されます。前半終了時に、Superb Owl ショーがどのように見えるかを以下に示します。

詳細については、/messages/live_activity/updateエンドポイントの記事を参照してください。

ステップ5:アクティビティを終了する

ライブアクティビティが有効な場合、ユーザーのロック画面とダイナミックアイランドの両方に表示されます。ライブアクティビティを終了し、ユーザーの UI から削除する方法はいくつかあります。

  • ユーザーによる却下:ユーザーは手動でライブアクティビティを削除できます。
  • タイムアウト:デフォルトである8時間が経過すると、iOS はユーザーのダイナミックアイランドからライブアクティビティを削除します。デフォルトである12時間が経過すると、iOS はユーザーのロック画面からライブアクティビティを削除します。
  • 却下日:タイムアウトする前に、ユーザーのユーザーインターフェイスからライブアクティビティを削除する日時を指定できます。これは、アクティビティの ActivityUIDismissalPolicy で定義するか、/messages/live_activity/update エンドポイントへのリクエストで dismissal_date パラメータを使用して定義します。
  • アクティビティの終了:/messages/live_activity/update エンドポイントへのリクエストで end_activitytrue に設定すると、すぐにライブアクティビティを終了できます。

詳細については、/messages/live_activity/updateエンドポイントの記事を参照してください。

トラブルシューティング

トラブルシューティングの詳細やよくある質問については、FAQを参照してください。

「このページはどの程度役に立ちましたか?」
New Stuff!