2016-07-06 2 views
3

私はReact NativeプロジェクトのためにiOS用のCrashlyticsインテグレーションを設定しました。アンドロイドバージョンも登録できました。唯一の問題は、Java /システムに関連したクラッシュを報告することです.JavaScript例外がスローされた場合、レポートに登録されません。 iOS版には既に機能が備わっていますので、動作させたいと思います。リアクションネイティブにクラッシュイクスティクスを統合する - Android

私は、Fabric docsthis questionで概説されているようにレポートを設定しました。第2の回答を参照してください。私はonCreateをMainActivityに追加しました。

私は自分のNativeModuleCallExceptionHandlerをthis issue commentとして作成しようとしました。このコードは次のとおりです。

package com.mypackage; 

import com.facebook.react.bridge.NativeModule; 
import com.facebook.react.bridge.ReactApplicationContext; 
import com.facebook.react.bridge.ReactContext; 
import com.facebook.react.bridge.ReactContextBaseJavaModule; 
import com.facebook.react.bridge.ReactMethod; 
import com.facebook.react.modules.core.JavascriptException; 
import com.facebook.react.bridge.NativeModuleCallExceptionHandler; 

import java.util.Map; 

import com.crashlytics.android.Crashlytics; 

class CrashlyticsErrorModule extends ReactContextBaseJavaModule { 

    public CrashlyticsErrorModule (ReactApplicationContext reactContext) { 
    super(reactContext); 
    addExceptionHandler(reactContext); 
    } 

    @Override 
    public String getName() { 
    return "CrashlyticsErrorModule"; 
    } 

    private void addExceptionHandler(ReactApplicationContext reactContext) { 
    reactContext.setNativeModuleCallExceptionHandler(new NativeModuleCallExceptionHandler() { 
     @Override 
     public void handleException(Exception e) { 
     if (e instanceof JavascriptException) { 
      Crashlytics.log(e.getMessage()); 
     } else { 
      Crashlytics.logException(e); 
     } 
     } 
    }); 
    } 

コードはエラーなしでコンパイルされますが、JavaScriptの例外はまだ報告されていません。

onCreate()またはaddExceptionHandler()メソッドの終わりに意図的に実行時例外をスローした場合でも、handleException()は呼び出されません。しかしクラッシュ・スティックスは通知を受けるので、例外はどこかで捕まえられています!!

ソースコードへのリンクは上記の問題点にあります。要するに

答えて

0

https://github.com/facebook/react-native/issues/1194

:あなたはjsの例外をキャッチし、Crashlytics.recordCustomExceptionName(...)とCraslyticsにそれをスローするようにErrorUtils.setGlobalHandler((err, isFatal) => { ... });を使用することができます。 react-native-fabric-crashlytics npmモジュールで自動的に実行できます。

は(あなたが0.29より低いRNを使用している場合やMainActivityMainApplicationonCreate()方法にFabric.with(this, new Crashlytics())を追加することを忘れないでください。

+0

小規模な発言:キャッチはリリース版( 'react-native-fabric-crashlytics'スキップの開発環境のスキップ)でのみ動作します。 – farwayer

関連する問題