Firebase Crashlytics Crash Reporting Fabric Bug

Google Firebase Crashlytics 導入簡介(Android)

Vivian Wu 2019/08/12 09:46:57
781

l   前言:

    軟體開發過程中,每個版本或多或少都有Bug存在,如開發者當下無法取得log,又或者使用者也無法完整重現操作情境,無法即時瞭解客戶的錯誤情況並尋線加以快速修復,想必這些都是開發者心中永遠的痛,希望有個好用的工具能自動幫我們確認app異常處並即時回傳作後續分析等,進而提升用戶滿意度。

    一般而言,FirebaseCrash ReportingFabricCrashlytics以及Rollbar等都有收集Crash log並上傳至後台的功能,各款工具操作方式、支持語言及定價機制各有不同,其中,Fabric2017年被Google收購,並於20189月由Fabric內的Crashlytics取代原先FirebaseCrash Reporting,為適用於iOSAndroidUnity的強大崩潰報告解決方案,且為免費提供使用,本篇將簡介如何將專案一步步導入Firebase Crashlytics,並說明實務應用上的常用功能。

 

一、 開始導入Google Firebase Crashlytics步驟:

 

(一)    建立專案:

          至Firebase 控制台登入Google帳戶,完成登入後會看到如下歡迎畫面,如是初次登入,請點擊「新增專案」並為專案命名,如已經有專案,可以直接點選專案進入。

          

 

(二)  新增專案內的應用程式:

開啟新增的專案及點擊「新增應用程式」,並選取適用平台 (本專案選擇Android)

 

(三)  連結FirebaseAndroid應用程式:

3-1 註冊應用程式:

依序填入Android套件名稱、應用程式暱稱(選填)、偵錯簽署憑證SHA-1(選填, 取得方式請點我 )

3-2 下載設定檔:

點擊「下載google-services.json, 並依說明將檔案加入應用程式的模組根目錄中。

3-3 新增Firebase SDK

3-4 執行應用程式以驗證是否連結成功:

成功將Firebase新增至應用程式後,接下來即可開始設定連結Crashlytics

3-5 連結Firebase Crashlytics

點選主控台左側的Crashlytics,如未設定過,可點選「開始設定Crashlytics」,右側按照步驟操作,最後3個步驟都需打勾才算完成。

   

3-6 新增Crashlytics SDK

3-6-1 專案層級的 build.gradle

請注意,依官網說明需要用到Google Services plugin 版本3.1.2或以上。

3-6-2 應用程式層級的 build.gradle

請注意,依官網說明需要用到Firebase-core版本11.4.2或以上。

3-7 執行應用程式以驗證Crashlytics是否連結成功:

 3-7-1 執行app

 Firebase會自動監聽我們的app是否安裝Crashlytics,監聽到之後會看到以下成功頁面。

3-7-2 驗證:

試著在APP中拋出異常,看看是否在FirebaseCrashlytics中有看到回傳畫面,此時,APPLogcat也會看到紀錄已上傳的訊息(Crashlytics report upload complete)。

 

PS:如果一時找不著crash程式碼,也可以使用 Crashlytics.getInstance().crash() 故意發出錯誤訊息測試有沒有建置成功。

btn.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View view) { Crashlytics.getInstance().crash();} 
});

 

 

二、 Firebase Crashlytics主要功能簡介:

(一)   Firebase主控台畫面及功能:

 

 

1-1 主控台左上方區塊:顯示「不受當機影響的使用者統計資訊」,橫軸依日期排序,縱軸為百分比,可供衡量那些版本的穩定性得到了提高,其中要特別留意「使用者指的是device數量」。

1-2 主控台右上方區塊:為顯示各issue的事件統計圖,利用圖表來快速瞭解資訊分佈。

1-3 主控台下方區塊:顯示issue的詳細資料、版本、事件次數、使用者人數(device數量)等資訊,當資料量繁多時,可點選其左上方「篩選問題」功能來縮小範圍並確認問題;此外,點選各issue將另開畫面顯示其詳細內容,如:issue產生次數、各裝置詳細資訊及統計等,也可允許添加自定義金鑰(key)及紀錄(log),此為查找問題的好線索,可以回溯使用者操作步驟,推定有關問題發生的原因。

1-3-1  添加自定義金鑰(key):可協助獲取導致crash的特定狀態,共有五種方法來處理不同的數據類型,依官網說明,Crashlytics最多支持64個鍵/值對,達到此閾值後,不會保存其他值,每個鍵/值對最大可達1 kB

