android - 如何手动让 ACRA 发送待处理的报告(离线使用)

标签 android crash offline acra

在这种情况下,我们的客户 95% 的时间都在离线使用我们的移动应用程序。在工作日结束时,当他们回到办公室时,他们会在有网络连接的情况下将所有数据与我们的服务器同步。

我们使用 AcraHttpSender 插件设置了 ACRA 以尝试直接向我们发送崩溃报告,但这通常会失败,因为他们正在离线使用应用程序,而 ACRA 存储了报告。

据我了解,待处理的报告只会在申请为 时由 ACRA 发送。重启 ,通过 ACRA.init。问题是用户没有理由在工作日结束时重新启动应用程序(当他们有网络连接时)。我必须强调,用户完全是技术文盲,我们的客户向我们明确了这一点。

因此,我们真的需要能够告诉 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 ,但这应该很少是必要的。

关于android - 如何手动让 ACRA 发送待处理的报告(离线使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61544966/

相关文章:

java - 如何使用过滤的 RecyclerView 和 OnClickListener 从 ArrayList 中删除项目

java - SharedPreferences 在应用程序退出时不保存

android - 应用程序甚至在启动前就崩溃了……我正在使用listview打开/调用 fragment

android - 使用opengles,android播放视频

android - 推送到新屏幕后底部导航栏未隐藏

.net - My.Computer.Info.OSFullName崩溃的Windows XP-已安装.Net 4

xcode - 如何修复此崩溃? Xcode 6 swift

html - 使用 HTML5 视频标签播放本地(硬盘)视频文件?

ios - ios 应用程序中 Spotify 轨道的音频混合

android - adb 设备在 Mac OS X 中使用 Galaxy S4 显示离线