1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity × AdMob】リワード広告後にGoogle Drive連携処理を実行する際の注意点

Posted at

UnityアプリでAdMobのリワード広告を活用し、ユーザーにGoogle Driveへのインポート・エクスポート機能を提供する構成はよくあります。

しかし、この組み合わせには処理タイミングに関する注意点が存在します。
本記事では、広告報酬獲得後にDrive連携処理を行う場合に陥りやすいエラーとその回避方法を解説します。


想定ユースケース

  • リワード広告視聴後にアプリ設定をGoogle Driveにバックアップ
  • 広告を見たユーザーに、Driveからのデータ復元を提供

よくあるNGパターン

以下のような流れで処理を実行すると、高確率でエラーになります。

AdMobリワード広告表示

OnUserEarnedRewardイベント内で即座にGoogle Drive処理を実行

この時点では以下のような不安定要素が残っています:

  • Activityが完全に復帰していない
  • UIスレッドの切り替え中
  • Google認証が非同期で未完了

結果、以下のような不具合が発生します。


代表的なエラー例

エラー 内容
ActivityNotFoundException ファイルピッカーが起動できない
NullPointerException Intent対象がnull
無反応/クラッシュ 非同期競合による処理停止

解決策①:ユーザー操作をトリガーにする

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

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

OnUserEarnedReward() では**「Drive処理してOKな状態」であることを記録**するだけ

実際のDrive処理はUIボタン等でユーザーが明示的に行う

この設計により、処理タイミングの安定性が大幅に向上します。

解決策②:広告終了イベントをトリガーにする

AdMobやUnity Adsの OnAdClosed() / OnUnityAdsDidFinish() を活用して、広告終了後にDrive処理を開始する方法です。

void HandleAdClosed() {
    StartDriveExport();
}

この方法でも処理は可能ですが、広告終了直後は一部UIが不安定なこともあるため、ワンクッション(数百ms遅延)を入れるとさらに安定します。

補足:ワンクッションを入れる方法(例)

IEnumerator DelayedDriveExport() {
    yield return new WaitForSeconds(0.3f);
    StartDriveExport();
}

まとめ

やること 理由
報酬イベント内で即Drive処理しない Activity未安定、認証未完了の恐れ
UI経由 or 広告終了後に処理開始 タイミングが安定しやすい
処理前に数百ms待機させる UIスレッドの安定を待つため

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

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

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

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?