1-3-2  添加自定義紀錄(log):使用log收集使用者在遇到crash前正在執行的操作的詳細訊息,顯示事件的時間表,協助更快作問題確認,依官網說明,為避免減慢app使用,Crashlyticslog限制為64kB,如果超過該限制,將會刪除較舊的log

 

                        1-3-3  在主控台點選「依使用者ID搜尋」:要診斷問題,瞭解那些使用者遇到那些特定crash通常很有幫助。Crashlytics包含一種                                匿名識別使用者的方法如下,如果之後需要清除使用者ID,可將值重置為空字串,但不會刪除現有的Crashlytics記錄。

1-3-4  紀錄不嚴重的異常(exception):

Crashlytics除了可以自動回報crash外,還可以記錄exception,在Android上,這意指可以在appcatch中記錄exception但僅能儲存最近的8exception,超過則會清除舊的exception紀錄。

 

(二)   E-mail即時通知:

             當crashexception發生時,除了在Firebase主控台會顯示新問題並對其進行優先排序外,在登入Firebase帳號的e-mail信箱也會收到通知信,讓你不會錯過任何的訊息。

 

(三)    如何關閉issue

3-1 如果問題已結案,也可以按右上方的「關閉」表示此錯誤已修正

     3-2 接著會顯示可愛的小蟲動畫進行關閉作業,之後如果同個問題在未來版本中出現,系統預設會重新再開啟問題!

 

     3-3 也可以從右上方「重新開啟」處,手動下拉選擇「略過」,表示如同個問題在未來版本中出現,系統是「不會」再重新開啟問題!

 

     3-4 關閉後的問題會呈現反白狀態,可與未解決問題作區別。

 

(四)   如何關閉Crashlytics

          開發過程如已能充份接收錯誤訊息,也可以用manifestPlaceholders決定是否關閉Crashlytics,只在release版本中啟用此功能,避免造成資訊回饋超載。

4-1 應用程式層級 build.gradlebuildTypes新增:

android { 
  ... 
  defaultConfig {
     ... 
  } 
  buildTypes { 
    debug { 
       manifestPlaceholders = [crashlyticsEnabled:"false"] 
    } 
    release { 
       minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'),
       'proguard-rules.pro' manifestPlaceholders = [crashlyticsEnabled:"true"] 
    } 
  } 
  ... 
}

4-2 接著在AndroidManifest新增<meta-data>

<application 
    android:name=".GithubApp" 
    ...> 

    <meta-data  
       android:name= "firebase_crashlytics_collection_enabled"    
       android:value="${crashlyticsEnabled}" /> 
    
    <activity android:name=".MainActivity"> 
      ... 
    </activity> 
</application>

 

 

三、 其他相關整合應用:

點選主控台「設定->專案設定->整合」後,可選擇相關工具與Crashlytics作進階整合,主要簡介其中二項常用應用:

 

    () 連結BigQuery提升資料分析效率:

BigQuery Google 推出的無伺服器企業資料倉儲服務,可容納代管相關數據資料使用,並輕鬆安全地共用、深入分析資訊,Crashlytics前僅保留90天的數據,透過BigQuery可以更容易跟踪穩定性數據的逐年趨勢,協助提升所有資料分析工作的效率,二者進行關聯後,Crashlytics 每天都會將事件數據導出至相應的BigQuery 數據集,可以查詢、導出數據集,或者將數據集與外部來源的數據結合使用,以執行自定義分析,至於如何進行關聯請點我,而好用的工具一般都是需額外付費的,建議使用前可以先參考定價說明 

                   

 

         () 連結Slack傳訊給團隊成員:

             Slack是專為團隊溝通建造的軟體,包含其他「即時通訊軟體」所無法比擬的訊息搜索、權限管理、留言釘選、頻道分流等功能,是專案常用                    工具,二者相互關聯後,可以針對Crashlytics偵測到的問題,將相關重要訊息傳送給Slack團隊成員,進而提升處理效能。

                   

 

四、最後總結:

      誠如本文開頭所言,Crashlytics已取代原先的Crash Reporting,就如同增強版的Crash Reporting,幾乎與習慣的設置流程相同,因此升級也非常簡單,請點我開始進行設定。

      此外,在測試crash的時候, 有時會遇到收不到訊息的情況,有可能是訊息需透過網絡上傳,一旦app運行過程中網絡在任何情況下失靈,那就有可能無法接收到回饋的訊息,這個部份可以再多加留意。

      正所謂解Bug是工程師的天職,透過實務上長年累積的經驗是問題解決的核心關鍵,而實用的工具則可以縮短查找問題、解決問題的黃金時間,希望Firebase Crashlytics工具能有所助益,更多詳細功能請參考官網如有相關使用心得,也歡迎留言分享,謝謝。

 

 

Vivian Wu