[Android] 新版 Firebase 函式庫

今年五月,Google 推出新版 Firebase 函式庫,這是 Firebase 合併到 Google 之後最大的改版,新版 Firebase 函式庫最大的特色是,以既有的雲端平台來蒐集 APP 的分析資料,進而增進 Admob 廣告收益。Firebase 被 Google 定位為 Mobile App 的專屬平台,除了原有的儲存和即時資料庫之外,還增加了分析、廣告、推送(Cloud Message / Notifications)、認證、當機報告、Remote Config、Invites / Dynamic Links、App Indexing 等功能。最重要的是,分析紀錄的儲存無上限,而且只要加入分析函式庫,不用改程式,就能自動收集預設的事件。
細節可參考下面的投影片。
此次的改版證明了 Google 會持續強化 Firebase 的服務,不必擔心 Firebase 會跟隨同樣是 PaaS 的 Parse.com 停止服務。

最近測試了新版的 Firebase Analytics、Crash Reporting、AdMob 這三個函式庫,以下依順序介紹。

前置作業

要安裝新版  Firebase 函式庫,要將 Google Play Services 升級到版本 30 以上,並將 Google Repository 升級到版本 26 以上。

另外,在 Android Studio 的  Project Structure 可導入 Firebase Android Client API,勾選後會自動增加 INTERNET 權限,並新增 firebase-client-android 函式庫,此函式庫為雲端儲存之用,若無此需求,可不需導入。

新增 Firebase 專案

接著到 Firebase 網站,新增一個新的 Android 專案。新增的過程中,需要輸入 Android 的 Package Name,至於 SHA-1 可不填,系統會自動產生。

Firebase 會根據 Package Name 自動生成一個檔名是 google-services.json 的設定檔,這是一個內有 Firebase 帳號和 API 資訊的設定檔,請將這個檔案複製到Android Studio 專案資料夾的  app 目錄下。

最後將指定的套件名稱新增到專案層級和 app 層級的 build.gradle,要注意的是,apply plugin: 'com.google.gms.google-services' 要放在最後一行,否則編譯時會出錯!

Firebase Analytics

將下面這行加入 build.gradle,不需額外程式碼,Firebase Analytics 就能蒐集預設的事件了
compile 'com.google.firebase:firebase-core:9.6.0'
如果要蒐集自訂的事件,可參考 Firebase 文件

Firebase Analytics 和 Google Analytics 兩套產品是獨立運作的,如果 App 原本已經使用 GA,增加 Firebase Analytics 不影響 GA 的使用。

Crash Reporting

將下面這行加入 build.gradle,不需額外程式碼,App 當機時會自動發出當機報告,約莫 2 分鐘後當機報告就會出現在 Firebase Console。
releaseCompile 'com.google.firebase:firebase-crash:9.6.0'

因為 Crash Reporting 目前沒有提供「開發階段不發送錯誤」的方法,因此在開發階段發生的錯誤,也會發送到 Firebase Crash Report。暫解方法是在 Gradle 使用 releaseCompile 指令,只在 release 時加入 Crash Reporting 函式庫。

和Android 預設的當機報告不同的是,Android 的當機報告是用戶同意才會發送,因此在 Google Play Console 沒有顯示當機報告,不代表一定沒有 Crash 發生,常常是用戶沒有主動回報。Firebase 的當機報告則不需用戶同意,當有 Error 發生時,就會自動發送。

這張圖是 Firebase Crash Report 在網頁上顯示的效果,這裡可以看出錯誤是 OutOfMemoryError,這其實是 Volley 沒有用 Singleton 導致記憶體用量過高所造成的,哎呀,我的眼睛業障重啊!

AdMob

Firebase 官方文件對於 Firebase Admob 的說明是「建議使用,但可選擇的」(Firebase is recommend, but optional),意思是原本已經使用 Google Play Service 的Ads 函式庫的專案,不必改換成 Firebase Admob 函式庫(因為兩者的程式碼、package name、class name 是一樣的),但是 Google 建議更換成 Firebase Admob 函式庫,畢竟 Google 已經逐漸將 Mobile App 的重心移往 Firebase 平台。

如果要使用 Firebase Admob 函式庫,需將下面這行加入 build.gradle, 若 App 原先有使用 Google Play Service 的 ad 函式庫com.google.android.gms:play-services-ads,最好將其移除,既有的 Admob 程式碼不需修改。
compile 'com.google.firebase:firebase-ads:9.6.0'

接著到 AdMob Console 的 Analyze 功能,選擇要連結 Firebase 的 App,點選「Link to Firebase」連結,將 App 與 Firebase 專案關聯。
此時選擇已存在的 Firebase 專案(也可自動建立一個新的 Firebase 專案,然後接著按照下面的說明,先下載一個 json 格式的設定檔,然後將 Firebase SDK 整合到你的 App)

最後要注意的是,如果 App 有使用 Google Play Services 函式庫,這些 Firebase 函式庫的版本號要和 Google Play Services 版本號一致,否則編譯時會出錯。

Google 最近一直在推廣 Firebase,有興趣的朋友可以關注 Firebase 的 Twitter 帳戶,內有教學影片。

相關文章

如何將電腦畫面經由 Chromecast 投放到電視螢幕上

Mac與Android裝置傳輸檔案的方法

Chrome 的檔案續傳功能

使用 Line Bot API 製作聊天機器人