Skip to main content
いいね、返信、フォロー、受信メッセージ、ゲーム内の対戦イベントなど、ユーザーに関係する出来事が発生したときにユーザーに通知します。これらの通知は、ユーザーがアプリで現在アクティブでない場合でも、再エンゲージメントを促進します。
OneSignalはリアルタイムコミュニケーション用に設計されていません。プッシュ通知は、ユーザーがアプリでアクティブでないときのフォールバックとして使用するのが最適です。リアルタイムのアプリ内メッセージングには、アプリの既存のメッセージングレイヤーを使用し、受信者がオフラインまたは非アクティブの場合にのみOneSignal通知をトリガーしてください。

ソーシャルアクティビティ

誰かがいいね、コメント、メンション、タグ付け、フォローしたときにユーザーに通知します。

ダイレクトメッセージ

デバウンスと会話へのディープリンクを使用して、新着メッセージをユーザーに知らせます。

ゲームアラート

拠点への攻撃、チャレンジ、ギルドアクティビティなど、時間的制約のある対戦イベントを送信します。

前提条件

開始する前に、以下を用意してください:
  • アプリにOneSignal SDKがインストールされていること。モバイルSDKセットアップまたはWeb SDKセットアップを参照してください。
  • すべてのユーザーにexternal_idが設定されており、独自の識別子でターゲティングできること。ユーザーとエイリアスを参照してください。
  • ソーシャルアクションを検出してOneSignal APIを呼び出せるバックエンド。REST API概要を参照してください。
  • パーソナライゼーションにcustom_dataを使用する予定の場合は、ダッシュボードで作成されたテンプレートcustom_dataを使用するにはtemplate_idが必須です。
custom_dataペイロードは2KB未満に抑えてください。 custom_dataフィールドにはハードサイズ制限があります。会話リスト全体、リーダーボード配列、base64画像、HTMLなどの大きなペイロードを送信すると、切り捨てや拒否のリスクがあります。リッチコンテンツの場合は、識別子(例:digest_idまたはsummary_url)を渡し、タップ時に受信者のデバイスがバックエンドから完全なペイロードを取得するようにしてください。サイズ制限の詳細と配列反復パターンについては、API custom_dataでメッセージをパーソナライズを参照してください。

ソーシャルアクティビティ通知

ユーザーがソーシャルアクションに関与したときにプッシュ通知を送信します。custom_dataを使用して、送信者の名前、アバター、関連するコンテキストを送信時にメッセージに挿入します。データはOneSignalに保存されません。

一般的なソーシャルアクション

セットアップ

1

バックエンドでアクションを検出

ソーシャルアクションが発生すると、バックエンドは送信者と受信者に加えて、投稿IDやコンテンツなどの関連コンテキストを特定します:
JSON
2

プッシュテンプレートを作成

ダッシュボードで、Messages > Templates > New Push Templateに移動します。Liquid構文を使用してcustom_dataフィールドを参照します:見出し:
Liquid
メッセージ:
Liquid
画像(オプション、送信者のアバターを表示):
Liquid
テンプレートを保存し、そのtemplate_idをメモします。
3

Create Message APIを呼び出す

バックエンドから、受信者に通知を送信します:
JSON
OneSignalは、custom_dataの値を使用して送信時にテンプレートをレンダリングします。送信者の名前とアバターは、OneSignalに保存されることなく通知に表示されます。
4

オプション:メールとSMSのフォールバックを追加

プッシュを無効にしているユーザーや通知が配信されなかったユーザーにリーチするには、下記のメールとSMSのフォールバックを参照してください。
すべてのLiquidプレースホルダーで| default:フィルターを使用して、フィールドが欠落してもメッセージが自然に読めるようにしてください。例:{{ message.custom_data.sender_name | default: "Someone" }}。その他のフィルターについては、Liquid構文の使用を参照してください。
アバターと画像URLの要件。 sender_avatarのURL(およびその他の通知画像)は、次の条件を満たす必要があります:
  • HTTPS — iOSはHTTP URLを拒否します。
  • 一般公開されていること — APNsとFCMは認証付きリクエストを送信できません。
  • 約1 MB未満 — iOSの制限は10 MBですが、実用的な配信時間の観点からは小さいアセットが有利です。
  • 正しいContent-Typeヘッダーで配信されることimage/jpegimage/pngなど。
