AndroidにはAndroid Live通知と呼ばれる同様の機能があります。
要件
- ネイティブiOS(Swift/Objective-C)を使用している場合は、iOS SDKセットアップに従ってください。
- ラッパーSDK(React Native、Flutter、Unityなど)を使用している場合は、Mobile SDKセットアップに従い、次にクロスプラットフォームLive Activity SDKセットアップに従ってください。
- push-to-startサポートにはOneSignal iOS SDKバージョン5.2.0+が必要です(リリースノートを参照)。
- クリック追跡と確認済み配信にはOneSignal iOS SDKバージョン5.2.15+が必要です
- iOS 16.1+およびiPadOS 17+
- .p8 APNsキーを使用します。AppleはLive Activitiesでp12証明書をサポートしていません。
- Xcode 14以降
セットアップ
これらの手順では、Live Activitiesを迅速にセットアップする方法を説明します。詳細とデザインのカスタマイズについては、AppleのLive Activities開発者ドキュメントを参照してください。1. Widget Extensionを追加する
Xcodeで、ファイル > 新規 > ターゲット… > Widget Extensionに移動します。
OneSignalWidget)、Include Live Activityが選択されていることを確認します。次に完了をクリックします。


2. Info.plistを更新する
メインターゲットのInfo.plistに、キーSupports Live ActivitiesをBooleanとして追加し、YESに設定します。

info.plist
Live Activitiesを更新する場合、「優先度」を設定するオプションがあり、Appleはこれを使用して更新の緊急性を判断します。Appleには内部しきい値があり、高優先度フラグを頻繁に使用するリクエストをスロットルします。Live Activitiesのユースケースがより頻繁な高優先度更新に依存している場合、AppleのDeveloper Docsで指示されているように、Info.plistにキー
NSSupportsLiveActivitiesFrequentUpdatesをBoolean型でYESとして追加できます。Live Activityがプッシュ予算を超えると、ユーザーにダイアログが表示され、Live Activityを続行することを許可すると、シームレスなユーザーエクスペリエンスのために予算が自動的に増加します。3. SDKを追加する
- パッケージマネージャー
- Cocoapods
Widget Extensionターゲットで、一般 > フレームワーク、ライブラリ、および埋め込みコンテンツの下に
OneSignalFrameworkを追加します:
4. ウィジェット属性とUIを定義する
your-nameLiveActivity.swiftファイル(例:OneSignalWidgetLiveActivity.swift)を開いて、構造体のプロパティを定義し、ウィジェットUIを変更します。
your-nameAttributesは、Live Activityの静的コンテンツを説明します。ContentStateは、Live Activityの動的コンテンツを説明します。
OneSignalWidgetLiveActivity.swiftファイルにコピーペーストします。
your-nameLiveActivity.swift
5. メインターゲットメンバーシップを許可する
your-nameLiveActivity.swiftファイルのターゲットメンバーシップリストにメインアプリターゲットを追加します。
Xcodeで、画面の右側にあるInspectorパネルを開きます。ターゲットメンバーシップ内で、**+**ボタンをクリックし、ContentViewとOneSignal初期化コードを含むメインアプリターゲットを選択します。

6. AppDelegateにセットアップメソッドを追加する
OneSignal SDK初期化の後、AppDelegateでOneSignal.LiveActivities.setupを呼び出します。
OneSignalWidgetAttributesをLive Activity属性構造体の名前に置き換えます。
AppDelegate
Live Activityを開始する
デバイスでLive Activityを開始するには2つのオプションがあります:- Push-to-start
- Trigger-in-app
Push To Start APIリクエストを送信します。すべての名前とIDがウィジェットの構成と正確に一致することを確認してください(パラメーターは大文字小文字を区別します)。何かが欠落しているか、誤って追加された場合、ウィジェットの起動時に問題が発生する可能性があります。上記の例で機能するリクエストの例を次に示します。置き換え:
-
YOUR_APP_IDをOneSignal App IDに置き換えます。 -
YOUR_APP_API_KEYをOneSignal APIキーに置き換えます。 -
OneSignalWidgetAttributesをWidget Attributes構造体の名前に置き換えます。curl

