概要
このガイドでは、OneSignalプッシュ通知を.NET MAUIアプリケーションに統合する方法を説明します。インストールから構成、サービスワーカー管理まで、すべてをカバーします。要件
- .NET 7.0以上
- Visual Studio 2019以降
- 構成されたOneSignalアプリとプラットフォーム
- Xcode 14以上を搭載したmacOS(セットアップ手順はXcode 16.2を使用)
- iOS 12以上、iPadOS 12以上、またはiOS 16.2以上を実行するXcodeシミュレーターを搭載したデバイス
- CocoaPods 1.16.2以上
- Google Playストア(サービス)がインストールされたAndroid 7.0以上のデバイスまたはエミュレーター
OneSignalアプリとプラットフォームを設定
プッシュ通知の必須セットアップ OneSignalでプッシュ通知の送信を開始するには、まずサポートするすべてのプラットフォーム(Apple(APNs)、Google(FCM)、Huawei(HMS)、Amazon(ADM))でOneSignalアプリを設定する必要があります。OneSignalアプリを設定するためのステップバイステップの手順
OneSignalアプリを設定するためのステップバイステップの手順
アプリを作成または選択
- 既存のアプリにプラットフォームを追加するには、OneSignalダッシュボードでSettings > Push & In-Appに移動します。
- 新規に開始するには、New App/Websiteをクリックしてプロンプトに従います。

新しいアプリを作成する例
プラットフォームをセットアップして有効化
- アプリと組織の明確で認識可能な名前を選択します。
- 設定するプラットフォーム(iOS、Androidなど)を選択します。
- Next: Configure Your Platformをクリックします。

最初のOneSignalアプリ、組織、チャネルをセットアップする例
プラットフォーム認証情報を設定
- Android:Firebase認証情報をセットアップ
- iOS:p8トークン(推奨)またはp12証明書
- Amazon:APIキーを生成
- Huawei:OneSignalを承認
ターゲットSDKを選択

使用しているSDKを選択してドキュメントに移動
SDKをインストールしてApp IDを保存

App IDを保存して追加のチームメンバーを招待
SDKセットアップ
1. SDKを追加する
.NET CLIを使用:2. SDKを初期化する
App.xaml.csファイルでOneSignalを初期化します。
YOUR_APP_IDをOneSignalダッシュボードの**Settings > Keys & IDs**にあるOneSignalアプリIDに置き換えます。
3. iOSサービスエクステンションの追加
Microsoftは、Visual StudioとVisual Studio for Macを使用した通知サービスエクステンションの生成に関するガイドをここで提供していますが、現時点ではVSCode用の作成方法に関するガイダンスはありません。 上記のガイドに従ってサービスエクステンションを生成する場合は、Githubにあるサンプルプロジェクトのコードに従うことができますAndroidセットアップ
Firebase認証情報を使用して、OneSignalアプリがAndroidプラットフォーム用に設定されていることを確認してください。 アプリのブランディングに合わせて通知アイコンをセットアップします。このステップをスキップすると、プッシュ通知にデフォルトのベルアイコンが表示されます。 Androidでビルド この時点で、物理Androidデバイスまたはエミュレーターでアプリをビルドして実行できるはずです。- 該当する場合は、iOSセットアップに進みます。
- または、OneSignal SDK統合のテストに進みます。
iOSセットアップ
p8トークン(推奨)またはp12証明書を使用して、OneSignalアプリがiOSプラットフォーム用に設定されていることを確認してください。 以下の手順に従って、バッジ、Confirmed Delivery、画像のサポートを含む、iOSアプリにプッシュ通知を追加します。1. アプリターゲットにPush Notifications機能を追加
Push Notifications機能により、アプリはプッシュトークンを登録して通知を受信できます。- Xcodeでアプリの
.xcworkspaceファイルを開きます。 - アプリターゲット > Signing & Capabilitiesを選択
- + CapabilityをクリックしてPush Notifications機能を追加

アプリターゲットにPush Notifications機能が付与されます
2. アプリターゲットにBackground Modes機能を追加
これにより、プッシュ通知が到着したときにアプリがバックグラウンドで起動できるようになります。- Background Modes機能を追加
- Remote notificationsを有効化

