搜尋套件、儲存庫與 APP 分類

套件詳情v1.0.0

flutter_crashlytics

Flutter 插件,可在 Android 和 iOS 上啟用 Crashlytics 報告,還可提供向報告中新增自訂日誌和資訊的功能。

近 30 天下載
460
喜歡數
24
Pub 分數
40

安裝套件

flutter pub add flutter_crashlytics

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

Flutter Crashlytics 是一個插件,可將 Firebase Crashlytics 結合至 Flutter 應用程式中,適用於 Android 與 iOS,實現自動崩潰報告。它允許開發者擷取並傳送詳細的崩潰記錄,包含自訂訊息與元資料,以協助診斷問題。此插件透過提供即時的崩潰與錯誤洞察,提升應用程式的穩定性,支援除錯與效能最佳化。它與 Firebase 的後端服務無縫整合,並提供跨平台監控應用健康狀態的工具。

適用情境

  • 監控生產環境中的應用崩潰
  • 使用詳細的堆疊追蹤調試執行時錯誤
  • 向崩潰報告中添加自定義日誌
  • 追蹤應用程式隨時間的穩定性
  • 與 Firebase 分析儀表板整合

主要特色

  • 自動崩潰檢測
  • 自訂日誌和元資料支援
  • 跨平台的 Android 和 iOS 兼容性
  • 即時崩潰報告
  • 與 Firebase Crashlytics 面板整合

適合對象

  • 使用 Firebase 的移動應用開發人員
  • 專注於應用可靠性的團隊
  • 需要崩潰分析的專案
  • 開發生產級Flutter應用的開發者
  • 需要錯誤追蹤和診斷的應用程式

使用建議

  • 需要 Firebase 項目設定
  • 僅限 Android 與 iOS 平台
  • 需要在應用啟動時進行正確初始化
  • 某些裝置可能需要額外權限
  • 應謹慎使用自定義日誌,以避免資料過載

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

flutter_crashlytics

pub package

Flutter plugin to enable Crashlytics reporting.

Setup

Firebase Crashlytics

If you're using Firebase instead of Fabric, you must first setup your app to use Firebase as per this tutorial. https://codelabs.developers.google.com/codelabs/flutter-firebase/#4

The instructions are the same for Fabric and Firebase, except that for Firebase, you don't get an API key so you don't have to add it anywhere.

Android

To setup Crashlytics on Android side, you need to set the Fabric ID in your manifest like this: (Only do this if using Fabric, not Firebase as you will not have an API Key)

 <meta-data
            android:name="io.fabric.ApiKey"
            android:value="YOUR_ID_HERE" />

You also need to change your build.gradle file like this:

buildscript {
    repositories {
        ...
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
        ...
    }
}

And apply the fabric plugin apply plugin: 'io.fabric'

Nothing more.

Symbolicating Native Android Crashes

Unfortunately, even pure Dart projects can't always protect you from native crashes. Without the following setup, a native crash like SIGSEGV will appear as a blank stacktrace in Crashlytics. Here's how to get some symbols:

Add the following to build.gradle, after apply plugin: 'io.fabric':

crashlytics {
    enableNdk true
    androidNdkOut "../../debugSymbols"
    androidNdkLibsOut "../../build/app/intermediates/transforms/stripDebugSymbol/release/0/lib"
}

Ensure that the NDK bundle is installed or the stripDebugSymbol directory won't get created.

Now setup a release script to populate the debugSymbols directory, guided by the instructions from https://github.com/flutter/flutter/wiki/Crashes

# Build our app like usual
flutter -v build apk --release

### BEGIN MODIFICATIONS

# Copy mergeJniLibs to debugSymbols
cp -R ./build/app/intermediates/transforms/mergeJniLibs/release/0/lib debugSymbols

# The libflutter.so here is the same as in the artifacts.zip found with symbols.zip
cd debugSymbols/armeabi-v7a

# Download the corresponding libflutter.so with debug symbols
ENGINE_VERSION=`cat $HOME/flutter/bin/internal/engine.version`
gsutil cp gs://flutter_infra/flutter/${ENGINE_VERSION}/android-arm-release/symbols.zip .

# Replace libflutter.so
unzip -o symbols.zip
rm -rf symbols.zip

# Upload symbols to Crashlytics
cd ../../android
./gradlew crashlyticsUploadSymbolsRelease

### END MODIFICATIONS

# Release your app like usual
cd ../..
fastlane submit_playalpha
iOS

On iOS side you need to set your Fabric ID under your Info.plist like: (Only do this if using Fabric, not Firebase as you will not have an API Key)

<key>Fabric</key>
    <dict>
        <key>APIKey</key>
        <string>YOUR_ID_HERE</string>
        <key>Kits</key>
        <array>
            <dict>
                <key>KitInfo</key>
                <dict/>
                <key>KitName</key>
                <string>Crashlytics</string>
            </dict>
        </array>
    </dict>

Turn off automatic collection with a new key to your Info.plist file (GDPR compliency if you want it):

Key: firebase_crashlytics_collection_enabled

Value: false

Don't forget to add your Run Script step (with any version of Xcode) on the build phases tab. If using Xcode 10, you also must add your app's built Info.plist location to the Build Phase's Input Files field:

$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

ios run script

That's it :)

Flutter

All you need to do under your code is to let the plugin handle the Flutter crashes.

Your main method should look like:

void main() async {
  bool isInDebugMode = false;

  FlutterError.onError = (FlutterErrorDetails details) {
    if (isInDebugMode) {
      // In development mode simply print to console.
      FlutterError.dumpErrorToConsole(details);
    } else {
      // In production mode report to the application zone to report to
      // Crashlytics.
      Zone.current.handleUncaughtError(details.exception, details.stack);
    }
  };

  await FlutterCrashlytics().initialize();

  runZoned<Future<Null>>(() async {
    runApp(MyApp());
  }, onError: (error, stackTrace) async {
    // Whenever an error occurs, call the `reportCrash` function. This will send
    // Dart errors to our dev console or Crashlytics depending on the environment.
    await FlutterCrashlytics().reportCrash(error, stackTrace, forceCrash: false);
  });
}

forceCrash allows you to have a real crash instead of the red screen, in that case the exception will be tagged as fatal.

API available

  • Add log to crash reporting with log(String msg, {int priority, String tag})
  • Add manual log to crash reporting with logException(Error/Exception exception, Stacktrace stack)
  • Add user info to crash reporting with setUserInfo(String identifier, String email, String name)
  • Add general info to crash reporting with setInfo(String key, dyncamic value)

Limitation

This plugin uses Crashlytics SDK to log manual dart crashes, all manually logged crashes are tagged as non fatal under Crashlytics, that's a limitation of the SDK.

You can bypass that limitation with the forceCrash parameter, instead of the red screen an actual crash will be appended, the crash will be tagged as fatal.

On iOS fatal crash has their dart stacktrace under the Logs tab of Crashlytics, that's a limitation of iOS that prevents developers to set a custom stacktrace to an exception.

Contribution

We love contributions! Don't hesitate to open issues and make pull request to help improve this plugin.

所屬分類

依賴

依賴清單 1 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。