概要
このガイドでは、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アプリとプラットフォームを設定
サポートするプラットフォーム(Apple(APNs)、Google(FCM)、Huawei(HMS)、Amazon(ADM))でOneSignalアプリを設定します。セットアップのステップバイステップ手順
セットアップのステップバイステップ手順
アプリを作成または選択

最初のOneSignalアプリ、組織、チャネルのセットアップ。
プラットフォーム認証情報を設定
- Android:Firebase認証情報をセットアップ
- iOS:p8トークン(推奨)またはp12証明書
- Amazon:APIキーを生成
- Huawei:OneSignalを承認
App IDを保存してSDKをインストール

App IDを保存して追加のチームメンバーを招待します。
SDKセットアップ
1. SDKを追加する
.NET CLIを使用:オプション: 位置情報モジュールを無効にする
OneSignalSDK.DotNet 6.2.0 以降では、アプリが位置情報機能を使用しない場合、iOS と Android のビルドから OneSignal のネイティブ位置情報モジュールを除外できます。デフォルトでは、OneSignalSDK.DotNet にネイティブ位置情報モジュールが含まれているため、追加設定なしで OneSignal.Location が動作します。
アプリプロジェクトに OneSignalDisableLocation MSBuild プロパティを追加します。
OneSignal.Location.RequestPermission() と OneSignal.Location.IsShared = value は no-op になります。OneSignal.Location.IsShared は false を返します。
通常の開発では、SDK を使用するアプリビルドにこのプロパティが設定されていることを確認してください。プロジェクト参照やスクリプトを使ってソースからビルドする場合は、参照される SDK プロジェクトにも適用されるように、このプロパティを dotnet build に渡してください。
OneSignalDisableLocation の値を含めるか、この値を切り替えるときにビルド出力をクリーンしてください。これにより、位置情報モジュールが有効な状態で生成された古い iOS アプリバンドル、Android 中間ファイル、または bin/obj 出力が復元されるのを防げます。
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 receipt、画像のサポートを含む、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 receiptと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 receipt分析が有効になります。- 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を追加

NSEはアプリターゲットと同じApp Groupに属するようになりました
6. NSEコードを更新
- OneSignalNotificationServiceExtensionフォルダーに移動
NotificationService.swiftまたはNotificationService.mファイルの内容を次のコードに置き換えます:

NotificationServiceファイルに移動

このファイルは、次のステップでパッケージをインストールするまでエラーを表示します
7. NSEターゲットにOneSignalを追加
ios/Podfileを更新して、モジュラーな OneSignalXCFramework/OneSignal サブスペックを含めてください。集約の pod 'OneSignalXCFramework' 宣言は使用しないでください。集約 pod は OneSignalComplete に解決され、推移的に OneSignalLocation を含むため、位置情報モジュールを除外していても位置情報が再導入される可能性があります。
一般的な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 Usersに追加します。

デバイスをtest usersに追加
サブスクリプションに名前を付けます。
テストユーザーセグメントを作成します。
セグメントに名前を付けます。
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 receiptを確認します。

iOSとAndroidで画像付きプッシュ通知
confirmed receiptを確認します。
アプリ内メッセージを送信
アプリ内メッセージを使用すると、ユーザーがアプリを使用している間にユーザーとコミュニケーションできます。デバイスでアプリを閉じるか、バックグラウンドにします。
アプリ内メッセージを作成します。
- OneSignalダッシュボードで、Messages > In-App > New In-Appに移動します。
- Welcomeメッセージを見つけて選択します。
- Audienceを、以前使用したTest Usersセグメントに設定します。

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

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

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

デバイスに表示されたWelcomeアプリ内メッセージ
- サブスクリプションの収集、テストサブスクリプションの設定、セグメントの作成。
- セグメントとCreate message APIを使用した画像付きプッシュとConfirmed receiptの送信。
- アプリ内メッセージの送信。
ユーザー識別
以前、モバイルサブスクリプションの作成方法を説明しました。次に、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
- 関連するログまたはエラーメッセージ
