Skip to content

ゲーム内広告連携 ​

最終更新: 2026-08-11

PlayNova ホスト Bridge 経由で Banner、インタースティシャル、リワード広告を連携します。ゲームは iframe 内で動作し、postMessage でホストと通信します — パッケージ内に第三者広告 SDK を埋め込まないでください。

収益化の仕組み ​

PlayNova はホスト側で広告を配信し、認定クリエイターと収益を分配します(デフォルト クリエイター 70%)。ゲームは load/show のみ要求;在庫、頻度制限、インプレッション/クリック報告はホストが処理します。

すべてのメッセージのエンベロープ:

json
{ "source": "...", "type": "...", "payload": { } }
  • ゲームは source を playnova-game に設定する必要があります
  • ホストは source playnova-host で応答します

広告フォーマット:

  • リワード — プレイヤーのオプトイン(復活、報酬2倍、無料アイテム)。ads.rewarded_completed 後のみ報酬を付与。
  • インタースティシャル — 自然な区切り(ステージクリア / ゲームオーバー)。操作中は表示しない。
  • Banner — ホスト所有の帯;ゲームは表示/非表示のみ要求。

推奨配置 ​

分析と上限のため、常に安定した placement 文字列を渡してください。以下のプラットフォーム名を推奨:

Placement用途
revive失敗後の続行
double_rewardステージ終了ボーナス
free_item / unlock消耗品またはコンテンツ解除
level_complete / level_start / game_over / pauseインタースティシャル表示タイミング
banner_bottom / banner_topBanner スロット

連携フロー ​

  1. 自然な区切りで ads.load_* を placement(任意で requestId)付きで呼び出す。
  2. ads.*_loaded を待つ(または *_failed を処理し、広告なしで続行)。
  3. 同じ requestId / placement で ads.show_* を呼び出す。
  4. リワードは のみ ads.rewarded_completed でゲーム状態を変更。dismissed/failed では報酬を付与しない。

Bridge メッセージタイプ ​

正規の type 文字列は playnova-web(ads-bridge)で定義されています。ゲームパッケージはこれらの値と厳密に一致させてください。

ゲーム → ホスト ​

type目的
ads.load_rewardedリワード在庫をプリロード
ads.show_rewardedリワードを表示(完了後のみ付与)
ads.load_interstitialインタースティシャルをプリロード
ads.show_interstitial区切りでインタースティシャルを表示
ads.show_bannerホスト Banner の表示を要求
ads.hide_bannerホスト Banner を非表示
ads.preload複数フォーマットをプリロード
ads.get_banner_heightレイアウト用 Banner 高さを照会

ホスト → ゲーム ​

type目的
ads.rewarded_loadedリワード表示準備完了
ads.rewarded_failedリワード load/show 失敗
ads.rewarded_completedリワード視聴完了 — 付与可能
ads.rewarded_dismissedリワード早期終了 — 付与しない
ads.interstitial_loadedインタースティシャル準備完了
ads.interstitial_failedインタースティシャル失敗
ads.interstitial_closedインタースティシャル終了
ads.banner_shownBanner 表示中
ads.banner_hiddenBanner 非表示
ads.banner_failedBanner 失敗

コピペ用ヘルパー ​

index.html(またはモジュール)に貼り付け。報酬付与は独自のゲームロジックに置き換えてください。

js
function pnAds(type, payload) {
  parent.postMessage({ source: 'playnova-game', type, payload }, '*');
}
function onPnHost(handler) {
  window.addEventListener('message', (e) => {
    const d = e.data;
    if (!d || d.source !== 'playnova-host') return;
    handler(d);
  });
}
// 例:復活フロー
pnAds('ads.load_rewarded', { placement: 'revive' });
onPnHost((msg) => {
  if (msg.type === 'ads.rewarded_loaded') {
    pnAds('ads.show_rewarded', {
      requestId: msg.payload && msg.payload.requestId,
      placement: 'revive',
      reward: { type: 'life', amount: 1 },
    });
  }
  if (msg.type === 'ads.rewarded_completed') {
    // ここでのみ報酬を付与
  }
});

本番ルール ​

  • 自動クリック、強制ループ、Close / Skip コントロールの隠蔽は禁止。
  • その requestId の ads.rewarded_completed を受信するまで報酬を付与しない。
  • ホスト失敗を尊重:在庫が空ならゲームを正常に続行。
  • show の前に load して、トリガー時の待ち時間を短縮。
  • パッケージに第三者広告 SDK、トラッカー、ポップアンダースクリプトを含めない。
  • インタースティシャル頻度はホストが制御;show の連打は無視される場合あり。

FAQ ​

zip 内で AdMob / Unity Ads は使えますか? ​

いいえ。PlayNova はホスト側で需要を集約します。他 SDK の埋め込みは審査不合格となり、iframe サンドボックスの前提も破ります。

ホストが応答しない場合は? ​

無応答または *_failed は no-fill として扱い、無限スピナーでプレイヤーをブロックせずゲームを続行。

収益はどこで確認? ​

本番で広告が稼働後、インプレッションと収益はクリエイター分析に集計されます。精算はクリエイタープログラム規約に従います。


ホスト Bridge はプレイページで稼働中。上記メッセージタイプが本番契約 — 今すぐ実装してください。

PlayNova クリエイター向けドキュメント