GoogleMobileAds for Unity v3.13.1 Interstitial造成app被靜音的問題


雖然這問題"只"浪費了我一天半的時間
但我內心還是覺得相當肚爛 =.=

說到我最近主要的工作內容
就是一邊開發新專案
一邊優化舊有專案的廣告營收

每天看各個廣告成效如何
已經是社長每天的日常
哪個廣告表現的不理想
就去調整哪個廣告
就是老娘我每天的日常。


因為被一個機車的問題卡很久
一邊Debug一邊滿肚子苦水
實在是不吐不快!

馬的這什麼鳥問題~~!!!!

在我說明是什麼問題
以及我怎麼解決的
先簡單說一下我們的遊戲裡
大約都用到哪些廣告好了。

傳統的橫幅廣告 (Banner)

就是通常會在畫面最底下的那一橫板)
以前的遊戲常常會設計成容易誤點它
不過....現在應該很少人這麼做
因為以Google Admob 為首
大部份有提供Banner廣告的廣告商
都已經把誤點的判定處理掉了
所以現在想要靠Banner賺錢
已經不是那麼容易~

玩家幹譙度:★★
全畫面的插頁廣告 (Interstitial)


如上圖把整個遊戲畫面全部蓋住的全版廣告
通常會在玩完遊戲一局於結果畫面時秀出

不過因為完完全全把遊戲遮住
會中斷玩家的體驗
必須要很小心很小心的使用

但也因為它真的很討厭的這一點
反而被開發者們拿來發揮
比如說花$2.99之類的
就能把廣告去除的「無廣告」功能

不要小看這個功能
如果遊戲內容與廣告設計得當
事實上真的不少人會願意花錢把廣告拿掉的喔

玩家幹譙度:★★
原生廣告 (Native)

像這樣融入在遊戲介面中的廣告
就叫做原生廣告
如果做的好
甚至會讓人看不出來它是廣告

原生廣告的部份目前我們試用的心得
都是日本廣告商提供的比較完整
加上我們的遊戲適性為日本市場
所以Native廣告也曾經為我們帶來不少營收

玩家幹譙度:★
影音式獎勵廣告 (Rewarded Video)

如果玩家們不想要花錢
又想要拿到遊戲中的虛擬道具
那麼就提供他們一種
不用花錢只需花點時間(幫你點)
就能享用半套功能的影音廣告

這種廣告剛出來的時候
簡直就是廣告界的Rock Star!
讓大家都迫不及待想點廣告
沒廣告點還會生氣
根本就顛覆了廣告界的遊戲規則 XD

現在這種獎勵廣告模式已經相當成熟
也是我們廣告營收的主力之一

玩家幹譙度:


好了,那麼就如標題所說
那個萬惡的全版廣告Interstitial竟然給我出了問題!
咦?為什麼按叉叉把全版廣告關掉後,我的遊戲就沒聲惹???
先說,這個問題只有發生在iOS

本來一切安好

就如往常的把這次要更新的功能
做好做滿也測好測滿
只等我把它送出去
想說再測最後一次好了.....

玩到死掉...進到遊戲結果畫面....
廣告跳出來....按叉叉關掉....... !!????

咦?為什麼聲音都不見溜?


怎麼會這樣咧?
之前不是還好好的嘛?
(拿出舊的版本測測看)


蝦密!之前的版本就會發生了喔?
(拿出自家其他遊戲來測測看)


蝦毀!?原來其他的也有這個問題喔?

Interstital的部份我們使用的是
Google提供的
GoogleMobileAds for Unity的plugin
(v3.13.1)
這個plugin是在今年4/14釋出的
照理來說應該還算新吧

於是一邊對照Google提供範例
開始檢查播放廣告的流程有無錯誤
改寫原本看起來可能不靠譜的code
用乖乖牌的方式整個重順一遍

聽起來就跟一般Debug沒啥兩樣
實際上卻不然!

測這種第三方plugin最討厭了!
大嫌いだ〜〜!! 

因為沒辦法在Unity裡直接測
都要編到實機上做測試
也就是說
只要有任何一點點變動
想知道有什麼結果
都得重新build到手機上!

結果試了n次都沒有用Orz
還以為是不是要自己手動
在放全版廣告前
先把遊戲音樂關掉
廣告關掉後再重新打開
之類的我也給它試了 還是沒有用
就這樣在不斷的在
加log->測試->改寫->測試
之間 時間就這樣流逝......


我的青春不是這樣浪費的啊

過程中也一直問TMD的Google大神
結果似乎沒有太多跟我這個問題相關的
唯獨找到一篇:
https://github.com/googleads/googleads-mobile-unity/issues/565

內文提到的問題
就跟我一模一樣!+.+
發文者說他寫了一個fix的code
但卻沒說這個方法到底有沒有成功

然後底下留言又說
他把自己fix的code拿掉以後
就又正常ok了....
幹!這樣到底是有沒有ok?

就在我窮途末路之際
我突然覺得......

馬的這會不會其實是Google自己的bug?
算了,管它是不是Google的bug
我決定把它當Google的bug來處理!
兇手就是你~~~!!!!

於是我打開GoogleMobileAds plugin裡
找到要秀出Interstitial廣告的地方
然後加了一行code:

[[GADMobileAds sharedInstance]audioVideoManager].audioSessionIsApplicationManaged = true;



然後就可以了。
然後就可以了。
然後就可以了。


馬的把我的青春還給偶~~~!!!!!!


以上。
這個問題目前是發生在
GoogleMobileAds for Unity v3.13.1的版本
而且只有iOS會有這個問題

也不知道是不是到時候
隨著新版本的更新
這個問題自然就會不見

一般來說都是不建議去改Plugin或是SDK的code
(因為那畢竟是人家的code
要修正要改也都應該是人家去處理)

不過如果你也碰到這個問題
像我一樣走頭無路了
你也可以先這樣來做修正
不要像我一樣浪費了一天半的青春.......


完整修改方法如下:
在Unity專案底下找到GADUInterstitial.m
(記得是改Unity裡面那份
不要改到Xcode裡的那份)

然後找到show的method
在function第一行加上上面那行code:

- (void)show {
if (self.interstitial.isReady) {

  [[GADMobileAds sharedInstance]audioVideoManager].audioSessionIsApplicationManaged = true;

  UIViewController *unityController = [GADUPluginUtil unityGLViewController];
  [self.interstitial presentFromRootViewController:unityController];

} else {

  NSLog(@"GoogleMobileAdsPlugin: Interstitial is not ready to be shown.");
}
}



就這樣。

社長說

是喔,妳解決了喔?
妳應該要po出來造福一下大家
不要都默默的把bug解掉啊


不知怎麼地聽了有點火大

不過似乎有番道理
以後就都記錄下來吧

希望這個問題不要再困擾到更多人了

0 意見:

張貼留言