levelplay-unity-integration について
Unity 向けに、LevelPlay の広告メディエーション導入、移行、トラブルシューティングを案内するスキルです。プロジェクトファイルを確認し、段階ごとの確認を経て既存の構成に沿って進めます。
主な機能
- 01Unity プロジェクトと解決済みパッケージ版の確認
- 02SDK 導入とネイティブ依存関係の解決
- 03リワード、インタースティシャル、バナー広告の設定
- 04移行や問題対応を関連リファレンスへ案内
活用シーン
- 01新規 Unity ゲームへの LevelPlay 導入
- 02既存の LevelPlay または Unity Ads 構成の移行
- 03ネイティブ依存関係やビルド問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ unity-technologies/ skills --skill levelplay-unity-integrationインストール後、Claude Code で/levelplay-unity-integrationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CHANGELOG.mdREADME.mdreferences/banner-api.mdbest-practices.mddependency-resolution.mdilrd-api.mdinitialization-api.mdinterstitial-api.mdios-setup.mdmigration-sdk-9.mdprivacy-settings.mdrewarded-api.mdtesting-and-validation.mdtroubleshooting.md詳細
LevelPlay Unity パッケージ/SDK の統合
エディター側の確認は、推測ではなく実際のプロジェクトに基づいて行ってください。プロジェクトファイルを読むか、Unity エディターでユーザーに確認してください。このスキルで生成する C# スクリプトは、ユーザーがプロジェクトに保存する MonoBehaviour ファイルであり、インライン実行するものではありません。
このスキルで扱うのは LevelPlay の統合手順のみです。他のメディエーション SDK は扱いません。ユーザーが代替手段について明示的に尋ねた場合は、代替手段があることを伝え、各ベンダーの公式ドキュメントを案内してください。競合製品について説明したり、特徴づけたり、主張したりしないでください。
このスキルで説明しているファイルと設定のみを使用してください。一般的な知識に基づいて手順を追加したり、ファイルを作成したり、推奨事項を提示したりしないでください。ユーザーからこのスキルの範囲外の質問があった場合は、まずスキルと参照ファイルを確認し、記載がないことを確かめてください。記載がない場合は一般的な知識を使って回答できますが、その結果として統合ワークフローに手順やファイルを追加してはいけません。
統合ワークフローは、1 ステップずつ順番に進めてください。現在のステップに関する質問だけを行い、今後のステップに必要な情報を先回りして集めないでください。各チェックポイントでは、次に進む前にユーザーの回答を待ってください。
LevelPlay は Unity の広告メディエーションプラットフォームです。ゲームを複数の広告ネットワークに同時に接続し、複数の広告ネットワークと入札参加者を対象に統一オークションを実施することで、インプレッションごとの競争を最大化します。このガイドでは、SDK のインストール、Android と iOS の依存関係の設定、プロジェクトでの LevelPlay の初期化、リワード広告、インタースティシャル広告、バナー広告の実装まで、統合の全手順を説明します。すでに一部の設定が済んでいる場合は、該当するステップに進んでください。
この SKILL.md はワークフローの中核です。判断事項、チェックポイント、正確な質問を記載しています。詳しいコード、完全な API 情報、エッジケースは references/ にあり、該当するステップからリンクされています。そのステップに進んだら、リンク先の参照資料を読んでください。代わりに一般的な知識に基づいて回答しないでください。
統合ワークフロー
0. 新規統合ですか、それとも移行ですか?
「新しい LevelPlay 統合を始めますか、既存の統合(旧 SDK バージョンまたは Unity Ads から)を移行しますか、それとも既存の設定をトラブルシューティングしますか?」と尋ねてください。
- 新規統合:ステップ 1 に進みます。
- 移行(SDK のアップグレード、IronSource.Agent API の置き換え、Unity Ads からの移行、または Maven Central に起因する Android ビルド失敗の修正):
references/migration-sdk-9.mdを読んでください。5 つのシナリオのどれに当てはまるか尋ねます。A = SDK のアップグレード、B = 初期化 API の移行、C = 広告ユニット API の移行、D = Maven Central のビルド失敗、E = Unity Ads の移行です。その後、該当するシナリオに従ってください。コードをすべて変更したら、Migration Completeness Checklist(参照資料のセクション C5)に沿って確認してください。このチェックリストでは、旧コードに相当する行がなかったために行単位の置き換えでは見落とされる要件を確認できます。次に、Unity コンソールでコンパイルエラーを確認するようユーザーに依頼し、エラーがあれば結果を提示する前に修正してください。コンソールを確認できない場合でも作業を止めたり、確認を繰り返したりしないでください。変更したファイルを列挙し、確認すべき内容を伝えて、先に進んでください。 - トラブルシューティング、または既存の設定への追加(ATT、GDPR、ILRD、Test Suite、新規統合でのビルドエラー、または正常に動作している統合への機能追加):ユーザーが必要としている内容を特定し、「詳細な参照資料を読むタイミング」から該当するステップまたは参照資料に直接進んでください。
1. Unity 環境を確認する
Assets/ と ProjectSettings/ ディレクトリが存在することを確認し、ユーザーが Unity プロジェクトで作業しているか確認します。Unity プロジェクトでない場合は、Unity プロジェクトのディレクトリに移動するよう案内します。これらのディレクトリが見つからず、正しい場所にいるはずだとユーザーが考えている場合は、次のように尋ねます:「プロジェクトのルートにいない可能性があります。Unity プロジェクトの最上位フォルダーに移動して、そこに Assets/ と ProjectSettings/ があることを確認できますか?」
2. ビジネス目標を把握する
広告ユニットを実装する前に、適切な広告ユニット戦略を提案するため、ユーザーが何を優先して最適化するのかを確認します。次のように尋ねます。
「主な最適化目標は何ですか?」
- 収益重視:広告収益とインプレッションの機会を最大化します
- UX 重視:ゲームプレイの流れとユーザー満足度を優先します
- バランス重視:収益と UX の両方を最適化します
- まだ決めていない:デフォルトでバランス重視を選択して進めます。ステップ 8 で、まだ決めていなかったためバランス重視で進めていることを簡潔に伝え、フォーマットの選択肢を確認したうえで別の希望があれば知らせるよう案内します。
この回答を記録し、ステップ 8 での戦略の提案に活用します。
3. UPM 経由で LevelPlay SDK をインストールする
SDK がすでにインストールされているように見える場合: そのことを鵜呑みにせず、Package Manager ウィンドウを確認するようユーザーに求めないでください。Packages/packages-lock.json を読み込み、com.unity.services.levelplay を探してください。見つかった場合は、解決されたバージョンを伝えてステップ 4 に進みます。見つからない場合は、これまでの会話でどう認識されていたかにかかわらず、インストールされていません。以下の手順でインストールしてください。
Unity Package Manager を使った LevelPlay Unity パッケージのインストールを案内します。
- Unity を開き、Window > Package Manager を選択します
- Unity Registry のドロップダウンまたは Services タブを選択します
- Package Manager の検索バーに Ads Mediation と入力します
- パッケージ名が完全に一致していることを確認します。正しいパッケージのタイトルは Ads Mediation です。以下のパッケージはインストールしないでください。
- Ads IAP Mediation Adaptor(別のアプリ内購入パッケージであり、LevelPlay SDK ではありません)
- Advertisement Legacy(非推奨のパッケージであり、現在の LevelPlay 統合とは互換性がありません)
- Install ボタンをクリックします
- パッケージがダウンロードされ、インポートされるまで待ちます
パッケージをインストールすると、Mobile Dependency Resolver のインストールを求めるプロンプトが表示されることがあります。表示された場合は Import をクリックしてください。詳細は次のステップで説明します。
次に、ユーザーに尋ねるのではなくプロジェクトを読み込んで、解決済みであることを確認します。 パッケージ ID は
com.unity.services.levelplay です(Package Manager 上の表示名は Ads Mediation ですが、プロジェクトファイルに記録されるのは ID です)。次の両方のファイルを確認してください。
Packages/manifest.jsonには、プロジェクトが必要としているものが記載されています。com.unity.services.levelplayがdependenciesの下に存在する必要があります。Packages/packages-lock.jsonには、Unity が実際に解決したものが記録されています。同じ ID がここにも、具体的なバージョンとともに存在する必要があります。「インストールされたか」という問いに答えるのはこのファイルであり、信頼すべきファイルです。
どちらもプロジェクト内の通常の JSON ファイルなので、この確認に Editor も CLI もユーザーからの情報も必要ありません。ファイルを読み込んでください。
これは形式的な手順ではなく、必須の条件です。
com.unity.services.levelplayがpackages-lock.jsonに存在するまで、LevelPlay コードを一行も書いたり生成したり貼り付けたりしないでください。先に進むと、正しそうに見えてもどこでもコンパイルできないコードが生成され、LevelPlay のすべてのシンボルでCS0246エラーが発生します。ID がmanifest.jsonにない場合、インストールは行われていません。manifest.jsonにはあるのにpackages-lock.jsonにない場合、Unity による解決はまだ完了していません。Editor が引き続きインポート中か、解決に失敗しています。どちらの状態だったかを伝えて、そこで止めてください。自分で
manifest.jsonに ID を追加し、その後 Editor を一度も起動していない場合、ロックファイルにはまだ表示されません。これは想定どおりであり、失敗ではありません。packages-lock.jsonに自分でエントリを書き込んではいけません。このファイルは Unity による解決結果であり、手動編集は移行ガイドで禁止されています。自分で書き込んだエントリは、条件を満たしたことを示すものではなく、誤った「解決済み」の表示になります。ユーザーに Unity Editor を開いてもらい、解決処理を実行してから、ファイルをもう一度読み込んでください。Editor をまったく利用できない場合は、そのことを伝えてそこで止め、証拠を捏造しないでください。
見つかった解決済みバージョンを報告してください。Package Manager ウィンドウ、前のターンの内容、またはユーザーの記憶だけを根拠に「インストール済み」と報告してはいけません。
Network Manager: いつでも Ads Mediation > Network Manager にアクセスして、追加の広告ネットワークアダプターをインストールしたり、SDK やアダプターの更新を確認したりできます。
iOS ビルドでは、後の段階で SKAdNetwork の設定が必要になります(iOS ビルドの準備ができたら references/ios-setup.md を参照してください)。
4. ネイティブ依存関係を解決する(重要)
Android/iOS ビルドでは必須です:LevelPlay ではネイティブ依存関係の解決が必要です。これを行わないと、Unity Editor ではコードをコンパイルできますが、プラットフォームのビルド時に gradle(Android)または CocoaPods(iOS)のエラーが発生します。
プラットフォームの確認 — 先に質問してください:「対象のプラットフォームはどれですか? iOS、Android、それとも両方ですか?」回答を記録してください。これにより、ここで適用する依存関係の解決手順、ATT が必要かどうか(手順 6.5)、関連するテスト手順(手順 10)が決まります。
今すぐアクティブなビルドターゲットを設定してください。 File ▸ Build Profiles(Unity 6 より前のバージョンでは Build Settings)→ Switch Platform から、プロジェクトのアクティブなビルドターゲットを Android または iOS に切り替えます。テストを行う前に必ず設定してください。LevelPlay が動作するのは Android/iOS のターゲットのみです。そのため、ターゲットが Standalone/PC/Mac の間は、Editor でモック広告を試しても(手順 10)動作しません。
対象のプラットフォームの依存関係を解決してください。 LevelPlay では、Unity のパッケージマネージャーだけでは処理できないネイティブの Android/iOS ライブラリが必要です。依存関係マネージャー(MDR、UEDM、または EDM4U)がこの不足を補います。既存の依存関係マネージャーの確認、Android と iOS それぞれでの解決方法、依存関係マネージャーがない場合のインストール、検証、および旧バージョンの Custom Main Gradle Template を含む手順全体は、references/dependency-resolution.md に記載されています。今すぐユーザーに手順を案内し、Android と iOS の両方が対象の場合は、先に両方の依存関係の解決を完了してください。
次のように質問してください:「対象プラットフォームの依存関係を、エラーなしで解決できましたか?」
Android API 33 以降(Android 13 以降): AndroidManifest.xml に AD_ID パーミッションを宣言してください。
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
これがないと、Android 13 以降のデバイスで広告 ID にアクセスできません。詳細は references/dependency-resolution.md を参照してください。
依存関係の解決に失敗した場合は、gradle および CocoaPods のエラーに関するガイダンスを references/troubleshooting.md で確認してください。
5. アプリキーと広告ユニット ID を取得する
LevelPlay を初期化する前に、LevelPlay ダッシュボードから認証情報を取得してください。
ダッシュボード: https://platform.ironsrc.com/
LevelPlay を初めて利用する場合: 先にアプリと広告ユニットを設定してください。
アプリキー: ダッシュボードの左側のサイドナビゲーションで Apps に移動し、アプリを見つけて、アプリ名の下に表示されている英数字の文字列をコピーします。
広告ユニット ID: 左側のサイドナビゲーションで Ad units に移動し、アプリを選択して、実装する各フォーマット(Rewarded、Interstitial、Banner)の ID をコピーします。
注: 初期化(手順 7)には、今すぐアプリキーが必要です。広告ユニット ID が必要になるのは手順 9 のみです。実装する広告フォーマットをまだ決めていない場合は、ひとまずアプリキーだけをコピーし、手順 8 の後にここへ戻ってください。
次の手順で必要になるため、両方ともすぐ使えるようにしておいてください。
6. AdMob キーを設定する(AdMob ネットワークを使用する場合)
使用する条件:LevelPlay のメディエーションネットワークアダプターとして AdMob を使用する場合にのみ必要です。
AdMob を使用する場合は、Unity Editor でプラットフォーム固有のアプリキーを設定してください。
アクセス先:Ads Mediation > Developer Settings > LevelPlay Mediation Settings
設定項目:
- Android App Key:AdMob の Android アプリキー
- iOS App Key:AdMob の iOS アプリキー
AdMob を LevelPlay のメディエーションネットワークとして機能させるには、この設定が必要です。
トラブルシューティング:Unity Editor に「Ads Mediation」メニューが表示されない場合は、Ads Mediation パッケージがインストールされていること(手順 3)を確認し、Unity Editor を再起動してください。
6.5. プライバシーと規制に関する設定(必要な場合)
注: このスキルでは、LevelPlay のプライバシー API を含む技術的な統合方法を案内します。法的助言を提供するものではなく、どの法律がアプリに適用されるかを判断するものでもありません。適用される法律は、ユーザー、データの取り扱い、配信方法によって異なります。ご自身の法律顧問に相談し、LevelPlay の正式なドキュメントについては、Regulation Advanced Settings for Unityを参照してください。
ユーザーに次のように尋ねます。「GDPR、CCPA/CPRA(または特定の州の消費者プライバシー法)、あるいは子ども向けアプリのプライバシー設定を構成する必要がありますか?」
いずれかに「はい」と答えた場合:
プライバシー設定は、SDK を初期化する前に構成する必要があります。実装方法の詳細(UI、同意管理、複数の規制への対応、ネットワークキーの全一覧)については、references/privacy-settings.mdを参照してください。
GDPR — 正しい API はユーザーの SDK バージョンによって異なります(Ads Mediation > Network Managerで確認してください)。
SDK 9.5.0 以降 — グローバルな同意のブール値:
using Unity.Services.LevelPlay;
// true = user has granted consent, false = user has not consented
LevelPlayPrivacySettings.SetGDPRConsent(true);
SDK 9.4.x — ネットワークごとの同意辞書(これは 9.4.x の現行 APIであり、レガシーではありません。[Obsolete]になるのは 9.5.0 以降です。非推奨と誤って表記しないでください):
using Unity.Services.LevelPlay;
using System.Collections.Generic;
// Add an entry for each ad network you have installed
LevelPlayPrivacySettings.SetGDPRConsents(new Dictionary<string, bool> {
{ "UnityAds", true },
{ "IronSource", true }
// See references/privacy-settings.md for the full network key list
});
どちらの API もコンパイルできない場合、Unity パッケージ/SDK のバージョンが 9.4.0 より前(レガシー)の可能性があります。Ads Mediation > Network Managerからのアップグレードを推奨してください。ユーザーがアップグレードできない場合は、レガシーのLevelPlay.SetConsent(bool) API がreferences/privacy-settings.mdに記載されています。
CCPA(SDK 9.4.0 以降):
LevelPlayPrivacySettings.SetCCPA(true); // User opted out of data sale
COPPA(SDK 9.4.0 以降):
LevelPlayPrivacySettings.SetCOPPA(true); // Child-directed app
CCPA または COPPA がコンパイルできない場合は、Ads Mediation > Network Managerから Unity パッケージ/SDK をアップグレードしてください。これらすべてを、ステップ 7 でLevelPlay.Init()を呼び出す前に実行してください。
iOS ビルドの場合 — 上記のプライバシー規制にかかわらず必須: ステップ 7 に進む前に、App Tracking Transparency(ATT)も実装してください。Apple は、iOS 14.5 以降でアプリがユーザーをトラッキングしたり、デバイスの広告識別子にアクセスしたりする前に、ATT の承認を求めています。LevelPlay.Init()を呼び出す前に ATT の承認をリクエストしてください。これは Apple プラットフォームの要件であると同時に、パーソナライズ広告(フィルレートにも影響します)に必要です。ATT の実装コードについては、references/ios-setup.mdを参照してください。
プライバシー規制の対象ではなく、iOS を対象としていない場合: このステップをスキップしてステップ 7 に進んでください。
7. LevelPlay SDK を初期化する
インストールの確認:
まず、Packages/packages-lock.jsonを再度読み込み、com.unity.services.levelplayが含まれていることを確認してください。
会話の前の段階でステップ 3 がすでに完了していても、この時点に到達するたびに確認してください。
ファイルを 1 つ読み込むだけで済み、ユーザーに確認せずに判断できる唯一の項目です。以前のやり取りでパッケージをインストールしたと述べていても、それがインストール済みである証拠にはなりません。この確認を行うのは、インストール手順が最も省略されやすく、その結果、LevelPlay のすべてのシンボルでCS0246が発生するためです。ID がない場合はステップ 3 に戻り、初期化コードを書かないでください。
次に、ファイルからは確認できない残りの前提条件をユーザーに確認してください。 ユーザーが AdMob を使用していないと確認済みの場合は、ステップ 6 の項目を省略してください。 この会話ですでにステップ 4 を確認済みの場合は、その項目を省略し、ステップ 5 とステップ 6(AdMob を使用している場合のみ)についてだけ尋ねてください。
「次の項目が正しく機能していることを確認してください。
- ステップ 4:対象プラットフォームの依存関係解決を、エラーなく実行しましたか?
- ステップ 5:LevelPlay ダッシュボードからアプリキーをコピーしましたか?
- ステップ 6(AdMob を使用している場合のみ):Unity Editor の設定で AdMob キーを構成しましたか?
先に進む前に、これらが正常に機能していることを確認してください。」 パッケージの確認に失敗した場合、NO と回答した場合、または確信が持てない場合:
packages-lock.jsonにパッケージ ID がない場合:コードでCS0246名前空間エラーが発生します → ステップ 3 に案内してください。これは自分で確認した内容です。ユーザーに判断を覆させないでください。- ステップ 4 が未完了の場合:コードはコンパイルできますが、Android/iOS のビルドは失敗します → ステップ 4 に案内してください
- ステップ 5 が未完了の場合:初期化に必要な認証情報がありません → ステップ 5 に案内してください
- すべてのステップが完了したとユーザーが確認するまでは、C# コードを提示しないでください
YES と回答した場合:
- 任意 — アナリティクス:ILRD の組み込み。 次の質問を一字一句そのまま尋ねてください。要約や言い換えはしないでください:「広告収益データを必要とするアナリティクスまたはアトリビューションのプラットフォーム(Firebase、AppsFlyer、Adjust、Singular、またはカスタムバックエンド)を使用していますか?はいの場合、初期化スクリプトにインプレッションレベル収益(ILRD)のログ出力用スタブが含まれます。コードは 3 行で、アナリティクスプラットフォームの設定はまだ必要ありません。(はい/いいえ/不明 — デフォルトは「はい」です)」回答を記録してください。
- 初期化コードに進んでください。
広告を読み込んだり表示したりする前に、LevelPlay SDK を初期化する必要があります。初期化は、アプリケーションのライフサイクルの早い段階で行ってください。
初期化をどのように行うかを尋ねてください。以下の 4 つの選択肢をすべて、記載どおりに提示してください。省略したりまとめたりしないでください。
- LevelPlay の初期化専用の新しいスクリプトを作成する
- 既存の初期化/マネージャースクリプトに追加する
- 既存のマネージャーから参照する新しい LevelPlay スクリプトを作成する
- 初期化コードだけを表示する — 組み込み方法は自分で決める
各選択肢の全コードは references/initialization-api.md(Code Organization Options)にあります。 変更してはならない動作:
- 選択肢 1(新しいスクリプト): ステップ 6.5(iOS)で ATT を設定している場合は、通常のテンプレートの代わりに
references/ios-setup.mdの Part 3 にあるLevelPlayInitializer.cs(IEnumerator Start()コルーチン版)を使用してください。 - 選択肢 4(コードのみ): 選択肢 1 の初期化クラス全体を、単独のスニペットとして提示してください。ファイルの作成や Inspector/GameObject の設定手順は追加せず、次の注記を添えてください:「
LevelPlayInitializer.csとして保存し、最初のシーンの永続的な GameObject にアタッチして、Inspector で App Key フィールドを設定してください。」
ILRD の組み込み(ユーザーが「はい」または「不明」と回答した場合)。 適切な方法は SDK のバージョンによって異なります(Ads Mediation > Network Manager で確認してください)。
- SDK 9.5.0 以降(現行): 初期化スクリプトには何も追加しないでください。ILRD は広告ごとに
OnAdImpressionDataReadyを通じて通知され、ステップ 9 で各広告を作成するときに組み込みます。グローバルなLevelPlay.OnImpressionDataReadyイベントは 9.5.0 以降で非推奨となっており、コンパイラー警告が発生します。使用しないでください。 - SDK 9.4.x 以前: グローバルな
LevelPlay.OnImpressionDataReadyイベントをLevelPlay.Init()の前に購読し、ログ出力用スタブを追加して、OnDestroy()で購読を解除してください。iOS のコルーチン版初期化スクリプトでは、LevelPlay.Init(appKey)の直前にあるInitializeLevelPlay()内に購読処理を配置してください。
各選択肢の正確な組み込みコード(iOS のコルーチン版での配置を含む)は、references/initialization-api.md(Version-Aware ILRD Init Wiring)にあります。モック広告では ILRD コールバックは発生しません。確認にはデバイスビルドが必要です(ステップ 10 を参照)。ユーザー ID、セグメンテーション、同意管理などの高度なオプションについては、references/initialization-api.md を参照してください。
8. 広告ユニット戦略を推奨する
ステップ 2 で確認した最適化目標に基づいて、広告ユニット戦略を推奨します。
ステップ 2 で確認したユーザーの最適化目標を思い出してください。 会話が長くなっていたり、回答が明確でなかったりする場合は、次のように確認します。「先ほど、最適化目標についてお聞きしました。念のため確認ですが、主に重視しているのは収益、ユーザーエクスペリエンス、それともその両方のバランスですか?」
回答に応じて戦略を選び、簡潔に推奨内容を伝えます(詳しい説明、ベンチマーク、配置のガイダンスは references/best-practices.md の「Ad Format Strategy by Goal」に記載されています)。
- 収益重視 → 収益戦略。 リワード(主な収益化手段として、価値の高い機会を複数用意)→ インタースティシャル(二次的な手段として、画面遷移時に表示。頻度上限は 3〜5 分)→ バナー(ゲームプレイ中に継続して表示)。入札フロアは、ステップ 9 で設定できる任意の収益向上策です。実装の優先順位:リワード → インタースティシャル → バナー。
- UX 重視 → UX 戦略。 リワードのみをユーザー操作で表示(明示的なオプトイン)し、価値の高い報酬を提供します。強制広告は一切表示しません。インタースティシャルは、任意でセッションの区切りに限って控えめに使用します。バナーは基本的に避けるか、メニューのみで表示します。実装の優先順位:リワードのみ、またはリワード →(任意で)インタースティシャル。
- バランス重視 → バランス戦略。 リワード(戦略的な配置を 2〜3 か所)→ インタースティシャル(自然な区切りで適度に表示。頻度上限は 5〜7 分)→ バナー(選択的に、メニューや注意を引きにくい場所で表示)。実装の優先順位:リワード → インタースティシャル → バナー(選択的に)。
- ステップ 2 で「まだわからない」と回答した場合は、バランス戦略を使用し、次のように付け加えます。「先ほど目標がまだ決まっていないとのことでしたので、バランスを重視した方法を選びました。選択肢をご覧になったうえで、収益かユーザーエクスペリエンスのどちらかに、より重点を置きたい場合はお知らせください。」
- それでも不明な場合は、次のように尋ねます。「収益、ユーザーエクスペリエンス、それともその両方のバランスのどれを優先しますか?」
次のステップでは、この優先順位リストから実装する広告フォーマットを尋ねます。ユーザーが推奨とは異なる順序を希望する場合は、その希望に沿ってください。
9. 広告ユニットを実装する
まず references/best-practices.md を読んでください。「Code Generation Guidelines (Step 9)」には、一般的な広告ライフサイクル、組織方法ごとのコード生成ルール、必ず含める要件(MonoBehaviour、OnDestroy() での DestroyAd() 呼び出し、配置を使用する場合の広告表示処理における配置上限チェック、イベントの登録解除、null チェック、エラー処理)、および入札フロアの設定例が記載されています。すべての広告実装に、これらのパターンを取り入れてください。
実装前の確認:
「広告の実装コードを提示する前に、次の点を確認してください。
- ステップ 7 で SDK の初期化を完了しましたか?
- Unity コンソールで「LevelPlay SDK initialized successfully」というログメッセージを確認しましたか?
広告ユニットに進む前に、初期化が正常に動作していることを確認してください。」
「いいえ」と回答した場合、または不明な場合: ステップ 7 に戻るよう案内し、初期化が正常に動作していると確認できるまで広告の実装コードを提示しないでください。
広告フォーマットの確認 — コードを生成する前に尋ねてください:「どの広告フォーマットを実装しますか? リワード、インタースティシャル、バナー、またはその組み合わせですか?」ユーザーが選択したフォーマットのみを実装してください。「後から広告フォーマットを追加する」セクションを使えば、後でフォーマットを追加できます。
最初に、広告コードをどのように構成するかユーザーに尋ねてください。回答を得るまでコードを生成しないでください。
「広告実装はどのような構成にしますか?」
-
広告フォーマットごとに別のマネージャースクリプトを作成する -
RewardedAdManager.cs、InterstitialAdManager.cs、BannerAdManager.csのような個別のスクリプトを作成します(大規模なプロジェクトに適しており、関心事を明確に分離できます)。 -
統合された AdManager スクリプトを 1 つ作成する - すべての広告フォーマットを処理する単一の
AdManager.csを作成します(よりシンプルで、すべてを 1 か所で管理できます)。 -
コードスニペットだけを表示する - 特定のファイルにまとめずに実装コードを提示します。お好みの方法で統合できます。
-
広告マネージャーのコードがすでにある - 既存の実装を確認し、修正や更新を支援する
回答に基づいて、応答を適宜調整してください(references/best-practices.md のコード生成ガイドラインを参照)。
ユーザーがすでに広告コード(例:既存のマネージャースクリプト)を持っている場合は、コードを生成する前にそのコードを見せてもらってください — そうすることで、新規にコードを作成するのではなく、対象を絞った修正を提供できます。これは、選択した構成オプションにかかわらず適用されます(オプション 4 は既存コードのレビューに特化していますが、ユーザーがすでにコードを持っていると言及した場合は、常に「まずコードを見せてもらう」ようにしてください)。
続いて、任意の入札フロア機能を提示します(オプション 4 の場合はスキップし、代わりに既存コードをレビューしてください):
ユーザーがこのセッションで実装する広告フォーマットの入札フロア範囲のみを提示してください。開始時の範囲は次のとおりです。リワード:$0.50~$2.00 | インタースティシャル:$0.20~$1.00 | バナー:$0.05~$0.20。実装するフォーマットの範囲のみを含めてください。
"任意 — 上級:入札フロア
ほとんどのパブリッシャーは最初は設定せず、実際のダッシュボードデータが得られてから追加します。今は安全にスキップして、後から設定できます。
今すぐ入札フロアを設定する場合:入札フロアは、広告ユニットごとの最低入札価格(USD)を設定します。フィルレートが低下する代わりに、平均 eCPM が上昇します。開始時の範囲: [実装するフォーマットの範囲]
フォーマットごとの値を返信するか、「skip」とだけ返信してください。いつでも追加できます。"
フォーマットごとに回答を記録してください。 値が指定されたフォーマットの広告構築には Config.Builder().SetBidFloor(...) を組み込み、「skip」とされたフォーマットには基本コンストラクターを使用してください(references/best-practices.md の入札フロアの例を参照)。
オプション 4(既存コード)を選択した場合:
- 「レビューのため、既存の広告マネージャーコードを共有してください」と尋ね、コードが共有されるまで待ちます。
- 実装を分析します。現在の LevelPlay Ad Unit API(LevelPlayRewardedAd、LevelPlayInterstitialAd、LevelPlayBannerAd)を使用しているか、非推奨の IronSource.Agent API を使用しているか、コールバックの登録と解除が適切か、エラー処理の不足やメモリーリークがないかを確認します。
- 次のように具体的なガイダンスを提供します。
- 非推奨 API を使用している場合:「古い IronSource.Agent API を使用しています。新しい LevelPlay Ad Unit API に移行する方法は次のとおりです。」(詳しい移行手順は
references/migration-sdk-9.mdを参照。初期化はシナリオ B、広告フォーマットごとの移行はシナリオ C、および C5 の完全性チェックリストを参照) - 現行 API を使用しているものの問題がある場合:「実装は概ね良好ですが、[具体的な問題] に気付きました。修正方法は次のとおりです。」
- 実装に問題がない場合:「実装はしっかりできています。追加したい広告フォーマットはありますか?」
- 非推奨 API を使用している場合:「古い IronSource.Agent API を使用しています。新しい LevelPlay Ad Unit API に移行する方法は次のとおりです。」(詳しい移行手順は
- コードスニペットで修正案を提示するか、リファクタリングを提案します。レビュー後に新しいフォーマットを追加する場合は、その追加フォーマットだけを対象に入札フロアの質問を提示し、既存の構成パターンに合わせるか、新しいものを使用するかを確認してから、オプション 1~3 と同じガイドラインに従います。
各広告フォーマットについて、詳細なリファレンスに記載された実装ガイドラインに従ってください。
- リワード広告:
references/rewarded-api.mdを参照 - インタースティシャル広告:
references/interstitial-api.mdを参照 - バナー広告:
references/banner-api.mdを参照
インプレッションレベルの収益トラッキング(バージョン対応): インプレッションデータを分析プラットフォーム(Firebase、AppsFlyer、Adjust、Singular、またはカスタムバックエンド)に転送する方法については、references/ilrd-api.md を参照してください。
- SDK 9.5.0 以降(現行): 広告オブジェクトを作成した直後に、それぞれの
OnAdImpressionDataReadyイベントを購読し、OnDestroy()で購読を解除します。生成するすべての広告マネージャーに追加してください。これは 9.5.0 以降で正しい ILRD の実装方法です。 - SDK 9.4.x 以前: ILRD では、初期化スクリプトで(ステップ 7)単一のグローバル
LevelPlay.OnImpressionDataReadyイベントを設定します。ステップ 7 で「Yes」または「Not Sure」と回答している場合は、すでに設定済みです。「No」と回答し、今から設定する場合は、既存のLevelPlay.Init()呼び出しの前にLevelPlay.OnImpressionDataReadyを購読してください。
10. テストと検証
LevelPlay では、開発の段階に応じて 2 つの検証方法を利用できます。セットアップ、コールバック動作の表、Test Suite の初期化テンプレート、iOS でのコルーチンの配置など、詳しい情報はすべて references/testing-and-validation.md に記載されています。ユーザーがテストを行う際は、そちらをお読みください。
開発初期:Unity Editor でのモック広告。 素早い反復とコールバックのテストに使用します。Editor で Play を押すとモック広告が自動的に表示されます。ただし、アクティブなビルドターゲットが Android または iOS の場合に限ります(Standalone/PC/Mac では広告が表示されません。これが「Editor で広告が表示されない」最も一般的な原因です。手順 4 を参照してください)。モック広告はどの App Key/Ad Unit ID でも動作しますが、忘れないよう実際の認証情報を使用することをおすすめします。モック広告ではほとんどのコールバック(OnAdLoaded/Displayed/Rewarded/Closed)が発生しますが、失敗、クリック、インプレッション/ILRD のコールバックは発生しません。そのため、エラー処理はデバイス上でテストしてください。詳細とコールバックの全一覧は references/testing-and-validation.md を参照してください。
インテグレーションの検証:LevelPlay Test Suite(推奨)。 デバイス上で実際の広告ネットワークを使用し、包括的に検証するための主要な方法です。変更してはならない重要なルール:
LevelPlay.SetMetaData("is_test_suite", "enable");をLevelPlay.Init()の前に呼び出します。LevelPlay.LaunchTestSuite();をOnInitSuccess内に記述します。- デバイス向けビルドが必要です(Editor では動作しません)。SDK のログを確認できるように Development Build を有効にし、本番用の App Key を使用します。
- 本番リリースの前に、2 行とも削除してください。
- iOS のコルーチン初期化:
InitializeLevelPlay()内の最初の行として、Initの前にSetMetaDataを記述します(Start()内には記述しません)。
既存の LevelPlayInitializer.cs に 2 行を追加してください(新しいファイルは作成しないでください)。初期化ファイルがないユーザー向けの単独テンプレートを含むセットアップ全体とテストのワークフローは、references/testing-and-validation.md に記載されています。
本番リリースのチェックリスト
本番リリースの前に、次の項目を確認してください。
- Test Suite による検証をデバイス上で正常に完了している
- すべての広告フォーマットが正しく読み込まれる(Rewarded、Interstitial、実装している場合は Banner)
- すべてのコールバックが想定どおりに発生する
- 本番用の App Key と広告ユニット ID が正しいことを確認している
- 複数のデバイスでテストしている(異なる画面サイズ、OS バージョン)
- iOS 固有の要件を満たしている(iOS を対象とする場合):
- Info.plist に SKAdNetwork ID を設定している(
references/ios-setup.mdを参照) - App Tracking Transparency(ATT)フレームワークを実装している(
references/ios-setup.mdを参照) - 必要に応じて iOS のプライバシーマニフェストを設定している
- 実機の iOS デバイスでテストしている(シミュレーターだけでなく)
- Info.plist に SKAdNetwork ID を設定している(
- Android 固有の要件を満たしている(Android を対象とする場合):
- Google Play Services の依存関係を解決している(手順 4 を完了)
- API 33 以降を対象とする場合は、AndroidManifest.xml に AD_ID 権限を追加している(手順 4 を参照)
- 実機の Android デバイスでテストしている
- 本番環境で実際の広告を使ってテストしている
- 広告の表示頻度制限を実装している(Interstitial を使用する場合)
- エラー処理が正しく動作する(機内モードでテストし、広告が失敗してもクラッシュしたりゲームプレイを妨げたりせず、適切に処理されることを確認する)
後から広告フォーマットを追加する
すでに一部の広告フォーマットを統合していて、さらに追加したい場合:
- ステップ 9 に進みます。初期セットアップの手順を繰り返す必要はありません。先に進む前に、Unity コンソールで「LevelPlay SDK initialized successfully」というログを確認し、既存の初期化が引き続き正常に動作することを検証してください。
- 実装する追加フォーマットを選択します
- これまでと同じ構成パターンに従います。
- 個別のマネージャースクリプトを作成した場合は、新しいフォーマット用にマネージャースクリプトを作成します
- 統合された AdManager を使用した場合は、既存の AdManager クラスに新しいフォーマットのコードを追加します
- コードスニペットを使用した場合は、同じパターンに従って新しいスニペットを統合します
- 新しい広告フォーマットについて、ステップ 9 の同じ実装ガイドラインに従います
- ステップ 10 のテストガイドラインに従って、新しいフォーマットをテストします
例:最初に個別のマネージャースクリプトを使って Rewarded 広告のみを実装し、後から Interstitial 広告を追加する場合は、RewardedAdManager.cs と同じ構成で InterstitialAdManager.cs を作成し、references/interstitial-api.md のインタースティシャル広告のガイドラインに従って、エディターとデバイスでテストします。新しい広告フォーマットを追加している間も、既存の広告フォーマットは引き続き動作します。
ベストプラクティス
広告コードを実装する前に、references/best-practices.md を読んでください。読み込み戦略(フォーマットごと)、プレースメント戦略、エラー処理とグレースフルデグラデーション、メモリ管理、頻度管理、および避けるべきよくある間違いについて説明しています。これらのパターンをすべての広告実装に取り入れてください。
よくある問題と解決策
ユーザーから問題の報告があった場合は、references/troubleshooting.md の該当する問題に案内し、その手順に従ってください(該当するガイダンスでコード生成を止めるよう指示されている場合は、そこで停止します)。ユーザーがリファレンスを開くのを待たず、解決策を直接提示してください。まだ統合を始めていない場合は、ステップ 1 から始めてください。
| 症状 | 考えられる根本原因 | 対応 |
|---|---|---|
Unity.Services.LevelPlay で CS0246 が発生する。すべての LevelPlay コードに赤い下線が表示される | Ads Mediation パッケージがインストールされていない | コードの提示を中止します。Packages/packages-lock.json で com.unity.services.levelplay を確認し、インストールして(ステップ 3)、エディターを再起動してから再開します。troubleshooting.md を参照してください。 |
| Android の gradle または iOS のビルドで依存関係エラーが発生する。エディターではコンパイルできるがビルドに失敗する | ネイティブ依存関係が解決されていない | 依存関係を解決し(ステップ 4/dependency-resolution.md)、Assets/Plugins/Android/ を確認してから、再ビルドします。troubleshooting.md を参照してください。 |
| 広告が読み込まれない | SDK が初期化されていない、App Key が間違っている、初期化前に広告が作成された、または接続がない | 広告を作成する前に OnInitSuccess が呼び出されることを確認し、App Key を確認して、デバイスでテストします。troubleshooting.md を参照してください。 |
| コールバックが呼び出されない | 初期化後にイベントが登録された、サブスクリプションが不足している、またはスクリプトが破棄された | Init() の前にコールバックを登録し、サブスクリプションを確認して、永続的な GameObject を使用します。troubleshooting.md を参照してください。 |
| プラットフォーム固有のビルドエラー(iOS の SKAdNetwork/ATT/フレームワーク、Android の Play Services/マニフェスト/gradle) | プラットフォームのセットアップが未完了 | troubleshooting.md と references/ios-setup.md を参照してください。 |
android-sdk.is.com から com.ironsource.sdk の依存関係を解決できず、Android ビルドに失敗する(以前は動作していたが、何も変更していない) | 依存関係が Maven Central に移動し、古い is.com リポジトリが閉鎖された | references/migration-sdk-9.md のシナリオ D に従います。古い依存関係 XML を削除し、Network Manager 経由で再インストールして、is.com への参照が残っていないことを確認します。 |
詳細なリファレンスを読むタイミング
ユーザーが行っている作業に応じて、該当するリファレンスを読みます。
references/dependency-resolution.md:ネイティブ依存関係の解決(ステップ 4)、または Gradle/CocoaPods のビルド失敗references/initialization-api.md:ステップ 7 の初期化コードの構成方法と ILRD の初期化設定、ユーザー ID、セグメンテーション、同意管理、高度な設定references/privacy-settings.md:GDPR、CCPA、COPPA への準拠(レガシーなSetConsentとネットワークキーの完全な一覧を含む)references/ios-setup.md:iOS ビルド — ATT、SKAdNetwork、iOS のコルーチン初期化子references/rewarded-api.md/references/interstitial-api.md/references/banner-api.md:各広告フォーマットの実装(ステップ 9)references/best-practices.md:戦略の詳細(ステップ 8)、ステップ 9 のコード生成ガイドライン、最適化、プレースメントreferences/ilrd-api.md:ILRD と分析プラットフォームの連携references/testing-and-validation.md:モック広告とテストスイート(ステップ 10)references/troubleshooting.md:コンパイル/ビルドエラー、広告が読み込まれない、コールバックが呼び出されない場合references/migration-sdk-9.md:IronSource または旧 LevelPlay API からの移行、SDK の 9.x.x へのアップグレード、Unity Ads からの移行、Maven Central の依存関係に起因するビルド失敗(ステップ 0)
例
注:例では、説明のためにワークフローを簡略化しています。実際には、ステップ 1~10 を順番にすべて実行してください。
収益重視のゲーム(「カジュアルパズルゲームの広告収益を最大化したい」):ステップ 1~7 で環境/目標/インストール/依存関係/App Key/AdMob/初期化を確認 → ステップ 8 で収益戦略を提案 → ステップ 9 でコード構成を尋ね、選択された構成を生成 → ステップ 10 でテスト。
UX 重視のゲーム(「プレイヤーを不快にさせずに、追加ライフのための任意視聴型リワード広告を表示したい」):基本的な流れは同じですが、ステップ 8 で UX 戦略(リワード広告のみ、ユーザーが開始)を提案し、ステップ 9 で適切なパターンを使ってリワード広告を実装します。
既存のプロジェクト(「既存の GameManager に、レベル間でインタースティシャル広告を追加したい」):基本的な流れは同じで、ステップ 8 はバランス型、ステップ 9 では GameManager.cs の提示を依頼してから、オプション 2 のコードスニペットを提供します。
コアとなるルール(再確認)
以下は、このファイルの冒頭にあるルールの繰り返しです。最も重要なガードレールを、長いワークフローの最後でも確認できるよう、ここに再掲しています。
- エディター側の確認は推測ではなく、実際のプロジェクトに基づいて行います。プロジェクトファイルを読むか、エディターでユーザーに確認してもらってください。このスキルで生成する C# スクリプトは、ユーザーがプロジェクトに保存する MonoBehaviour ファイルであり、インライン実行するためのものではありません。
- このスキルの対象は LevelPlay の統合パスのみであり、ほかのメディエーション SDK は対象外です。ユーザーから代替手段について明示的に質問された場合は、代替手段があることを伝え、各ベンダー独自のドキュメントを案内してください。競合製品について説明、評価、主張をしないでください。
- 手順に従い、このスキルに記載されたファイルと構成のみを提示してください。一般知識に基づいて、手順を追加したり、ファイルを作成したり、推奨事項を加えたりしないでください。ユーザーからこのスキルの対象外の質問をされた場合は、対象外であることを確認するため、まずスキルとリファレンスファイルを確認してください。対象外であれば、一般知識を使って回答してかまいませんが、その結果を統合ワークフローへの手順やファイルの追加に反映しないでください。
- 統合ワークフローは、手順に沿って一度に 1 ステップずつ進めてください。現在のステップに必要な質問のみをし、今後のステップに必要な情報を先に集めないでください。各チェックポイントでは、次に進む前にユーザーの回答を待ってください。
- 手順からリファレンスファイルを参照するよう指示された場合は、そのリファレンスを読み、記載内容を使用してください。一般知識で代用しないでください。初期化の 4 つのオプション(ステップ 7)と構成の 4 つのオプション(ステップ 9)は記載どおりに提示し、ILRD に関する質問(ステップ 7)は一字一句そのまま尋ねてください。