我们的客户95%的时间都在离线使用我们的移动应用程序。工作日结束后,当他们回到办公室时,他们会在拥有网络连接的情况下将所有数据与我们的服务器同步。
我们已经用AcraHttpSender插件设置了ACRA,试图直接向我们发送崩溃报告,但这通常会失败,因为他们离线使用应用程序,而ACRA存储报告。
据我所知,只有当应用程序重新启动时,ACRA才会通过ACRA.init发送挂起的报告。问题是用户没有理由在工作日结束时(当他们有网络连接时(重新启动应用程序。我必须强调的是,用户完全是技术文盲,我们的客户向我们表明了这一点
因此,我们真的需要能够告诉ACRA在网络连接可用的短时间内向我们发送任何未决的崩溃报告。没有任何形式的用户交互。我在想,也许是在我们主要活动的onCreate函数中。
然而,我已经查看了文档和其他人提出同样的问题一段时间了,没有发现任何明显的问题。这可能吗?
编辑:这是@F43nd1r和@CommonsWare提出的建议的当前工作代码。它对我的5.4.0不起作用,但对5.5.1起作用。
渐变
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
正如@CommonsWare在评论中所说,AdvancedSenderScheduler是最好的选择。
示例用法:
implementation "ch.acra:acra-advanced-scheduler:5.5.1"
@AcraScheduler(requiresNetworkType = JobInfo.NETWORK_TYPE_UNMETERED,
requiresBatteryNotLow = true)
如果您对AdvancedSenderScheduler
选项不满意,您也可以注册自己的SenderScheduler,但这应该很少是必要的。