android - 如何手动让 ACRA 发送待处理的报告(离线使用)
问题描述
在这种情况下,我们的客户 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,但这应该很少需要。