push-to-startでLive Activityを正常に開始しました!ユーザーは更新を受け取り続けるために「許可」を選択する必要があります。
Live Activityのクリックを追跡する
OneSignalのクリック追跡を実装することで、ユーザーがLive ActivitiesとDynamic Islandをタップしたときを追跡します。これにより、エンゲージメントを測定し、オプションでユーザーをアプリ内の特定のコンテンツにディープリンクできます。ステップ1: ウィジェットにクリック追跡を追加する
Live Activityウィジェット内のクリックを追跡したいUIコンポーネントに.onesignalWidgetURL()モディファイアを追加します:
- ディープリンク用のURLを渡すか、ナビゲーションなしでクリック追跡のみを行う場合は
nilを渡すことができます .onesignalWidgetURL()を使用している場合、ビュー階層にAppleの.widgetURL()モディファイアを含めることはできません- 両方のクリックを追跡したい場合は、メインのLive ActivityビューとDynamic Islandの両方にモディファイアを適用します
ステップ2: アプリでURLを処理する
クリックを追跡しユーザーを適切にルーティングするために、アプリにURLハンドリングを追加します:trackClickAndReturnOriginal()メソッドは、OneSignalでクリックを自動的に追跡し、アプリが処理するためにウィジェットで指定した元のURLを返します。
Live Activityを更新する
Update Live Activity APIを使用してアクティブなウィジェットを更新します。 アクティビティを開始するときに使用したactivity_idと一致させます。
このサンプルリクエストは、定義したactivity_idがpush-to-startというタイトルであるため、push-to-startウィジェットを更新します。
click-to-startウィジェットを更新するには、リクエストパスをpush-to-startの代わりにclick-to-startを使用するように更新します。
curl

Live Activityを正常に更新しました!Live Activityの更新の詳細については、Update Live Activity APIをご覧ください。
Live Activityを終了する
同じUpdate Live Activity APIを使用して、"event": "end"を設定することでLive Activityを終了できます。
curl
- SDK の
exit()メソッドを使用する。 - ユーザーが手動でLive Activityをスワイプして削除する。
- ユーザーがiOS設定でLive Activitiesの権限を取り消す。