アプリターゲットにRemote Notificationsバックグラウンド実行モードが付与されます
3. アプリターゲットをApp Groupに追加
App Groupsにより、アプリとNotification Service Extension間でデータを共有できます。Confirmed DeliveryとBadgesに必要です。- App Groupが設定されていない場合
- App Groupが既に存在する場合
- App Groups機能を追加
- App Groups機能で**+**をクリック
- 次の形式で新しいコンテナIDを追加:
group.your_bundle_id.onesignal
- group.と.onesignalのプレフィックスとサフィックスを保持します。**
your_bundle_id**をアプリのバンドル識別子に置き換えます。 - 例えば、バンドル識別子
com.onesignal.MyAppの場合、コンテナ名はgroup.com.onesignal.MyApp.onesignalになります。

アプリターゲットはApp Groupの一部です
4. Notification Service Extensionを追加
Notification Service Extension(NSE)により、リッチ通知とConfirmed Delivery分析が有効になります。- Xcodeで:File > New > Target…
- Notification Service Extensionを選択し、Nextをクリック
- 製品名を
OneSignalNotificationServiceExtensionに設定してFinishを押す - Activate schemeプロンプトでDon’t Activateを押す

Notification Service Extensionターゲットを選択

Notification Service Extensionに名前を付ける

アプリターゲットのデバッグを続行するためにアクティブ化をキャンセル

メインアプリと同じデプロイメントターゲットを設定
5. NSEターゲットをApp Groupに追加
ステップ3で追加したものと同じApp Group IDを使用します。- OneSignalNotificationServiceExtension > Signing & Capabilitiesに移動
- App Groupsを追加
- 完全に同じグループIDを追加
group.your_bundle_id.onesignalを使用していない場合は、App TargetとOneSignalNotificationServiceExtension Targetの両方のInfo.plistにApp Group IDを追加してください!詳細については、ステップ3を参照してください。
NSEはアプリターゲットと同じApp Groupに属するようになりました
6. NSEコードを更新
- OneSignalNotificationServiceExtensionフォルダーに移動
NotificationService.swiftまたはNotificationService.mファイルの内容を次のコードに置き換えます:

NotificationServiceファイルに移動

このファイルは、次のステップでパッケージをインストールするまでエラーを表示します
7. NSEターゲットにOneSignalを追加
ios/Podfileを更新して次を含めます:
一般的なpod installエラー
次のエラーが発生する可能性があります。以下の方法で解決できます。ArgumentError - \[Xcodeproj] Unable to find compatibility version string for
object version `70`.
ArgumentError - \[Xcodeproj] Unable to find compatibility version string for object version `70`.
xcodeproj Ruby gemを使用してXcodeプロジェクトファイルを読み取ります。現在、最新のxcodeprojリリースはXcode 16で導入されたオブジェクトバージョン70を認識しません。そのため、CocoaPodsが.xcodeprojファイルを開こうとすると、このエラーでクラッシュします。- Xcodeを閉じます。
- プロジェクトの
ios/<your-app>.xcodeproj/project.pbxprojファイルに移動します。 - この行を変更します:
objectVersion = 70; - これに置き換えます:
objectVersion = 55; - 保存して閉じ、
cd ios pod install cd ..を再実行します
iOSでビルド
実機のiOSデバイスまたはiOSシミュレーター(16.2+)でアプリをビルドして実行できるようになりました。一般的なiOSビルドエラー
Cycle Inside... building could produce unreliable results.
Cycle Inside... building could produce unreliable results.
- Xcodeで
.xcworkspaceフォルダーを開き、アプリターゲット > Build Phasesに移動します。 - **「Embed Foundation Extensions」または「Embed App Extensions」**という名前のフェーズがあるはずです。
- このビルドフェーズを**「Run Script」**の_上_にドラッグして移動します。
- アプリをビルドして実行します。エラーは解決されるはずです。

Xcodeでの正しいBuild Phasesの順序。

Copy only when installingのチェックを外します。
PBXGroup Error
PBXGroup Error
PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa"=>"...", "exceptions"=>["//", "..."], "explicitFileTypes"=>{}, "explicitFolders"=>[], "path"=>"OneSignalNotificationServiceExtension", "sourceTree"=>"<group>"}- エラー内の「path」の下にリストされているフォルダーを見つけます
- Xcodeプロジェクトサイドバーで、フォルダーを右クリックします
- Convert to Groupを選択します

PBXGroupのパスエラー。

フォルダーをグループに変換。
OneSignal SDK統合のテスト
このガイドでは、プッシュ通知、サブスクリプション登録、アプリ内メッセージをテストして、OneSignal SDK統合が正しく機能していることを確認する方法を説明します。モバイルサブスクリプションを確認
テストデバイスでアプリを起動します。
requestPermissionメソッドを追加した場合、ネイティブのプッシュ許可プロンプトが自動的に表示されます。
iOSとAndroidのプッシュ許可プロンプト
OneSignalダッシュボードを確認
- Audience > Subscriptionsに移動します。
- ステータスが「Never Subscribed」の新しいエントリが表示されるはずです。

