OSNotificationクラスは、OneSignalのSDKにおけるプッシュ通知ペイロードを表します。アプリで通知を処理する際に、通知のタイトル、本文、カスタムデータ、プラットフォーム固有のプロパティにアクセスするために使用します。
プッシュ通知ペイロードは4096バイトに制限されています。切り捨てを避けるために、ペイロードを3500バイト未満に保ってください。additionalDataフィールドは2048バイトに制限されています。
アプリでOSNotificationにアクセスする
すべてのOneSignal SDKは、OSNotificationオブジェクトを返す通知イベントリスナーを提供します。
Androidフィールド
| Property | Type | Description |
|---|
getBody() | String | 通知の本文テキスト。 |
getTitle() | String | 通知のタイトル。 |
getLaunchURL() | String | 通知がクリックされたときに開かれるURL。 |
getNotificationId() | String | OneSignal通知UUID。 |
getAdditionalData() | JSONObject | ダッシュボードまたはREST API経由で設定されたカスタムキーバリューデータ。最大2048バイト。 |
getTemplateId() | String | テンプレートを使用して送信された場合のテンプレートUUID。 |
getAndroidNotificationId() | int | Androidネイティブ通知ID。 |
getLargeIcon() | String | 大きいアイコンのURLまたはリソース名。 |
getSmallIcon() | String | 小さいアイコンのリソース名。 |
getSmallIconAccentColor() | String | ARGB形式のアイコンアクセントカラー。 |
getSound() | String | 再生されるサウンドリソース名。 |
getCollapseId() | String | 通知置き換え用のコラプスキー。 |
getPriority() | int | Androidの優先度(-2から2)。 |
getLedColor() | String | ARGB形式のLEDカラー。 |
getLockScreenVisibility() | int | ロック画面の表示設定:1 = public、0 = private、-1 = secret。 |
getFromProjectNumber() | String | 送信者のプロジェクト番号。 |
getGroupedNotifications() | List<OSNotification> | サマリーに含まれる通知。 |
getGroupKey() | String | サマリーで使用されるグループキー。 |
getGroupMessage() | String | サマリーテキスト。 |
getBackgroundImageLayout() | BackgroundImageLayout | 背景画像のレイアウトとテキストカラーのオブジェクト。 |
getActionButtons() | List<ActionButton> | アイコン、テキスト、IDを持つアクションボタン。 |
getRawPayload() | String | ペイロードの完全な生JSONストリング。 |
iOSフィールド
| Property | Type | Description |
|---|
body | NSString | 通知の本文テキスト。 |
title | NSString | 通知のタイトル。 |
launchURL | NSString | 通知がクリックされたときに開かれるURL。 |
notificationId | NSString | OneSignal通知UUID。 |
additionalData | Dictionary | ダッシュボードまたはREST API経由で設定されたカスタムキーバリューdata。最大2048バイト。 |
templateId | NSString | テンプレートを使用して送信された場合のテンプレートUUID。 |
subtitle | NSString | サブタイトルテキスト。 |
category | NSString | iOSカテゴリ識別子。 |
threadId | NSString | 通知をスレッドにグループ化するために使用されます(iOS 10+)。 |
badge | NSInteger | 絶対バッジ値。 |
badgeIncrement | NSInteger | バッジを増やす量。 |
contentAvailable | BOOL | content-available=1の場合、バックグラウンドフェッチをトリガーします。 |
mutableContent | BOOL | mutable-content=1の場合、Notification Service Extensionをトリガーします。 |
actionButtons | NSArray | iOSアクションボタン。 |
rawPayload | NSDictionary | ペイロードの完全な生JSON。 |
parseWithApns | Method | 生のAPNSペイロードをOSNotificationに変換します。Service Extensionで使用します。 |
OSNotificationAction(クリックイベント)
ユーザーの通知に対するインタラクションを記述します。
| Property | Type | Description |
|---|
actionId | String | クリックされたアクションボタンのID。 |
type | enum | Opened(デフォルトタップ)またはActionTaken(ボタンタップ)。 |
カスタムOneSignalペイロード構造
すべてのOneSignal通知には、ペイロード内に特別な"custom"オブジェクトが含まれています:
{
"custom": {
"i": "the-notification-id"
}
}
このキーは、OneSignal SDKが通知を処理するために必要です。欠落している場合、通知はクリックイベントや分析をトリガーしません。OneSignalも使用しているデバイスに別のサービスからプッシュを送信する場合は、重複処理を防ぐためにこのキーでフィルタリングしてください。詳細はプッシュペイロードの処理を参照してください。
additionalDataをAPNSルートに移動する
iOSアプリの場合、additionalDataフィールドをcustomディクショナリの内部ではなく、APNSペイロードのルートに配置できます。これにより、カスタム通知ハンドラーでのアクセスが簡単になります。
1. APIで有効にする
Update an app APIを使用して、次のように設定します:
{
"additional_data_is_root_payload": true
}
2. dataを使用してプッシュを送信する
dataフィールドがAPNSルートペイロードに表示されます:
{
"aps": {
"alert": { "title": "Sale", "body": "20% off all items!" }
},
"promo_code": "SPRING20"
}
これで、customディクショナリを確認せずにpromo_codeに直接アクセスできます。
復元された通知(Android)
Android SDKは、デバイスの再起動またはアプリの再起動後に通知を復元します。
| Property | Type | Description |
|---|
restoring | boolean | デバイス/アプリの再起動後に通知が復元された場合はtrue。 |
restoringフラグを確認して、復元された通知をスキップしてください。古い通知が完全に復元されないようにするには、送信時に短いまたは0のTTL(time-to-live)を設定してください。
プッシュトークンの形式
- iOS Push (APNS): 64文字、16進数のみ(0-9、a-f)。
deviceToken.map {String(format: "%02x", $0)}.joined()
- Android Push (FCM): 通常163文字、英数字で、ハイフン、コロン、アンダースコアを含む場合があります。
FAQ
ペイロードの最大サイズは?
プッシュ通知ペイロードの合計は4096バイトに制限されています。additionalDataフィールドは2048バイトに制限されています。切り捨てを避けるために、ペイロードの合計を3500バイト未満に保ってください。
生のペイロードでOneSignal通知を識別するには?
すべてのOneSignal通知には、通知IDを含む"i"キーを持つ"custom"オブジェクトが含まれています。このキーを確認することで、OneSignal通知と他のプロバイダーから送信された通知を区別できます。
APNSルートペイロードでadditionalDataにアクセスできますか?
はい。Update an app API経由でadditional_data_is_root_payloadを有効にすると、additionalDataフィールドをcustomディクショナリの内部ではなくAPNSルートに配置できます。詳細はadditionalDataをAPNSルートに移動するを参照してください。