キャッシュヘッダー付きのCDNからのホスティングが最も安全な構成です。

大量アクションのスロットリング

バイラルな投稿は、1秒あたり数千のlikeイベントを生成する可能性があります。それぞれに対してプッシュを送信しないでください — 受信者があふれ、アプリがミュートまたはアンインストールされる原因になります。パターンは次のとおりです:
  1. バックエンドでカウントを蓄積します(例:受信者と投稿をキーにしたRedisカウンター)。
  2. 静穏期間(10分が妥当なデフォルト)の後、1つのダイジェストプッシュを送信します:「12人があなたの投稿にいいねしました。」
  3. ダイジェスト後にさらにいいねが届いた場合は、新しい期間を開始します — すぐに再度プッシュしないでください。
同じロジックがコメント、フォロー、リアクションにも適用されます。バックエンドでデバウンスできない場合のOneSignal側のレート制限については、スロットリングを参照してください。

ダイレクト(ユーザー間)メッセージ

ユーザーが新しいダイレクトメッセージを受信したときに通知し、会話に直接ディープリンクします。
受信者がチャットでアクティブでない場合にのみプッシュを送信してください。すでに会話を読んでいる人に通知すると、悪い体験になります。通知をトリガーする前に、アプリ独自のロジックを使用して受信者が現在アクティブかどうかを確認してください。OneSignalは、ユーザーが現在アプリを使用しているかどうかを追跡しません。

セットアップ

1

メッセージ送信を検出してアクティビティを確認

ユーザーAがユーザーBにメッセージを送信したら、ユーザーBがその会話で現在アクティブかどうかを確認します。ユーザーBがオフラインまたは会話にいない場合は、プッシュ送信に進みます。
2

メッセージごとに1つのプッシュを送信しない

ユーザーAが連続して複数のメッセージを送信した場合は、最後のメッセージの後、通知をトリガーする前に少し待ちます。バックエンドでの実装方法は次のとおりです:
  1. 最初のメッセージが届いたら、タイマーを開始します(例:60秒)。
  2. タイマーが切れる前に別のメッセージが届いたら、タイマーをリセットします。
  3. 新しいメッセージなしでタイマーが切れたら、未読数をまとめた1つのプッシュを送信します。
OneSignalは複数のAPI呼び出しを自動的に統合しないため、APIを5回呼び出すと5つの通知が送信されます。
3

プッシュ通知を送信

会話へのディープリンク付きのプッシュをユーザーBに送信します:
JSON
アプリは通知オープン時にdata.conversation_idを読み取り、正しい画面に遷移します。プラットフォーム別のセットアップについては、ディープリンクを参照してください。
4

オプション:メールとSMSのフォールバックを追加

プッシュを無効にしているユーザーや通知が配信されなかったユーザーにリーチするには、下記のメールとSMSのフォールバックを参照してください。
会話ごとにネイティブに通知をグループ化。 バックエンドのデバウンスは通知の発生数を減らしますが、iOSとAndroidは複数の通知を視覚的に1つのスレッドにまとめることもできます。スレッドまたはコラプス識別子(例:conversation_id)を設定して、OSが同じチャットからのメッセージをグループ化できるようにします。通知のグループ化を参照してください。
新着メッセージごとにバッジ数を更新。 ほとんどのチャットアプリでは、iOS/Androidのバッジがすべての会話にわたる合計未読メッセージ数を反映することが望まれます。各プッシュでAPI経由で未読数を渡すことで、ユーザーが1つの通知をクリアしても他の未読が残っている場合でも、バッジが正確に保たれます。バッジを参照してください。
ロック画面のプライバシー。 iOSはデフォルトでロック画面に通知コンテンツを表示します — メッセージのプレビュー(「Anna: ‘Hey, you around?’」)も含まれます。機密性の高いコンテンツ(健康、金融、出会い、ビジネス)を扱うメッセージングアプリでは、汎用的なプレビュー(「Annaからの新着メッセージ」)を送信し、ユーザーがアプリ内設定で完全なプレビューをオプトインできるようにすることを検討してください。

