其他 Android API

重要

Visual Studio App Center 计划于 2025 年 3 月 31 日停用。 虽然可以继续使用 Visual Studio App Center,直到它完全停用,但你可以考虑迁移到几个建议的替代方法。

详细了解支持时间线和替代方法。

调整日志级别

可以控制 App Center 显示在 LogCat 中的日志消息量。 使用 API 在 AppCenter.setLogLevel() 调试时启用其他日志记录。 日志级别对应于 中 android.util.Log定义的级别。 默认情况下,对于不可调试的应用程序和WARN可调试的应用程序,它ASSERT设置为 。 可以随时设置日志级别。

若要拥有尽可能多的日志消息,请使用 Log.Verbose

AppCenter.setLogLevel(Log.VERBOSE);
AppCenter.setLogLevel(Log.VERBOSE)

确定安装

安装应用后,App Center SDK 会为每个设备创建 UUID。 更新应用时,此标识符对于设备保持不变,并且仅在重新安装应用或用户手动删除所有应用数据时才生成新标识符。 以下 API 可用于调试目的。

AppCenter.getInstallId();
AppCenter.getInstallId()

此 API 是异步的,可以在 App Center 异步 API 指南中详细了解此 API。

注意

此方法只能在启动后 AppCenter 使用,它将始终在启动之前返回 null

标识用户

App Center SDK 支持设置用于扩充故障报告 的用户 ID 。 若要使用此功能,请:

  1. 如 App Center SDK 入门指南中所述,通过调用 AppCenter.start(...) 来配置 App Center SDK
  2. userID使用以下代码在 SDK 中设置 :
AppCenter.setUserId("your-user-id");
AppCenter.setUserId("your-user-id")

设置用户 ID 后,可以使用 App Center 的搜索功能搜索该 ID 的特定故障报告。 有关详细信息,请参阅 App Center 的 搜索文档

注意

用户 ID 的值限制为 256 个字符。 它将随故障报告一起显示,但不用于聚合或受影响用户的计数。 如果多次设置用户 ID,将仅使用最后一个用户 ID。 需要在每次启动应用程序之前自行设置用户 ID,因为两次启动之间 SDK 不会存储此值。

在运行时禁用所有服务

如果要一次禁用所有 App Center 服务,请使用 API setEnabled() 。 禁用后,SDK 不会将任何信息转发到 App Center。

AppCenter.setEnabled(false);
AppCenter.setEnabled(false)

若要再次启用所有服务,请使用同一 API,但将 作为参数传递 true

AppCenter.setEnabled(true);
AppCenter.setEnabled(true)

在应用程序启动时,状态将保留在设备的存储中。

此 API 是异步的,可以在 App Center 异步 API 指南中详细了解此 API。

注意

只有在启动之后 AppCenter 才能使用此方法。

禁止网络请求

在 App Center SDK 中,默认允许网络请求。 如果要发送用户关注的 App Center SDK 收集的数据,可以禁止自动发送数据。

AppCenter.setNetworkRequestsAllowed(false);
AppCenter.setNetworkRequestsAllowed(false)

在这种情况下,App Center SDK 将继续收集数据,但仅当允许网络请求时才会发送数据。

AppCenter.setNetworkRequestsAllowed(true);
AppCenter.setNetworkRequestsAllowed(true)

注意

此值在启动之间保留。

可以随时检查是否允许在 App Center SDK 中发送数据。

AppCenter.isNetworkRequestsAllowed();
AppCenter.isNetworkRequestsAllowed()

注意

在启动之前AppCenter,将忽略之前保存在 中的SharedPreferences值。 如果在 AppCenter 启动之前未更改该值,它将返回使用 setNetworkRequestsAllowedtrue 设置的最后一个值。

更改运行时中的服务状态

使用以下代码在运行时启用或禁用服务:

Analytics.setEnabled(false);
Analytics.setEnabled(false)

注意

只有在启动之后 Analytics 才能使用此方法。

检查是否已启用 App Center

还可以检查是否启用 App Center。

AppCenter.isEnabled();
AppCenter.isEnabled()

此 API 是异步的,可以在 App Center 异步 API 指南中详细了解此 API。

