0

React Nativeアプリケーション(iOSとAndroid)のさまざまなエラーをグローバルハンドラとして報告するソリューションはありますか?React Nativeアプリケーションでさまざまなエラーを報告するにはどうすればよいですか?

I例を以下に興味を持っています:

  1. 未処理の拒絶
  2. 未処理の例外
  3. ネイティブ側のエラー

報告することによって、私はいくつかのサードパーティに送信する意味エラーを追跡できるサービスです。

+0

https://stackoverflow.com/questions/30918349/how-to-catch-uncaught-exception-globally-in-react-native – gyzerok

+0

[反応ネイティブでキャッチされない例外(グローバルに)を捕捉する方法]の可能な複製http://stackoverflow.com/questions/30918349/how-to-catch-uncaught-exception-globally-in-react-native) – gyzerok

答えて

2

RNには、RU JSレイヤーのキャッチされない例外とキャッチされた例外を処理するErrorUtilsグローバルハンドラがあります。あなたが唯一のアンドロイドのためのノードモジュールを作成し、そこで反応するネイティブブリッジ法を記述する必要が上記のコードでお知らせ

if (ErrorUtils._globalHandler) { 
      instance.defaultHandler = ErrorUtils.getGlobalHandler && ErrorUtils.getGlobalHandler() || ErrorUtils._globalHandler; 
      ErrorUtils.setGlobalHandler(instance.wrapGlobalHandler); //feed errors directly to our wrapGlobalHandler function 
     } 

そして、ハンドラメソッド

async wrapGlobalHandler(error, isFatal){ 

     const stack = parseErrorStack(error); 

    //Add this error locally or send it your remote server here 

     //*> Finish activity 
     setTimeout (() => { 
     instance.defaultHandler(error, isFatal); //after you're finished, call the defaultHandler so that react-native also gets the error 
     if (Platform.OS == 'android') { 
      NodeModule.reload() 
     } 
     }, 1000); 
    } 

を:あなたは次のようにハンドラを設定するためにこれを使用することができますあなたのReactContextBaseJavaModule:

@ReactMethod 
    public void reload() { 
     Activity activity = getCurrentActivityInstance(); 
     Intent intent = activity.getIntent(); 
     activity.finish(); 
     activity.startActivity(intent); 
    } 

ありがとう!

+0

ありがとう! ErrorUtils.setGlobalHeaderを使用するように応答を更新してください。それは今、行く方法だと思われる。 – gyzerok

+0

JSコンポーネントの最上位階層の任意のJSコンポーネントで使用できます – Akhi

関連する問題