There's a simple guide on the `Firebase`'s website on how to implement the `AdMob`'s rewarded video: https://firebase.google.com/docs/admob/unity/rewarded-video Let's take some code: public void OnVideoAdComplete(object sender, Reward reward){ SoundMgr.Instance().PlayRewardSound(); // double coins etc } Let's plug it in: private void LoadVideoAd(){ videoAd = RewardBasedVideoAd.Instance; AdRequest request = new AdRequest.Builder().AddTestDevice("XXXXXXXXXXXXX").Build(); videoAd.LoadAd(request, androidVideoAdID); if(!videoCallbackSet){ videoCallbackSet = true; videoAd.OnAdRewarded += OnVideoAdComplete; } } And now let's get a `ThreadException` cause we played a sound on the other thread: Unity : Function SoundChannelStopList::~SoundChannelStopList() may only be called from main thread! Unity : ExecutionEngineException: SIGILL Unity : at SoundManager.PlaySuccess1Sound () [0x00000] in <filename unknown>:0 Unity : at Game.OnVideoAdClose () [0x00000] in <filename unknown>:0 Unity : at AdManager.OnVideoAdClose (System.Object sender, System.EventArgs args) [0x00000] in <filename unknown>:0 Unity : at GoogleMobileAds.Api.RewardBasedVideoAd.<RewardBasedVideoAd>m__4 (System.Object sender, System.EventArgs args) [0x00000] in <filename unknown>:0 Unity : at (wrapper delegate-invoke) System.EventHandler`1<System.EventArgs>:invoke_void__this___object_EventArgs (object,System.EventArgs) Unity : at GoogleMobileAds.Android.RewardBasedVideoAdClient.onAdClosed () [0x00000] in <filename unknown>:0 Unity : at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 Unity : Rethrow as TargetInvocationException: GoogleMobileAds.Android.RewardBasedVideoAdClient.onAdClosed() Unity : at UnityEngine.AndroidJavaPro How is this possible that it's year 2017 and the most leading game engine's plugin is runnning it's callbacks without some sort of `App.PostRunnableOnMainThread()`? Is there any workaround on this or we need to create an incredible pattern like: while(!adNotFinished) continue; // then play sound I'd be grateful for any tips! :)