ゲーム:対戦およびソーシャルアラート

対戦ゲームは、緊急性を生み出す時間的制約のあるアラートから恩恵を受けます。custom_dataを使用して、これらの通知を具体的でパーソナルなものにします。攻撃者の名前を示したり正確なリソース数を表示する通知は、汎用的なアラートよりもはるかに魅力的です。

一般的な対戦イベント

セットアップ

1

ゲームバックエンドでイベントを検出

対戦イベントが発生すると、ゲームバックエンドは影響を受けるプレイヤーを特定し、関連コンテキストを取得します:
JSON
2

プッシュテンプレートを作成

ダッシュボードで、Liquid参照を使用したプッシュテンプレートを作成します:見出し:
Liquid
メッセージ:
Liquid
テンプレートを保存し、そのtemplate_idをメモします。
3

通知を送信

ゲームバックエンドからCreate Message APIを呼び出します:
JSON
urlは、プレイヤーを防衛画面に直接ディープリンクします。dataオブジェクトは、アプリの通知ハンドラーにコンテキストを渡し、正しいバトル状態を読み込めるようにします。
4

オプション:メールとSMSのフォールバックを追加

プッシュを無効にしているプレイヤーや通知が配信されなかったプレイヤーにリーチするには、下記のメールとSMSのフォールバックを参照してください。
緊急でないアラートは静穏時間を尊重。 現地時間の午前3時の拠点攻撃プッシュは、オプトアウトの既知の原因です。ゲームアラートを2つの層に分けてください:
  • 時間的に重要(30分後に始まるギルド戦、今まさに攻撃されている拠点)— 現地時間に関係なくすぐに送信します。
  • 時間的に重要でない(部隊の準備完了、デイリー報酬の利用可能、週間まとめ)— インテリジェント配信またはタイムゾーンごとのカスタム時間を使用して、プレイヤーの現地タイムゾーンの起きている時間帯に届くようにします。
ゲームアラートのオプトアウトのほとんどは、1つ目のカテゴリの頻度が高すぎることではなく、2つ目のカテゴリが誤った時間に送信されることから発生します。
進行中のイベントにはLive Activitiesを検討。 iOS 16.1+での進行中のマッチ、レイド、ライブイベントには、同じコンテキストを更新する繰り返しのプッシュ通知よりも、ロック画面とDynamic Island上のLive Activityの方が優れた体験になることが多いです。ライブ状態(「残り23分、あなたは4位」)にはLive Activitiesを使用し、プッシュはマイルストーンや完了の瞬間のために取っておきます。

その他のゲームアラートの例

テンプレートメッセージ:
Liquid
APIリクエスト:
JSON

メールとSMSのフォールバック

あらゆる通知タイプにメールまたはSMSのフォールバックを追加して、プッシュを無効にしているユーザーや通知が配信されなかったユーザーにリーチします。View Message APIを使用して、配信確認またはクリックを確認します。遅延時間内にいずれも記録されない場合は、メールまたはSMSテンプレートで同じcustom_dataアプローチを使用してフォローアップを送信します。
ソーシャルアクティビティメンションや直接の返信など、価値の高いアクションに最適です。
JSON
メールテンプレートの例(件名):
Liquid
ダイレクトメッセージメッセージごとのアラートよりも、未読会話のデイリーダイジェストとして最適です。
JSON
メールテンプレートの例(件名):
Liquid
メールテンプレートの例(本文、conversations配列を反復):
Liquid
ネストされたオブジェクトや条件付きレンダリングを含む配列反復の完全なリファレンスについては、API custom_dataでメッセージをパーソナライズを参照してください。ゲーム週間リーダーボードのまとめ、ギルド戦の結果、マイルストーンの解除など、緊急でないまとめに最適です。
JSON
メールテンプレートの例(件名):
Liquid
ユーザーがフォールバック設定をコントロールできるようにしてください。「メッセージを見逃した場合はSMSで通知する」のようなオプトインは、意図的にプッシュを無効にしているユーザーへの不要なメッセージを防ぐのに役立ちます。

