3

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

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

何もないように見える場合、他の開発者はこれにどのように対処していますか? レポートを発行できるように、トラップされていないアプリケーションの例外と Android ANR をどのようにキャプチャしていますか?

4

3 に答える 3

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);
    }
}

Android (もう少し複雑 - アクティビティの開始/停止ごとにフックが必要です):

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)));
    }
}

Flurry のドキュメントといくつかのブログから、これを拡張してクラッシュ レポートを含めることができると思います。

しかし、試してみないと、MonoDroid と MonoTouch 内でどれだけうまく機能するかわかりません。

于 2012-04-29T12:31:22.877 に答える
1

以前は MonoDroid アプリに取り組み、Crasherを ACRA のポートとしてビルドしました。しかし、Mono、特に .NET の一部の機能により、ACRA の一部の機能は MonoDroid に実装できません。お役に立てれば幸いです。

于 2012-12-18T18:51:49.427 に答える
0

HockeyApp iOS SDKを使用しています (Android 用のものもあると思います)。MonoTouch で作業しているレポーターをクラッシュさせることが不可欠であるため、この修正
も採用しています。

于 2013-01-24T10:42:12.807 に答える