「Never Subscribed」ステータスのサブスクリプションを表示するダッシュボード
アプリに戻り、プロンプトで「許可」をタップします。
OneSignalダッシュボードのSubscriptionsページを更新します。

「Subscribed」ステータスのサブスクリプションを表示するダッシュボード
テストサブスクリプションをセットアップ
テストサブスクリプションは、メッセージを送信する前にプッシュ通知をテストするのに役立ちます。Test Subscriptionsに追加します。

デバイスをTest Subscriptionsに追加
サブスクリプションに名前を付けます。

「Name your subscription」フィールドを表示するダッシュボード
テストユーザーセグメントを作成します。
セグメントに名前を付けます。
Test Usersという名前を付けます(この名前は後で使用されるため重要です)。Test Usersフィルターを追加し、Create Segmentをクリックします。

Test Usersフィルターを使用して「Test Users」セグメントを作成
API経由でテストプッシュを送信
App API KeyとApp IDを取得します。
提供されたコードを更新します。
YOUR_APP_API_KEYとYOUR_APP_IDを実際のキーに置き換えます。このコードは、先ほど作成したTest Usersセグメントを使用します。コードを実行します。
画像とConfirmed Deliveryを確認します。

iOSとAndroidで画像付きプッシュ通知
Confirmed Deliveryを確認します。

Confirmed Deliveryを示す配信統計

Audience Activityでのデバイスレベルでの Confirmed Delivery
- 画像が受信されない場合は、Notification Service Extensionが不足している可能性があります。
- Confirmed Deliveryがない場合は、こちらのトラブルシューティングガイドを確認してください。
- 問題が発生した場合は、APIリクエストとアプリ起動の最初から最後までのログを
.txtファイルにコピー&ペーストしてください。その後、両方をsupport@onesignal.comと共有してください。
アプリ内メッセージを送信
アプリ内メッセージを使用すると、ユーザーがアプリを使用している間にユーザーとコミュニケーションできます。デバイスでアプリを閉じるか、バックグラウンドにします。
アプリ内メッセージを作成します。
- OneSignalダッシュボードで、Messages > In-App > New In-Appに移動します。
- Welcomeメッセージを見つけて選択します。
- Audienceを、以前使用したTest Usersセグメントに設定します。

「Test Users」セグメントをアプリ内メッセージでターゲティング
必要に応じてメッセージコンテンツをカスタマイズします。

アプリ内Welcomeメッセージのカスタマイズ例
トリガーを「On app open」に設定します。
頻度をスケジュールします。

アプリ内メッセージのスケジュールオプション
メッセージをライブにします。
アプリを開いてメッセージを確認します。

デバイスに表示されたWelcomeアプリ内メッセージ
- 新しいセッションを開始します
- 再度開く前に、少なくとも30秒間アプリを閉じるかバックグラウンドにする必要があります。これにより、新しいセッションが開始されます。
- 詳細については、アプリ内メッセージの表示方法を参照してください。
- まだ
Test Usersセグメントに含まれていますか?- アプリを再インストールしたりデバイスを切り替えたりした場合は、デバイスをTest Subscriptionsに再度追加し、Test Usersセグメントの一部であることを確認してください。
- 問題が発生していますか?
- 上記の手順を再現しながらデバッグログの取得に従ってください。これにより、
support@onesignal.comと共有できる追加のログが生成され、何が起こっているかを調査するのに役立ちます。
- 上記の手順を再現しながらデバッグログの取得に従ってください。これにより、
- サブスクリプションの収集、テストサブスクリプションの設定、セグメントの作成。
- セグメントとCreate message APIを使用した画像付きプッシュとConfirmed Deliveryの送信。
- アプリ内メッセージの送信。
ユーザー識別
以前、モバイルサブスクリプションの作成方法を説明しました。次に、OneSignal SDKを使用して、すべてのサブスクリプション(プッシュ、メール、SMSを含む)にわたるユーザーの識別に拡張します。プラットフォーム間でユーザーを統合し、エンゲージメントするために、External ID、タグ、マルチチャネルサブスクリプション、プライバシー、イベントトラッキングについて説明します。External IDを割り当て
External IDを使用して、バックエンドのユーザー識別子を使用して、デバイス、メールアドレス、電話番号間でユーザーを一貫して識別します。これにより、チャネルとサードパーティシステム間でメッセージングが統一されたままになります(特に統合に重要)。 アプリによって識別されるたびに、SDKのloginメソッドを使用してExternal IDを設定します。
データタグを追加
タグは、ユーザープロパティ(username、role、設定など)とイベント(purchase_date、game_level、ユーザーインタラクションなど)を保存するために使用できる文字列データのキーと値のペアです。タグは、高度なメッセージパーソナライゼーションとセグメンテーションを強化し、より高度なユースケースを可能にします。
アプリでイベントが発生したときに、SDKのaddTagおよびaddTagsメソッドを使用してタグを設定します。
この例では、ユーザーはレベル6に到達し、current_levelというタグで識別され、値は6に設定されます。

