Как автоматически отправлять журналы сбоев в HokeyApp в Xamarin.iOS с дополнительной информацией?

Я использую Hockeyapp для регистрации сбоев в своем приложении Xamarin.
Для Android я использовал этот код для автоматической отправки сбоев с небольшой дополнительной информацией:
Внутри метода MainActivity OnCreate:

CrashManager.Register(this, "APP_ID", new CustomCrashListener());

Пользовательский прослушиватель сбоев:

public class CustomCrashListener : CrashManagerListener
{
    public override bool ShouldAutoUploadCrashes()
    {
        return true;
    }

    public override string UserID => "UserID recovered from settings.";
    public override string Contact => "More info from settings.";
    public override string Description => "Custom Description";
}

Теперь для iOS я нашел это для автоматической загрузки сбоев:

Внутри AppDelegate:

BITHockeyManager manager = BITHockeyManager.SharedHockeyManager;
manager.Configure("APP_ID");
manager.CrashManager.CrashManagerStatus = BITCrashManagerStatus.AutoSend;
manager.StartManager();
manager.Authenticator.AuthenticateInstallation();

Моя проблема в том, что я не могу найти что-то похожее на Android в iOS, чтобы отправлять немного дополнительной информации с автоматической отправкой журналов сбоев, есть ли способ сделать это в iOS?


person Paul Karam    schedule 18.01.2017    source источник


Ответы (1)


В классе UIApplicationDelegate добавьте IBITHockeyManagerDelegate и/или IBITCrashManagerDelegate.

Пример UIApplicationDelegate:

[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate, IBITHockeyManagerDelegate, IBITCrashManagerDelegate

Назначьте его своему BITHockeyManager.Delegate:

var hockeyManager = BITHockeyManager.SharedHockeyManager;
hockeyManager.Delegate = (HockeyApp.iOS.BITHockeyManagerDelegate)(IBITHockeyManagerDelegate)this;

Реализуйте необходимые методы дополнительной информации:

// From IBITHockeyManagerDelegate
[Export("userIDForHockeyManager:componentManager:")]
public string UserIdForHockeyManager(BITHockeyManager hockeyManager, BITHockeyBaseManager componentManager)
{
    return "sushihangover";
}

[Export("userNameForHockeyManager:componentManager:")]
public string UserNameForHockeyManager(BITHockeyManager hockeyManager, BITHockeyBaseManager componentManager)
{
    return "Sushi Hangover";
}

[Export("userEmailForHockeyManager:componentManager:")]
public string UserEmailForHockeyManager(BITHockeyManager hockeyManager, BITHockeyBaseManager componentManager)
{
    return "[email protected]";
}

// From IBITCrashManagerDelegate
[Export("applicationLogForCrashManager:")]
public string ApplicationLogForCrashManager(BITCrashManager crashManager)
{
    return "StackOverflow rocks...";
}

Ссылка: https://support.hockeyapp.net/kb/client-integration-ios-mac-os-x-tvos/hockeyapp-for-ios#crashreporting

person SushiHangover    schedule 18.01.2017
comment
Я попробовал это hockeyManager.Delegate = (HockeyApp.iOS.BITHockeyManagerDelegate)(IBITHockeyManagerDelegate)this;, но получил недопустимое исключение приведения. Затем я попытался выполнить безопасный заброс, как этот (IBITHockeyManagerDelegate) this as HockeyApp.iOS.BITHockeyManagerDelegate;, но не получил никакой информации, как предполагалось. - person Paul Karam; 18.01.2017
comment
Примечание. Делегаты вызываются при следующем запуске приложения, а не во время сбоя! - person Kerni; 18.01.2017
comment
@Kerni Да, я знаю это, и я всегда снова запускаю свое приложение после сбоя, чтобы проверить его на Hokeyapp. - person Paul Karam; 18.01.2017
comment
Я смог заставить его работать, используя ваш ответ, но я изменил одну вещь: вместо вызова hockeyManager.Delegate = (HockeyApp.iOS.BITHockeyManagerDelegate)(IBITHockeyManagerDelegate)this; я добавил делегата в метод Configure следующим образом: manager.Configure(HOCKEYAPP_APP_ID, this); - person Paul Karam; 18.01.2017