ios/YourApp.xcworkspace を開いて iOS プロジェクトを開いてください。
このガイドでは、MoEngage のサービス拡張機能とコンテンツ拡張機能を iOS アプリケーションに統合する方法について説明します。これらの拡張機能により、通知インプレッションのトラッキング、リッチメディア(画像、GIF、動画)のサポート、およびリッチプッシュ通知テンプレートの使用が可能になります。
サービス拡張機能とコンテンツ拡張機能の統合
これらの拡張機能がない場合、MoEngage はプッシュインプレッションをトラッキングできず、リッチメディア通知はプレーンテキストにフォールバックし、リッチプッシュテンプレートはフォールバックテンプレートで表示されます。ステップ 1: 前提条件
作業を進める前に、以下が整っていることを確認してください。- 拡張機能 Integrator Tool を利用するには、MoEngage React Native SDK バージョン 12.6.0 以上を使用していることを確認してください。
- SDK の初期化: ファイルベースの初期化を使用して MoEngage SDK を初期化します。
- App Group の設定:
AppGroupNameキーを使用して、設定内で App Group を定義します(例:group.com.organization.app)。- この App Group を Xcode の Signing & Capabilities に追加します。

- この App Group を Xcode の Signing & Capabilities に追加します。
- App Group の設定:
- 統合が完了すると、コード署名のためにキーチェーンへのアクセスを求められる場合があります。常に許可(Always Allow) をクリックしてください。

ステップ 2: サービス拡張機能の設定
サービス拡張機能は、通知インプレッションをトラッキングし、リッチメディアコンテンツをダウンロードします。- App Identifier を作成します:
[appBundleId].[serviceExtensionName].の形式を使用します。[appBundleId]をアプリケーション固有のバンドル識別子に置き換えます。[serviceExtensionName]を任意の名前(デフォルトは MoEngageNotificationService)に置き換えます。例えば、アプリのバンドル識別子がcom.org.appで、拡張機能の名前がNotificationServiceの場合、識別子はcom.org.app.NotificationServiceになります。
既存の Notification Service Extension がある場合は、新しく作成せずにそれを再利用できます。ステップ 5 の Run Script Phase を設定する際に、
--notification-service-extension-name フラグでその名前を渡してください。ツールはカスタムコードを上書きすることなく、必要な MoEngage のロジックを挿入します。- ステップ 1 で作成したサービス拡張機能の識別子を選択し、Capabilities タブを開いて App Groups を追加します。
AppGroupNameキーと一致する名前を入力します。
- プロビジョニングプロファイルの生成: Apple Developer Portal で、ステップ 1 で作成した識別子用の新しいプロビジョニングプロファイルを作成し、ダウンロードします。Xcode でダウンロードするには、メニューバーの Xcode をクリックし、Settings を選択します。

- Apple Accounts セクションに切り替え、Apple デベロッパーアカウントを選択します。Apple Accounts ページで Download Manual Profiles を選択します。

ステップ 3: コンテンツ拡張機能の設定(オプション)
コンテンツ拡張機能は、MoEngage のリッチプッシュ通知テンプレートを使用する場合にのみ必要です。- App Identifier を作成します:
[appBundleId].[contentExtensionName].の形式を使用します。[appBundleId]をアプリケーション固有のバンドル識別子に置き換えます。[contentExtensionName]を任意の名前(デフォルトは MoEngageNotificationContent)に置き換えます。例えば、アプリのバンドル識別子がcom.org.appで、拡張機能の名前がNotificationContentの場合、識別子はcom.org.app.NotificationContentになります。
- コンテンツ拡張機能の識別子を選択し、Capabilities タブを開いて App Groups を追加します。
AppGroupNameキーと一致する名前を入力します。
- プロビジョニングプロファイルの生成: Apple Developer Portal で、ステップ 1 で作成した識別子用の新しいプロビジョニングプロファイルを作成し、ダウンロードします。Xcode でダウンロードするには、メニューバーの Xcode をクリックし、Settings を選択します。