注意

此方法只能在启动后 AppCenter 使用,它将始终在启动之前返回 false

在运行时检查 App Center SDK 版本

可以获取当前使用的 App Center SDK 版本。

AppCenter.getSdkVersion();
AppCenter.getSdkVersion()

存储大小

使用 App Center SDK 时,日志将本地存储在设备上。 大型日志可能会占用大量空间,因此可以选择限制本地数据库的大小。 它与 pauseresume API 结合使用也很有用。 如果预期长时间暂停,可以使用更大的数据库大小来存储更多事件。

可以使用 API setMaxStorageSize 设置本地数据库的大小。 API 是异步的,启动 App Center 服务时会调用回调。 因此, setMaxStorageSize 必须在调用 AppCenter.start(...)之前调用 。 只能调用 API 一次。

// Use 20 MB for storage.
AppCenter.setMaxStorageSize(20 * 1024 * 1024L).thenAccept(new AppCenterConsumer<Boolean>() {

    @Override
    public void accept(Boolean success) {
        // The success parameter is false when the size can't be honored.
    }
});
AppCenter.start("{Your App Secret}", Analytics.class);
// Use 20 MB for storage.
AppCenter.setMaxStorageSize(20 * 1024 * 1024).thenAccept {
    // The success parameter (it) is false when the size can't be honored.
}

AppCenter.start(application, "{Your App Secret}", Analytics::class.java)

如果未设置最大存储大小,SDK 将使用默认最大大小 10 MB。 允许设置的最小大小为 20 KB。

注意

实际的最大存储大小可能大于所选的值。 SQLite 将大小向上舍入到页面大小的下一个倍数。 App Center SDK 使用 4 KB 的页面大小。

注意

超过 25 天的日志将被丢弃。

添加分发存储

默认情况下,应用内更新适用于从定义的应用商店列表中安装的应用。 如果要通过预定义的应用商店列表中未包含的存储来分发应用程序,则可以在 App Center 启动之前使用以下 API 添加所需的包安装程序:

    Set<String> stores = new HashSet<String>();
    stores.add("com.store1.packageinstaller");
    stores.add("com.store2.packageinstaller");
    Distribute.addStores(stores);

注意

请勿添加 Google Play 等商店以避免任何限制。

不成功的 API 调用

回调失败的原因有很多。

  • 指定的大小是无效值 (小于 20KB 或大于 140TB) 。
  • 当前数据库大小大于指定的最大大小。
  • 已调用 API。 每个进程只能配置一次。
  • API 已在 之后 AppCenter.start(...)调用。

可以使用日志标记在控制台AppCenter中检查警告和错误,以排查配置问题。

Android SDK 中的异步 API

异步 API 返回 AppCenterFuture 对象,而不是直接返回结果。

可以在将来的对象上调用 get() 以同步等待结果,或者提供如下所示的回调,在调用 API 时填写相应的返回类型:

AppCenterFuture<{ReturnType}> future = {AnyAsyncApi}();
future.thenAccept(new AppCenterConsumer<{ReturnType}>() {

    @Override
    public void accept({ReturnType} result) {

        // do something with result, this is called back in UI thread.
    }
});
val future = {AnyAsyncApi}()
future.thenAccept(object : AppCenterConsumer<{ReturnType}> {
    override fun accept(t: {ReturnType}?) {
        // do something with result, this is called back in UI thread.
    }
})

若要避免阻止导致应用程序速度变慢的 UI 线程,请考虑一直将 与回调一 thenAccept 起使用。

在工作线程上,可以调用 {AnyAsyncApi}().get()

回调示例:

AppCenter.isEnabled().thenAccept(new AppCenterConsumer<Boolean>() {

    @Override
    public void accept(Boolean enabled) {
        Log.d("MyApp", "AppCenter.isEnabled=" + enabled);
    }
});
AppCenter.isEnabled().thenAccept { enabled -> 
    Log.d("MyApp", "AppCenter.isEnabled=$enabled")
}

同步示例:

boolean enabled = AppCenter.isEnabled().get();
val enabled = AppCenter.isEnabled().get()