如何手动让 ACRA 发送待定报告(离线使用)
How to manually have ACRA send pending reports (offline use)
我们的客户 95% 的时间都在离线使用我们的移动应用程序。在一天的工作结束后,当他们回到办公室时,他们会在有网络连接的情况下将所有数据与我们的服务器同步。
我们已使用 AcraHttpSender 插件设置 ACRA 以尝试直接向我们发送崩溃报告,但这通常会失败,因为他们正在离线使用应用程序,而 ACRA 会存储报告。
据我了解,只有当应用程序 重新启动 到 ACRA.init 时,ACRA 才会发送待处理的报告。问题是用户没有理由在他们的工作日结束时重新启动应用程序(当他们有网络连接时)。我必须强调,用户完全是技术文盲,我们的客户向我们明确表示了这一点。
因此,我们确实需要能够告诉 ACRA 在网络连接可用的短时间内向我们发送任何未决的崩溃报告。没有任何类型的用户交互。我在想也许在我们的主要 activity.
的 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
正如@CommonsWare 在评论中所述,AdvancedSenderScheduler 是正确的选择。
用法示例:
implementation "ch.acra:acra-advanced-scheduler:5.5.1"
@AcraScheduler(requiresNetworkType = JobInfo.NETWORK_TYPE_UNMETERED,
requiresBatteryNotLow = true)
如果您对 AdvancedSenderScheduler
选项不满意,您也可以注册自己的 SenderScheduler,但这很少是必要的。
我们的客户 95% 的时间都在离线使用我们的移动应用程序。在一天的工作结束后,当他们回到办公室时,他们会在有网络连接的情况下将所有数据与我们的服务器同步。
我们已使用 AcraHttpSender 插件设置 ACRA 以尝试直接向我们发送崩溃报告,但这通常会失败,因为他们正在离线使用应用程序,而 ACRA 会存储报告。
据我了解,只有当应用程序 重新启动 到 ACRA.init 时,ACRA 才会发送待处理的报告。问题是用户没有理由在他们的工作日结束时重新启动应用程序(当他们有网络连接时)。我必须强调,用户完全是技术文盲,我们的客户向我们明确表示了这一点。
因此,我们确实需要能够告诉 ACRA 在网络连接可用的短时间内向我们发送任何未决的崩溃报告。没有任何类型的用户交互。我在想也许在我们的主要 activity.
的 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
正如@CommonsWare 在评论中所述,AdvancedSenderScheduler 是正确的选择。
用法示例:
implementation "ch.acra:acra-advanced-scheduler:5.5.1"
@AcraScheduler(requiresNetworkType = JobInfo.NETWORK_TYPE_UNMETERED,
requiresBatteryNotLow = true)
如果您对 AdvancedSenderScheduler
选项不满意,您也可以注册自己的 SenderScheduler,但这很少是必要的。