- Apple Accounts セクションに切り替え、Apple デベロッパーアカウントを選択します。Apple Accounts ページで Download Manual Profiles を選択します。

ステップ 4: MoEngageRichNotification の統合(オプション)
以下のいずれかのプッシュ通知機能をサポートする必要がある場合は、MoEngageRichNotification を統合します。
- リッチメディア — 通知バナーに画像、GIF、または動画を表示します
- リッチプッシュテンプレート — カルーセルなどのインタラクティブな通知レイアウトを表示します
ステップ 3 で説明したコンテンツ拡張機能を統合している場合、このステップは必須です。
- Swift Package Manager (SPM)
- CocoaPods
SPM を使用して
MoEngageRichNotification をインストールするには、以下の手順を実行します。- File > Add Package に移動します。
- リポジトリ URL を入力します。
https://github.com/moengage/apple-sdk.git
- master ブランチまたは特定のバージョンを選択し、Add Package を選択します。
- パッケージのターゲットをアプリケーションに設定します。
ステップ 5: 拡張機能 Integrator Tool の統合
ビルドプロセスにカスタムスクリプトを追加して、拡張機能の設定を自動化します。- Xcode でアプリケーションのターゲットを選択し、Build Phases に移動して + をクリックし、New Run Script Phase を追加します。

- Input Files セクションに次のパスを追加します。
$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)$(INSTALL_DIR)/$(INFOPLIST_PATH)

- 上の画像の integrate_extensions を置き換えて、使用している依存関係マネージャーに対応するコマンドを入力します。
すでにスクリプトフェーズを追加して入力ファイルを設定している場合は、以下で説明するように実行コマンドを更新するだけで済みます。
- Swift Package Manager (SPM)
- CocoaPods
Swift Package Manager (SPM)
使用可能なオプション
$OPTIONS を以下の 1 つ以上に置き換えます。
コマンド例(SPM)
NotificationService という名前のサービス拡張機能と NotificationContent という名前のコンテンツ拡張機能を統合する場合、SPM の完全なコマンドは次のようになります。
Swift Package Manager (SPM)
- サンドボックスの無効化: アプリケーションターゲットの Build Settings で、USER_SCRIPT_SANDBOXING を No に設定します。

拡張機能 Integrator Tool への移行
既存の手動実装から Integrator Tool に移行するには、こちらを参照してください。トラブルシューティングとよくある質問
Integrator Tool がエラーを返しました。どのように解決すればよいですか?
Integrator Tool がエラーを返しました。どのように解決すればよいですか?
詳細な情報については、ビルドログを確認してください。
一般的な原因には次のようなものがあります。

