OneSignalから送信されたプッシュ通知のデータには、OSNotificationクラスを介してアクセスできます
Android通知サービスエクステンション
ユーザーに表示される前に通知を処理できます。一般的なユースケースには次のものがあります:- 通知を表示するかどうかに関わらず、バックグラウンドでデータを受信します。
- カスタムアクセントカラー、バイブレーションパターン、または利用可能なその他の
NotificationCompatオプションなど、クライアント側アプリロジックに応じて特定の通知設定を上書きします。
ステップ1: サービスエクステンション用のクラスを作成する
INotificationServiceExtensionを拡張し、onNotificationReceivedメソッドを実装するクラスを作成します。
メソッドonNotificationReceivedパラメータは、INotificationReceivedEvent型のeventです。
@Keepアノテーションは、ProGuard/R8がミニファイ中にクラスの名前変更や削除を行わないようにするために必要です。ステップ2: 通知をカスタマイズする
以下は、上記のテンプレート通知サービスエクステンションクラスに実装できる一般的な例です。- 通知の表示を防ぐ
- カスタムフィールドを追加
- 通知の色とアイコンを変更
event.preventDefault()を呼び出すと通知の自動表示を阻止し、手動で表示するかまったく表示しないかを決定できます。ステップ3: サービスエクステンションをAndroidManifest.xmlに追加する
アプリケーションタグ内のAndroidManifest.xmlファイルにクラス名と値をmeta-dataとして追加します。「未使用」の警告は無視してください。
XML
com.onesignal.example.NotificationServiceExtensionをクラスの完全修飾名に置き換えてください。
iOS通知サービスエクステンション
UNNotificationServiceExtensionを使用すると、ユーザーに表示される前にプッシュ通知のコンテンツを変更でき、次のような他の重要な機能にも必要です: アプリのモバイルSDKセットアップの手順に従った場合は、エクステンションはすでに設定されているはずです。このセクションでは、OneSignal通知ペイロードデータにアクセスする方法と、発生している可能性のある問題をトラブルシューティングする方法について説明します。iOSプッシュペイロードの取得
didReceive(_:withContentHandler:)のオーバーライドはOneSignalExtension.didReceiveNotificationExtensionRequestを呼び出します。このメソッドが呼び出される前に、bestAttemptContentを読み取ったり変更したりできます。
この例では、次のデータを含む通知を送信します:
JSON
userInfoのcustomディクショナリ内のaキーを介してOneSignalNotificationServiceExtension内でこの追加のdataにアクセスします:
iOS通知サービスエクステンションのトラブルシューティング
このガイドは、iOSモバイルアプリで画像、アクションボタン、または配信確認が表示されない問題をデバッグするためのものです。Xcode設定を確認する
General > Targetsで、メインアプリターゲットとOneSignalNotificationServiceExtensionターゲットが同じで正しいことを確認してください:- サポートされる送信先
- 最小デプロイメント(iOS 14.5以上)

Xcodeのメインアプリターゲットの例

XcodeのOneSignalNotificationServiceExtensionターゲットの例
NSExtensionキーを展開します。次のことが表示されることを確認してください:
XML

InfoタブのNSExtensionキーの例
「インストール時のみコピー」をオフにする
メインアプリターゲット > Build Phases > Embed App Extensionsを選択します。「インストール時のみコピー」がチェックされていないことを確認してください。チェックされている場合は、チェックを外してください:
メインアプリターゲットのビルドフェーズ設定
iOS通知サービスエクステンションのデバッグ
通知サービスエクステンションが正しくセットアップされていることを確認するには、次の手順に従ってください。1. OneSignalNotificationServiceExtensionコードを更新する
NotificationService.mまたはNotificationService.swiftを開き、ファイルの内容全体を以下のコードに置き換えます。これにより、エクステンションが実行されていることを確認するためのログが追加されます。
YOUR_BUNDLE_IDを実際のBundle IDに置き換えてください。
デバッグログタイプはコンソールで Action > Include Debug Messages を使用して有効にする必要があります。
2. アクティブスキームを変更する
アクティブスキームをOneSignalNotificationServiceExtensionに設定します。

Xcodeアクティブスキームの選択
3. プロジェクトをビルドして実行する
実際のデバイスでXcodeでプロジェクトをビルドして実行します。4. コンソールを開く
Xcodeで、Window > Devices and Simulatorsを選択します。
Xcode Devices and Simulatorsウィンドウ

デバイスコンソールアクセスボタン
5. コンソールを確認する
コンソールで:- Action > Include Debug Messages を選択します
- CATEGORYとして
OneSignalNotificationServiceExtensionを検索します - Start を選択します

コンソールデバッグ設定
contentsプロパティを使用します)。この例では、ペイロードは次のとおりです:
cURL

コンソールデバッグ出力の例
FAQ
iOSで通知サービスエクステンションが実行されないのはなぜですか? エクステンションはmutable-contentが設定されている場合にのみ実行されます。OneSignalは添付ファイルやアクションボタンがある場合に自動的にこれを設定します。Xcode設定がトラブルシューティングセクションの要件と一致していることを確認してください。
Androidで通知の表示を防ぐことはできますか?
はい、event.preventDefault()を呼び出すと通知を抑制できます。後でevent.getNotification().display()を呼び出して表示するか、呼び出さずに静かに破棄することもできます。詳細については重複通知を参照してください。
AndroidでAnnotation @Keepは必要ですか?
はい、@Keepアノテーションは、ProGuard/R8がミニファイ中にINotificationServiceExtensionを実装するクラスの名前変更や削除を行わないようにするために必要です。
関連ページ
モバイルSDKセットアップ
iOSおよびAndroid向けにOneSignal SDKをインストールして設定します。
画像とリッチメディア
プッシュ通知に画像、GIF、動画を添付します。
配信確認
デバイスへの通知配信確認を追跡します。
重複通知
すべてのプラットフォームでの重複プッシュ通知をトラブルシューティングします。