😽

【Unity × AdMob】Google Drive連携処理のタイミングには注意!

に公開

AdMobのリワード広告を活用して、UnityアプリからGoogle Driveへのデータインポート/エクスポートを行う構成はよくありますよね。

たとえば:

  • 広告を見たあとに設定データをDriveから復元
  • バックアップ報酬としてDriveに保存可能にする

といった使い方です。

ですが、この構成にはタイミングの落とし穴があります。


よくある失敗パターン

よくあるNGな流れ:

広告表示

OnUserEarnedRewardで即Drive処理開始

これ、普通に書くとやりたくなる構成なんですが…

  • Activityがまだ復帰しきってない
  • UIスレッドの切り替わり中
  • 認証が非同期でまだ完了していない

といった理由でDriveピッカーが表示されずクラッシュします。

安全なやり方①:UI側でDrive処理を開始

void OnUserEarnedReward(...) {
    canExecuteDriveOperation = true;
}

void OnClickDriveImport() {
    if (!canExecuteDriveOperation) return;
    StartDriveImport();
    canExecuteDriveOperation = false;
}

リワード確定時には「OKフラグ」だけ立てて、実際の処理はUIから実行する構成が一番安定します。

安全なやり方②:広告終了時イベントで処理開始

たとえばUnityAdsやAdMobで使える OnAdClosed() や OnUnityAdsDidFinish() を使うパターン:

void HandleAdClosed() {
    StartDriveExport();
}

この方法でも動きますが、一呼吸おいてから処理するのがコツ。ワンクッション(CoroutineやInvokeでの遅延)を入れるとより安定します。

よくあるエラー

ActivityNotFoundException → ピッカー起動できない

NullPointerException → Intentがnull

アプリが無反応になる → 非同期の競合

これら、すべて「タイミングが早すぎる」のが原因です。

まとめ

AdMobリワード広告 + Google Drive連携はとても強力ですが、

即実行は危険!

フラグを立ててUIから処理させる or 広告終了時に少し待ってから実行

この工夫をするだけで安定性が段違いです。

ブログでもUnityや個人開発ネタを発信中です!

開発ノウハウやアプリ制作過程、Unity連携系のハマりポイントなど
より深掘りした内容をブログにまとめています。
https://syunpp.com

公開中のアプリ一覧はこちら!

実際にUnityで開発してリリース済みのアプリ一覧をまとめています。
https://syunpp.com/公開中のアプリ一覧/

Discussion