"current_level"というタグが"6"に設定されたOneSignalのユーザープロファイル

current_level値が4より大きく10より小さいユーザーをターゲットとするセグメントを示すセグメントエディター

パーソナライズされたメッセージでLevel 5-10セグメントをターゲットとするプッシュ通知を示すスクリーンショット

パーソナライズされたコンテンツを含むプッシュ通知がiOSおよびAndroidデバイスで受信されます
メールおよび/またはSMSサブスクリプションを追加
以前、SDKがプッシュとアプリ内メッセージを送信するためにモバイルサブスクリプションを作成する方法を見ました。対応するサブスクリプションを作成することで、メールとSMSチャネルを通じてユーザーにリーチすることもできます。addEmailメソッドを使用してメールサブスクリプションを作成します。addSmsメソッドを使用してSMSサブスクリプションを作成します。

External IDによって統合されたプッシュ、メール、SMSサブスクリプションを持つユーザープロファイル
- メールまたはSMSサブスクリプションを追加する前に、明示的な同意を得てください。
- 各コミュニケーションチャネルの利点をユーザーに説明してください。
- ユーザーが好むチャネルを選択できるように、チャネルの設定を提供してください。
プライバシーとユーザー同意
OneSignalがユーザーデータを収集するタイミングを制御するには、SDKの同意ゲーティングメソッドを使用します:setConsentRequired(true):同意が与えられるまでデータ収集を防ぎます。setConsentGiven(true):同意が付与されるとデータ収集を有効にします。
プッシュ許可のプロンプト
アプリを開いたときにすぐにrequestPermission()を呼び出すのではなく、より戦略的なアプローチを取ります。許可をリクエストする前に、アプリ内メッセージを使用してプッシュ通知の価値を説明します。
ベストプラクティスと実装の詳細については、プッシュ許可のプロンプトガイドを参照してください。
プッシュ、ユーザー、アプリ内イベントをリッスン
SDKリスナーを使用して、ユーザーのアクションと状態の変化に反応します。 SDKは、フックできるいくつかのイベントリスナーを提供します。詳細については、SDKリファレンスガイドを参照してください。プッシュ通知イベント
addClickListener():通知がタップされたときを検出します。ディープリンクに役立ちます。addForegroundLifecycleListener():フォアグラウンドでの通知の動作を制御します。
ユーザー状態の変更
- ユーザー状態用の
addObserver():External IDが設定されたときを検出します。 addPermissionObserver():ネイティブのプッシュ許可プロンプトとのユーザーの特定のインタラクションを追跡します。- プッシュサブスクリプション用の
addObserver():プッシュサブスクリプションのステータスが変更されたときを追跡します。
アプリ内メッセージイベント
addClickListener():アプリ内クリックアクションを処理します。ディープリンクやイベントの追跡に最適です。addLifecycleListener():アプリ内メッセージの完全なライフサイクル(表示、クリック、閉じるなど)を追跡します。
高度なセットアップと機能
統合を強化するための追加機能を探索します:- 🔁 別のサービスからOneSignalへの移行
- 🌍 位置情報トラッキング
- 🔗 ディープリンク
- 🔌 統合
- 🧩 Mobile Service Extensions
- 🛎️ アクションボタン
- 🌐 多言語メッセージング
- 🛡️ Identity Verification
- 📊 カスタムアウトカム
- 📲 Live Activities
Mobile SDKのセットアップとリファレンス
モバイルプッシュセットアップガイドを確認して、すべての主要機能が有効になっていることを確認してください。 利用可能なメソッドと設定オプションの詳細については、Mobile SDKリファレンスにアクセスしてください。support@onesignal.comにメールしてください以下を含めてください:- 発生している問題の詳細と再現手順(利用可能な場合)
- OneSignal App ID
- 該当する場合は、External IDまたはSubscription ID
- 該当する場合は、OneSignalダッシュボードでテストしたメッセージのURL
- 関連するログまたはエラーメッセージ