Live Activityを正常に終了し、例を完了しました!
ベストプラクティスと推奨事項
デザインに関する考慮事項
- AppleのLive Activities Human Interface Guidelinesに従ってください。
- 重要な情報を優先して、一目で理解しやすくします。
- Dynamic Islandに注意を引く要素をアプリに追加しないでください。
- マージンを使用し、要素間のスペースを維持します。
- 背景に太字の色を使用します。ライトモードとダークモードの両方をデザインします。
機能性
- Appleは、各Live Activityプレゼンテーションをサポートする必要があります。
- ディープリンクをテストします。
- AppleのLive ActivitiesでライブデータをDisplayingに関するガイドをレビューします。
- Live Activityに機密情報を表示しないでください。
フォールバックメッセージの設定
Live Activityが開始された後、ユーザーが更新を受信できない場合は、アプリを開くことでアクティビティが更新されます。最初の更新を送信することを見込んでいる時点以降の将来の日時にstale dateを設定します。更新を受信していないユーザーには、代わりにフォールバックメッセージが表示されます。 ウィジェットUIでこの「stale」状態をリッスンして、フォールバックメッセージを表示できます:
FAQ
高優先度更新の予算は何ですか?
Appleは高優先度(priority: 10)更新に固定制限を提供していませんが、動的なシステムレベルの予算を適用しています。短期間に高優先度更新を送信しすぎると、更新が遅延またはドロップされるスロットリングが発生する可能性があります。
スロットリングのリスクを軽減するには:
- 優先度レベルを混在させる:Appleは、バランスを取るために
priority: 5(標準)とpriority: 10(高)の両方を使用することを推奨しています。 priority: 10は、時間に敏感または重要な更新のみに予約します(例:注文ステータスの変更、ゲームスコア)。
- アプリの
Info.plistファイルにNSSupportsLiveActivitiesFrequentUpdatesキーをBooleanYESとして追加します。 - この予算を超えると、iOSはユーザーに追加の更新を許可するように促す場合があります。ユーザーが同意すると、Appleはシームレスなエクスペリエンスを維持するために、許可された更新制限を自動的に拡張します。
メインアプリからLive Activity更新を読み取ることはできますか?
はい。デバッグまたはUI同期のために更新を監視できます:APIが400を返し、サブスクライバー制限を超えているというエラーメッセージが表示されました。どうすればよいですか?
プッシュサブスクライバー数がプランのプッシュサブスクライバー数を超えている場合は、アカウントを次のプランにアップグレードするか、support@onesignal.comにお問い合わせください。最新のプラン詳細については、こちらをご覧ください。
プッシュとLive Activitiesの両方を送信しないようにするにはどうすればよいですか?
アプリケーションは既に一連のプッシュ通知を送信している可能性があり、設計したLive Activityがこれらのプッシュ通知の必要性を置き換えます。たとえば、プッシュ経由でスコア更新を送信している場合、これをLive Activityで置き換えることができます。 ユーザーがメッセージを受け取りすぎないようにするために、ユーザーがLive Activityにオプトインするときにデータタグを追加することをお勧めします。このデータタグを追加することで、同じまたは類似のコンテンツを含む可能性のあるプッシュメッセージからこのデータタグを持つユーザーを除外できます。詳細については、データタグとセグメントをご覧ください。トラブルシューティング
受信者なし
Live Activityを開始または更新しようとするときにユーザーが見つかるようにするには、アクティビティタイプ、ウィジェット、およびcURLリクエストのすべてに一致する値があることを確認する必要があります。-
リクエストのパスパラメーターをチェックして、正しくフォーマットされたリクエストをサーバーに送信していることを確認します。App IDは
OneSignal.Initializeメソッドで使用したApp IDと一致する必要があり、アクティビティタイプはLive Activityファイルで定義したタイプと一致する必要があります。 - Push To Start APIリクエストの本文には、次のパラメーターが必要です:
event:"start"event_updates: アクティビティタイプの下の構造体で定義した動的データで、ウィジェットで使用されます。リクエスト、タイプ、ウィジェット間で大文字小文字と変数がすべて一致することを確認してください。event_attributes: 静的データはEvent Updatesと同じロジックに従い、使用中のすべての変数を含める必要があり、Live Activityのすべての部分とリクエスト全体で一致する必要がありますactivity_id: これによりウィジェットにIDが割り当てられ、ユーザーのデバイスで起動された後にアクティビティを更新するために使用されます。name: Live Activity名。contents: プッシュ送信に必要なメッセージコンテンツ。headings: プッシュ送信に必要なメッセージ見出し。included_segmentsのようなターゲティングパラメーター。利用可能なオプション。
アクティビティが送信されたが、受信されない
- リクエストが正しくフォーマットされていることを確認します。ウィジェットで使用されているフィールドが省略されている場合、アクティビティが起動または更新されない可能性があります。
-
APIリクエストで、設定している
priorityレベルを確認します。これを10(最高優先度)に設定している場合は、5に下げて再度テストしてください。Appleは独自の内部レート制限に従って、頻繁に送信されるリクエストをスロットルします。
NSSupportsLiveActivitiesFrequentUpdatesキーを追加します。Live Activityがプッシュ予算を超えると、ユーザーにダイアログが表示され、ユーザーがLive Activityの継続を許可すると、シームレスなユーザーエクスペリエンスのために予算が自動的に増加します。
サポートが必要ですか?サポートチームとチャットするか、
support@onesignal.comにメールしてください以下を含めてください:- 発生している問題の詳細と再現手順(利用可能な場合)
- OneSignal App ID
- 該当する場合は、External IDまたはSubscription ID
- 該当する場合は、OneSignalダッシュボードでテストしたメッセージのURL
- 関連するログまたはエラーメッセージ

