2012-04-28 10 views
3

AndroidとMonoTouch用のMono for Mvvmcrossを使用してクロスプラットフォームアプリケーションを作成しています。私が移植しているJava Androidアプリでは、クラッシュレポートと特別レポートを提供するためにACRAを使用しました。これらのレポートは、HTTP Post経由でサーバーに送信されました。MonoTouchとMonoDroidでのクラッシュレポート

Mvvmcrossのクラッシュレポートプラグインはありますか? Mono *コミュニティはクラッシュ報告ライブラリを推奨できますか?

もし何もないようであれば、他の開発者はどのようにこれに対処していますか?報告書が発射されるように、アントラップされていないアプリケーション例外やAndroid ANRをどのようにキャプチャしていますか?

答えて

1

私がこの分野で経験した唯一の経験は、Flurryです。分析のために使用したもので、クラッシュレポートでは使用しませんでした。

基本的に私たちが何をしたかはIAnalyticsインタフェースを使用してViewModelにからのすべての重要なイベントをログに記録し、その後、各プラットフォームのようなIAnalyticsの実装供給:

WP7:バインディングで使用

public class FlurryAnalytics : IAnalytics 
{ 
    public const string ApiKeyValue = "--- your key ---"; 

    public void StartSession() 
    { 
     FlurryWP7SDK.Api.StartSession(ApiKeyValue); 
    } 

    public void LogEvent(string eventName) 
    { 
     FlurryWP7SDK.Api.LogEvent(eventName); 
    } 
} 

タッチを( )https://github.com/kevinmcmahon/monotouch-libs/blob/master/FlurryAnalytics/flurry.csのような:

public class FlurryAnalytics : IAnalytics 
{ 
    public const string ApiKeyValue = "37SHD8L8VATPBS88AMHU"; 

    public void StartSession() 
    { 
     FlurryAPI.StartSession (ApiKeyValue); 
    } 

    public void LogEvent(string eventName) 
    { 
     FlurryAPI.LogEvent(eventName); 
    } 
} 

アンドロイド(もう少し複雑 - それは、すべてのフックを必要とする活動の開始/停止):

そこフラリーのドキュメントから、いくつかのブログから
public class FlurryAnalytics : IAnalytics, IAndroidActivityTracker 
{ 
    public const string ApiKeyValue = "--- your key ---"; 

    private readonly IntPtr _flurryClass; 
    private readonly IntPtr _flurryOnStartSession; 
    private readonly IntPtr _flurryOnEndSession; 
    private readonly IntPtr _flurryLogEvent; 

    public FlurryAnalytics() 
    { 
     _flurryClass = JNIEnv.FindClass("com/flurry/android/FlurryAgent"); 
     _flurryOnStartSession = JNIEnv.GetStaticMethodID(_flurryClass, "onStartSession", 
                 "(Landroid/content/Context;Ljava/lang/String;)V"); 
     _flurryOnEndSession = JNIEnv.GetStaticMethodID(_flurryClass, "onEndSession", "(Landroid/content/Context;)V"); 
     _flurryLogEvent = JNIEnv.GetStaticMethodID(_flurryClass, "logEvent", "(Ljava/lang/String;)V"); 
    } 

    public void StartSession() 
    { 
     // not used in Android - Android relies on Activity tracking instead 
    } 

    public void LogEvent(string eventName) 
    { 
     ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryLogEvent, new JValue(new Java.Lang.String(eventName)))); 
    } 

    private static void ExceptionSafe(Action action) 
    { 
     try 
     { 
      action(); 
     } 
     catch (ThreadAbortException) 
     { 
      throw; 
     } 
     catch (Exception exception) 
     { 
      UITrace.Trace("Exception seen in calling Flurry through JNI " + exception.ToLongString()); 
     } 
    } 

    public void OnStartActivity(Activity activity) 
    { 
     ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryOnStartSession, new JValue(activity), new JValue(new Java.Lang.String(ApiKeyValue)))); 
    } 

    public void OnStopActivity(Activity activity) 
    { 
     ExceptionSafe(() => JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryOnEndSession, new JValue(activity))); 
    } 
} 

、私はこれはクラッシュ報告を含むように拡張することができると信じて:

しかし、それを試さずに、私はMonoDroidの内部でどれくらいうまく動作するかわかりませんd MonoTouch。

+0

http://slodge.blogspot.co.uk/2012/04/using-flurry-analytics-from-monotouch.htmlで若干長い説明(回答が少ない)で更新されました – Stuart

+0

ありがとうスチュアート、本当に面白いです。しかし、私が実際に何をしているかは、未処理の例外やAndroidのANRをトラップするためにMono *で使用しなければならないイベントや拡張ポイントです。ありがとう。 –

1

以前私はMonoDroidアプリで作業し、ACRAのポートとしてCrasherを作成しました。しかし、Monoや特に.NETの機能のため、ACRAの機能の一部はMonoDroidでは実装できません。それがあなたを助けるならばうれしいでしょう。

+0

ありがとう、私は間違いなくそれをチェックアウトします。私はクロスプラットフォームソリューションを望んでいる。 –

0

私たちはHockeyApp iOS SDKを使用しています(Android用のSDKもあります)。
また、MonoTouchで作業している記者をクラッシュさせることが不可欠であるため、this fixを採用しています。

関連する問題