FAQ

OneSignalはチャットアプリのようにリアルタイムで通知を送信できますか?

いいえ。プッシュ通知はApple(APNs)とGoogle(FCM)のインフラを通じて配信されるため、配信時間にばらつきがあり、配信保証もありません。リアルタイムのアプリ内コミュニケーションにはアプリの既存のメッセージングレイヤーを使用し、受信者がアプリでアクティブでないときのフォールバックとしてOneSignalを使用してください。

すでにアプリを使用しているユーザーに通知しないようにするには?

OneSignalは、ユーザーが現在アプリでアクティブかどうかを追跡しません。通知をトリガーするかどうかは、独自のバックエンドロジックで判断する必要があります。受信者がオフラインまたは該当画面にいないことを確認した場合にのみ、OneSignal APIを呼び出してください。

連続したメッセージによる複数の通知を防ぐには?

通知を送信する前に、バックエンドで短い遅延を追加します。最初のメッセージが届いたらタイマーを開始します。タイマーが切れる前に別のメッセージが届いたら、リセットします。タイマーが切れたら、未読数を含む1つのプッシュを送信します。OneSignalは複数のAPI呼び出しを自動的に統合しないため、APIを5回呼び出すと5つの通知が送信されます。

custom_dataはメッセージ送信後にユーザープロファイルに保存されますか?

いいえ。custom_dataは一時的なもので、APIリクエスト中にのみ存在し、送信時にテンプレートをレンダリングするために使用されます。OneSignalには保存されず、今後のメッセージやJourneysで再利用することはできません。永続的なユーザーデータには、タグを使用してください。

1回のAPI呼び出しで複数の受信者をターゲットにできますか?

はい。include_aliases配列に複数のexternal_id値を渡します。各受信者に異なるパーソナライズされたコンテンツ(たとえば、異なる攻撃者名)が必要な場合は、custom_dataの一括パーソナライゼーションパターンを使用します。完全なアプローチについては、API custom_dataでメッセージをパーソナライズを参照してください。呼び出しごとの正確な受信者上限とレート制限は、Create Message APIリファレンスに記載されています — 非常に大規模なオーディエンスには、呼び出しごとに数千のexternal_id値を渡すよりも、セグメントベースのターゲティングの方が効率的です。

国際的なユーザー向けにメッセージをローカライズする必要がありますか?

複数言語にまたがるオーディエンスの場合は、はい。headingscontentsフィールドは複数の言語コード(例:{ "en": "...", "es": "...", "fr": "..." })を受け入れ、OneSignalは各サブスクリプションの言語に基づいて適切なバリアントを選択します。同じパターンがテンプレートフィールドにも適用されます。フォールバック言語の動作を含む完全なリファレンスについては、多言語メッセージングを参照してください。

関連ページ

API custom_dataでメッセージをパーソナライズ

custom_dataとLiquid構文を使用して、動的なメッセージ固有のデータをテンプレートに挿入します。

メッセージのパーソナライゼーション

タグ、ユーザー属性、セグメンテーションを含む、OneSignalのすべてのパーソナライゼーションオプションの概要。

ディープリンク

通知をタップしたときに、ユーザーをアプリ内の特定の画面に誘導します。

アクティビティフィードを作成

OneSignalの通知インボックスを使用して、アプリ内にソーシャルアラートの履歴を表示します。

テンプレート

プッシュ、メール、SMS用の再利用可能なメッセージテンプレートを作成および管理します。

Create Message API

custom_data、ターゲティング、すべての利用可能なフィールドを含むメッセージ送信の完全なAPIリファレンス。