Как вручную заставить ACRA отправлять ожидающие отчеты (автономное использование) - PullRequest
2 голосов
/ 01 мая 2020

Мы находимся в такой ситуации, когда наши клиенты используют наше мобильное приложение в автономном режиме в 95% случаев. В конце рабочего дня, когда они возвращаются в офис, они синхронизируют все данные с нашими серверами, пока они подключены к сети.

У нас есть ACRA, настроенный с плагином AcraHttpSender, чтобы попытаться отправить нам сообщение. sh сообщает напрямую, однако обычно это происходит с ошибкой, потому что они используют приложение в автономном режиме, и вместо этого ACRA сохраняет отчеты.

Насколько я понимаю, ожидающие отчеты будут отправлены ACRA, только когда приложение перезапущен , через ACRA.init. Проблема заключается в том, что у пользователей нет причин перезагружать приложение в конце рабочего дня (пока они подключены к сети). Я должен подчеркнуть, что пользователи являются техническими неграмотными, наши клиенты ясно дали нам это понять.

Итак, нам действительно нужно было бы сообщить ACRA, чтобы он отправлял нам любые ожидающие отчеты cra sh, которые у него есть. в течение короткого времени доступно подключение к сети. Без какого-либо взаимодействия с пользователем. Я думал, может быть, в функции onCreate нашей основной деятельности.

Однако я некоторое время смотрел на документацию и других людей, задававших тот же вопрос, и не нашел ничего очевидного. Возможно ли это?

РЕДАКТИРОВАТЬ: Это текущий рабочий код с предложением, сделанным @ F43nd1r и @CommonsWare. Это не работает для меня с 5.4.0, но с 5.5.1 это.

Gradle

def acraVersion = '5.5.1'
implementation "ch.acra:acra-core-ktx:$acraVersion"
implementation "ch.acra:acra-http:$acraVersion"
implementation "ch.acra:acra-advanced-scheduler:$acraVersion"
implementation "ch.acra:acra-toast:$acraVersion"

Инициализация

    initAcra {
        setBuildConfigClass(BuildConfig::class.java)
        setReportFormat(StringFormat.JSON)
        plugin<ToastConfigurationBuilder> {
            setResText(R.string.acra_crash_text)
            setLength(Toast.LENGTH_LONG)
            setEnabled(true)
        }
        plugin<HttpSenderConfigurationBuilder> {
            setUri("${BuildConfig.protocol}://${BuildConfig.host}/${BuildConfig.codemrc}/acra")
            setHttpMethod(HttpSender.Method.POST)
            setBasicAuthLogin("acra")
            setBasicAuthPassword("******")
            setEnabled(true)
        }
        plugin<SchedulerConfigurationBuilder> {
            setRequiresNetworkType(JobInfo.NETWORK_TYPE_ANY)
            setRestartAfterCrash(true)
            setResReportSendSuccessToast(R.string.acra_report_sent_text)
            setEnabled(true)
        }
    }

    // Turn this on to obtain more messages in the log to debug ACRA
    ACRA.DEV_LOGGING = BuildConfig.DEBUG

1 Ответ

1 голос
/ 02 мая 2020

Как сказано в комментариях @CommonsWare, AdvancedSenderScheduler - это путь к go.

Пример использования:

implementation "ch.acra:acra-advanced-scheduler:5.5.1"
@AcraScheduler(requiresNetworkType = JobInfo.NETWORK_TYPE_UNMETERED,
               requiresBatteryNotLow = true)

Если вы не удовлетворены опциями AdvancedSenderScheduler, вы также можете зарегистрировать свой собственный SenderScheduler , но это редко требуется.

...