- 不正な統合: セットアップが サービス拡張機能とコンテンツ拡張機能の統合ガイドに従っていません。
- 設定の欠落:
Info.plistに必要な MoEngage の設定オプションがありません。 - App Group の不一致:
Info.plistで指定したAppGroupNameが、サービス拡張機能およびコンテンツ拡張機能のバンドル識別子の Capabilities、またはアプリケーションの Entitlements に含まれていません。 - 環境の不一致: プロビジョニングプロファイルが特定のビルド環境用に作成されていません(例: App Store ビルドの生成時に Development プロファイルを使用している)。
- カスタムディレクトリの問題: プロビジョニングプロファイルがデフォルトの Xcode ディレクトリに保存されていません。追加設定用のビルド設定を使用してカスタムパスを渡してください。
- 証明書の問題: プロビジョニングプロファイルの生成時に、証明書の設定が欠落しているか誤っています。
- プロファイルの有効期限切れ: プロビジョニングプロファイルの有効期限が切れています。プロファイルを再生成して再ダウンロードする必要があります。
サービス拡張機能とコンテンツ拡張機能の両方を統合する必要がありますか?
サービス拡張機能とコンテンツ拡張機能の両方を統合する必要がありますか?
いいえ。サービス拡張機能は、通知インプレッションのトラッキングとリッチメディア(画像/GIF/動画)のダウンロードに必須です。コンテンツ拡張機能は、MoEngage のインタラクティブな リッチプッシュテンプレート(カルーセルやカスタムボタンレイアウトなど)を使用する場合にのみ必要です。
「App Group」の設定が必須なのはなぜですか?
「App Group」の設定が必須なのはなぜですか?
iOS の拡張機能は、メインアプリケーションとは別のサンドボックスで実行されます。App Group は共有コンテナを作成し、メインアプリの MoEngage SDK が認証トークン、ユーザーデータ、ローカルストレージを拡張機能と共有できるようにします。これがないと、拡張機能はユーザーを検証したり、インプレッションを正しくトラッキングしたりできません。
Build Settings で「User Script Sandboxing」を無効にする必要があるのはなぜですか?
Build Settings で「User Script Sandboxing」を無効にする必要があるのはなぜですか?
Extension Integrator Tool は、標準の Xcode サンドボックス外のシステムフォルダにあるプロジェクトのビルド成果物とプロビジョニングプロファイルにアクセスする必要があります。
ENABLE_USER_SCRIPT_SANDBOXING が Yes に設定されていると、スクリプトがブロックされ、ビルドフェーズ中に「Permission Denied」エラーが発生します。このツールで複数のビルド環境(Dev/Staging/Prod)を扱うにはどうすればよいですか?
このツールで複数のビルド環境(Dev/Staging/Prod)を扱うにはどうすればよいですか?
追加のビルド設定を使用して、ローカルビルドと CI ビルドの両方で Integrator Tool に特定の設定入力を提供できます。
MOENGAGE_EXTENSION_PROFILES_SEARCH_PATHS: プロビジョニングプロファイルを検索する追加のフォルダを指定する場合に使用します。デフォルトでは、ツールは標準の Xcode ディレクトリを検索します。~/Library/Developer/Xcode/UserData/Provisioning Profiles~/Library/MobileDevice/Provisioning Profilesプロビジョニングプロファイルがこれらのフォルダにない場合は、このビルド設定で追加のパスを指定します。
MOENGAGE_NOTIFICATION_SERVICE_EXTENSION_PROFILE: Notification Service Extension のプロビジョニングプロファイルのファイル名を明示的に指定します。ツールはプロビジョニングプロファイルを検索する代わりに、このファイル名を使用します。プロファイルは上記のいずれかのフォルダに存在する必要があります。ツールが正しいプロビジョニングプロファイルを選択できない場合に、このオプションを使用してください。MOENGAGE_NOTIFICATION_CONTENT_EXTENSION_PROFILE: Notification Content Extension のプロビジョニングプロファイルのファイル名を明示的に指定します。ツールはプロビジョニングプロファイルを検索する代わりに、このファイル名を使用します。プロファイルは上記のいずれかのフォルダに存在する必要があります。ツールが正しいプロビジョニングプロファイルを選択できない場合に、このオプションを使用してください。
通知でリッチメディアが表示されません。何が問題ですか?
通知でリッチメディアが表示されません。何が問題ですか?
これは通常、次の 3 つの技術的なギャップのいずれかに起因します。
- App Group の不一致:
Info.plistのAppGroupName文字列が Entitlements ファイルと完全に一致していることを確認してください。 - ペイロードのタイムアウト: iOS は拡張機能にメディアのダウンロード時間として約 30 秒を与えます。アセットが大きすぎる場合やネットワークが遅い場合は、失敗してプレーンテキストにフォールバックします。
このツールはカスタムの Derived Data パスや CI/CD で動作しますか?
このツールはカスタムの Derived Data パスや CI/CD で動作しますか?
はい。ステップ 5 のスニペットにある
case "$ACTION" ブロックはすべてのビルドアクションに対応しているため、記載どおりに使用してください。CI 環境でカスタムの Derived Data またはビルドディレクトリを使用しており、パスの解決が失敗する場合は、代わりに moengage-extensions-integration バイナリへの絶対パスを指定してください。