正當 XE8 app 上路一切都沒問題了之後,今天同事突然告知他的手機使用 app 時,在登入畫面出現一個錯訊

之前從來沒有看過這個畫面,安裝過這麼多台手機也沒發生過,這到底是怎麼了?!

同事提供的線索:手機是小米 2S,android 5.x,沒有 Google play

唯一可能的兇手就是後者(沒有 Google play),因為 app 在登入的時候,會馬上要求去做 GCM 的註冊,但在註冊之前,程式會先檢查有沒有支援 Google play service,如下這段

function TPlatformPushNotificationRegister.CheckSupportGooglePlayServices: Boolean;
begin
  Result := TJGooglePlayServicesUtil.JavaClass.isGooglePlayServicesAvailable(MainActivity.getApplicationContext) = TJConnectionResult.JavaClass.SUCCESS;
end;

如果該支手機沒有支援的話,就不會做註冊 GCM 的動作,之前也都運作的好好的,這到底是發生什麼事情了?

話說沒有安裝 Google play 相關服務的手機,應該只有原版大陸手機才會有這種狀況(雖然也可以自行想辦法安裝),怪不得遇到的人不多。經過仔細追查,發現原因應該是 Google 搞的鬼?Google 把 Admob sdk 升級到 Google Play service,官方說明可以參考下述網址

Google Mobile Ads SDK

真是一個不瞭解,這跟 isGooglePlayServicesAvailable 這個呼叫有何關係?

解法很簡單但是需要手動,跟使用 TBannerAd 的部分是類似的,需要在 AndroidManifest.template.xml 動手腳,按照官方文件在這部分的說明

Adding Advertising to Your Mobile Apps

若沒有變更過 AndroidManifest.template.xml 這個檔案的話,那麼需要在第 22 行的前面加入這句

  <meta-data android:name="com.google.android.gms.version" android:value="4323000"/>

重新編譯、發佈...搞定.... isGooglePlayServicesAvailable 又恢復正常了

 

p.s.上述「Adding Advertising to Your Mobile Apps」的超連結,是 XE6 使用 TBannerAd 的方法,若您已經使用 XE8,則不需要這麼麻煩,直接在 Project > Options > Entitlement List 將右邊的 AdMob Service 設定為 True 就好,AndroidManifest.template.xml 的部分 Delphi 會自動調整好,就不需要手動嚕

 

to be continued....

    縹緲 發表在 痞客邦 留言(0) 人氣()