当前位置: 首页 > 知识库问答 >
问题:

Android Crashlytics-限制网络访问

高玮
2023-03-14

我已经为在某些条件下限制Crashlytics网络使用的能力不足而工作了一段时间。例如,漫游、计费网络等。。

根据SDK留档,我发现只有两个选项可以解决这个问题:

>

发送崩溃报告之前的内置用户同意对话框

这个API非常有限,因为:

>

  • 不初始化Crashlytics不仅可以阻止网络访问,还可以防止Crashlytics将崩溃报告保存在本地以便最终发送事件的任何机会。更不用说在运行时没有选择退出的好方法,除了残酷地覆盖Thread.setUncaughtExceptionHandler

    如果在后台发生崩溃,则“同意”对话框对用户没有任何意义。

    我的问题基本上是:我错过了什么吗?有没有办法限制Crashlytics的网络访问?

    我的动机来自于需要防止我的应用使用网络带宽的情况在某些情况下可能会给用户带来成本,尽管启用了“蜂窝网络”或“通过漫游使用数据”设备设置。

  • 共有3个答案

    符学
    2023-03-14

    我们在应用程序中使用了两个步骤,即不使用移动网络,也不使用与漫游相关的

    >

    请参阅此链接

    连接WiFi网络时上传崩溃数据到服务器:

    public class ConnectivityStatusReceiver extends BroadcastReceiver {
    
      @Override
      public void onReceive(Context context, Intent intent) {
    
        final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
        NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo();
    
        if (activeNetworkInfo != null && activeNetworkInfo.getTypeName() == "WIFI") {
          // post your crash logs to server
        }
      }
    }
    

    琴刚豪
    2023-03-14

    我曾经是用于iOS/macOS的Crashlytics SDK的维护者。我对SDK的Android版本比较不熟悉,当然也不熟悉一般的Android。但是,我要试一试。

    您想要做的是iOS端多次请求的事情。事实上,我很想这样做,因为强迫最终用户承担这些成本似乎非常可怕。然而,iOS SDK的联网和启动程序都非常复杂和微妙。要保证提供碰撞,并且不一致状态的可能性为零,这是一项极具挑战性的工作。我相信Android在这里更简单,但我不能权威地说。

    然而,iOS SDK确实有一些用于附加客户端级功能的挂钩。查看其中一个API周围的警告:

     *  @warning Just implementing this delegate method will disable all forms of synchronous report submission. This can
     *           impact the reliability of reporting crashes very early in application launch.
    

    基本上,为了满足这个特定API的契约,必须禁用一些提高报告可靠性的技术。问题是,有时候这是值得的。许多应用程序决定进行这种权衡。许多应用程序还延迟初始化Crashlytics以获得额外的性能。这对报告的可靠性有很大影响,但这是应用程序开发人员必须做出的另一个权衡。

    我认为如果你能很容易地发现它们,你就应该认真考虑在这些情况下不允许崩溃。也许Android甚至允许终端用户在每个应用程序的基础上这样做?那样的话,你无论如何也不会得到任何报告。我可以想象,您的用户基础是多样的,在这种情况下丢失一些报告不会那么可怕。或者,您可能希望将其作为面向用户的选项进行展示。

    您甚至可以做一些完全疯狂的事情,比如自己覆盖Thread.setUncaughtExceptionHandler,并在这种情况下将异常缓冲到磁盘。然后,当情况好转时,将它们重播给Crashlytics。把它变成一个开源库。我打赌人们会喜欢的!可能不是Crashlytics的Android团队虽然;)(嗨!)

    这也基本上是加斯顿上面提出的建议,只是围绕我在iOS方面看到的一些额外的背景。也给Crashlytics的人发一封电子邮件要求这样做。我认为这是个好主意。

    程仲卿
    2023-03-14

    没有办法限制应用程序中Crashlytics的Internet使用。但是我将如何解决它是要么给用户信息,Crashlytics正在使用漫游,或者只是保存本地崩溃报告,并在用户连接到wifi网络时发送它们。此外,如果用户更愿意将崩溃报告保存在本地,或者通过漫游立即发送,您也可以给用户选择。

    1. 将错误日志本地保存到设备上

    您应该能够使用ConnectivityManager获取Wi-Fi适配器的状态。从那里你可以检查它是否连接或甚至可用。

    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    
    if (mWifi.isConnected()) {
        // post error logs
    }
    
     类似资料:
    • 使用 HTTP 进行网络访问 有时候我们需要从网络上获取资源数据,一种常见的解决方法就是使用 HTTP 进行网络访问。 使用 HTTP 进行网络访问有三个步骤: 创建一个 HTTP 请求 HttpRequest 通过 setResponseCallback() 设置一个请求完成时的回调函数 使用 HttpClient 发送 HttpRequest HttpRequest 有四种类型:POST PU

    • 网络浏览接口启动限制 限制网络浏览接口的使用。设定为[开]后,需于启动浏览接口前输入密码。 提示 使用网络浏览接口时,会自动限制恶质网站或不适切网站的服务(需收费)。详细请参阅(网络) > [利用网络过滤服务]。唯有在日本地区贩卖的PSP™可设定此项机能。

    • 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性: >>> bart = Student('Bart Simpson', 98) >>> bart.score 98 >>> bart.score = 59 >>> bart.sc

    • 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性: >>> bart = Student('Bart Simpson', 59) >>> bart.score 59 >>> bart.score = 99 >>> bart.sc

    • 我有一个 docker 容器,我想给它 --network=host AND -。我需要连接到主机网络才能将主机数据狗服务器 (UDP) 和 网络用于其数据库。 尝试添加这两个网络会导致。 知道正确的处理方法吗?

    • 本文向大家介绍如何在Linux上限制网络带宽,包括了如何在Linux上限制网络带宽的使用技巧和注意事项,需要的朋友参考一下 您是否曾经与多个设备共享网络带宽?如果您曾经处于一个应用程序占用了所有流量的位置,那么您是系统管理员还是Linux用户,您将需要发现如何控制应用程序的上载和下载速度,以确保您的带宽并不完全被单个应用程序占用。本文给出了有关如何在Linux上限制网络带宽的想法。 限制网络带宽