【ハルシオンブログ】Unity+Admobの動画リワードではまったので、修正したよメモ
あつーい日が始まりましたね。
とりあえず来週までずっと30度以上じゃないですか・・・・
熱中症、日射病に気を付けてくださいまし。
ほんと暑いのやですよねー
UnityでAdmobを入れたんですが、リワードを受け取る処理でエラーがでたので、直してました。
前動いてた気がしたんですけどね・・・・
ちなみにAdmobのSDKは2022/6/27時点での最新です。
GoogleMobileAds-v7.1.0
【現象】
リワードを受け取って動画を閉じるとアプリが落ちる。
実機のエラーは特に分からず・・・・
エラーはこんな内容。
Exception in MessageQueue callback: handleReceiveCallback
java.lang.Error: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
処理としては何をしていたかというと、画面AのメソッドAをAdmobManagerに渡して、リワードを受け取る時にメソッドAを実行という感じ。
メソッドAでは、画面AのGameObjectとかTextをいじっていました。
[画面A.cs]
[AdmobManager.cs]
こんな感じだとダメらしい。
GetRewardのはじめの
btnViewReward.gameObject.SetActive(false);
で、エラーがでてしまうようです。
ちなみにこの行を消しても次の行で・・・・・
OnUserEarnedRewardのタイミングでは動画の方がアクティブになっていて、UI周りとか触れないのかな?
ってことで、次のようにしたら動きました。
[AdmobManager.cs]
リワード取得のタイミングと、閉じたタイミングでフラグを立てて、Updateで処理。
なぜこのタイミングならできるのかは分かりませんが、できました。
ということで、Unity + Admobの動画リワードではまったの巻でした。
では、あでゅ~ノシ
とりあえず来週までずっと30度以上じゃないですか・・・・
熱中症、日射病に気を付けてくださいまし。
ほんと暑いのやですよねー
UnityでAdmobを入れたんですが、リワードを受け取る処理でエラーがでたので、直してました。
前動いてた気がしたんですけどね・・・・
ちなみにAdmobのSDKは2022/6/27時点での最新です。
GoogleMobileAds-v7.1.0
【現象】
リワードを受け取って動画を閉じるとアプリが落ちる。
実機のエラーは特に分からず・・・・
エラーはこんな内容。
Exception in MessageQueue callback: handleReceiveCallback
java.lang.Error: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
処理としては何をしていたかというと、画面AのメソッドAをAdmobManagerに渡して、リワードを受け取る時にメソッドAを実行という感じ。
メソッドAでは、画面AのGameObjectとかTextをいじっていました。
[画面A.cs]
void OnClickViewReward() {
AdmobManager.instance.ProcReawrd(GetReward);
}
void GetReward() {
btnViewReward.gameObject.SetActive(false);
btnClose.transform.GetComponentInChildren().text = "閉じる";
gold += rewardValue;
GameData.instance.Save();
}
[AdmobManager.cs]
Action actionReward;
private void LoadReward() {
this.reward = new RewardedAd(ID);
this.reward.OnUserEarnedReward += HandleUserEarnedReward;
this.reward.OnAdClosed += HandleCloseAd;
AdRequest request = new AdRequest.Builder().Build();
this.reward.LoadAd(request);
}
///
/// リワード動画開始
///
public void ProcReawrd(Action reward) {
actionReward = reward;
#if UNITY_ANDROID || UNITY_IOS
if (this.reward.IsLoaded()) {
this.reward.Show();
}
#endif
}
public void HandleUserEarnedReward(object sender, Reward args) {
actionReward();
}
こんな感じだとダメらしい。
GetRewardのはじめの
btnViewReward.gameObject.SetActive(false);
で、エラーがでてしまうようです。
ちなみにこの行を消しても次の行で・・・・・
OnUserEarnedRewardのタイミングでは動画の方がアクティブになっていて、UI周りとか触れないのかな?
ってことで、次のようにしたら動きました。
[AdmobManager.cs]
Action actionReward;
private void LoadReward() {
this.reward = new RewardedAd(ID);
this.reward.OnUserEarnedReward += HandleUserEarnedReward;
this.reward.OnAdClosed += HandleCloseAd;
AdRequest request = new AdRequest.Builder().Build();
this.reward.LoadAd(request);
}
///
/// リワード動画開始
///
public void ProcReawrd(Action reward) {
isReward = false;
isClose = false;
actionReward = reward;
#if UNITY_ANDROID || UNITY_IOS
if (this.reward.IsLoaded()) {
this.reward.Show();
}
#endif
}
public void HandleUserEarnedReward(object sender, Reward args) {
isReward = true;
}
public void HandleCloseAd(object sender, EventArgs args) {
isClose = true;
}
private void Update(){
if(isReward && isClose){
actionReward();
isReward = false;
isClose = false;
}
}
リワード取得のタイミングと、閉じたタイミングでフラグを立てて、Updateで処理。
なぜこのタイミングならできるのかは分かりませんが、できました。
ということで、Unity + Admobの動画リワードではまったの巻でした。
では、あでゅ~ノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】UnityのUpdateで10フレームに1回とかで処理したいとき。 | 【ハルシオンブログ】Library/Search/propertyDatabase.dbなどのエラーが出た時 »
コメント
| h o m e |