【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