安卓监控应用程序接口

您可以使用 Instana Android 代理 API 监控您的 Android 应用程序。

Instana Android 代理商

您可以通过 Instana 类方法使用 Instana Android 代理。

设置 Instana 监控

要为 Android 应用程序设置 Instana 监控,请在 Application 类的 onCreate() 中初始化 Instana,紧接着 super.onCreate()

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = "YOUR_APP_KEY",
                reportingURL = "YOUR_REPORTING_URL"
            )
        )
    }
}

配置选项

下表概述了配置参数:

表 1. 配置参数
参数 描述
key (String) Instana 监视配置密钥。
reportingURL (String) URL ,指向要发送监控数据的 Instana 实例。
httpCaptureConfig (HTTPCaptureConfig( ,可选 ) 默认情况下,会自动捕获 HTTP 请求和响应。 要禁用自动监控,请将该参数设置为 HTTPCaptureConfig.MANUAL. 要关闭 HTTP 会话监控,请将该参数设置为 HTTPCaptureConfig.NONE.
suspendReporting (SuspendReportingType( ,可选 ) Instana 信标的传输在后台以较低的优先级进行。 您可以选择必须暂停信标传输的条件,例如电池电量不足时、只有蜂窝网络连接时,或者永远不暂停信标传输。
initialBeaconDelayMs (Long( ,可选 ) 代理会在确定的时间内延迟发送第一个信标,以确保客户端在代理向 Instana 服务器发送任何信标之前设置好所有附加参数,如 Session Identifiers等所有附加参数,然后再向 Instana 服务器发送信标。 只有信标的传输会延迟。 一旦代理被初始化,信标的监控和捕捉就会开始,与参数无关。 initialBeaconDelayMs 参数。
collectionEnabled (Boolean( ,可选 ) 此参数可启用或禁用 Android 代理在启动时收集和提交数据。 默认情况下,数据收集与设置一起开启。 要设置 Instana 但忽略任何数据收集,请在设置中将该参数设置为 false 。 如果 Android 代理在收集数据前需要征得用户同意,则该参数非常有用。 缺省值为 true
enableCrashReporting (Boolean( ,可选 ) 此参数可启用或禁用崩溃数据收集和启动时提交。 如果需要,可在启动后启用收集和提交功能。 在 Android 代理收集崩溃数据前需要征得用户同意的情况下,该参数非常有用。 缺省值为 false
slowSendIntervalMillis (Long( ,可选 ) 通过提供一个有效的正整数(单位为毫秒)(范围为 2000-3600000 毫秒),该参数可在信标发送失败时启用慢速发送模式功能。 默认值为 null ,表示禁用慢速发送模式。
usiRefreshTimeIntervalInHrs (Long( ,可选 ) 该参数决定刷新 usi ( userSessionIdentifier ) 的时间间隔。 usi 可作为唯一标识符,在没有明确提供用户识别数据或应用程序不具备任何用户上下文的情况下分配给应用程序。 如果该参数设置为负值,则 usi 保留默认行为,永不刷新。 如果该参数设置为零,则不会向后台发送 usi ,从而停用标识符。 如果该参数设置为正值,则 usi 会以指定的时间间隔刷新。 参数值需要以小时为单位提供。 默认值为 `-1。
autoCaptureScreenNames (Boolean( ,可选 ) 使用该参数可以自动捕捉屏幕名称。 目前,它支持使用 FragmentsActivities 以及 xml 布局构建的 Android 应用程序的屏幕名称捕获(不适用于可组合或其他用户界面)。 启用该功能后,代码库中不再需要现有的 Instana.view 实现,因为它可以作为替代。

屏幕名称在以下多个级别捕获:

* 活动
* 片段

活动 :名称是从分配给根布局的可访问性标签中自动提取的。 如果找不到,则使用 Activity 类名作为屏幕名。
片段 :代理首先在 navController 中查找标签,然后在片段 tags 中查找标签,最后在根视图的 accessibility labels 中查找标签。 如果没有,则使用 Fragment 类名作为屏幕名。

每个捕获视图的元数据包括本地路径、 OnResume 时间(实际恢复时间和捕获恢复时间可能略有不同,因为它是从回调中收集的)以及片段和活动的类名。 需要注意的是,自动捕获功能目前只适用于所有 Fragments 中禁用了 minify 或排除了 pro-guard 的应用程序。 缺省值为 false
rateLimits (RateLimits( ,可选 ) 该参数允许您自定义特定时间间隔内可发送信标的数量限制。 有三个可用选项:DEFAULT_LIMITS、MID_LIMITS 和 MAX_LIMITS。 默认情况下,选择 DEFAULT_LIMITS。

DEFAULT_LIMITS :
- 每 5 分钟 500 个信标
- 每 10 秒 20 个信标
MID_LIMITS :
- 每 5 分钟 1000 个信标
- 每 10 秒 40 个信标
MAX_LIMITS :
- 每 5 分钟 2500 个信标
- 每 10 秒 100 个信标
dropBeaconReporting (Boolean( ,可选 ) 该参数用于报告信标丢失。
当信标数量达到速率限制时,新的信标会被丢弃,而不是发送到 Instana 服务器。 如果将此参数设置为 true ,则会在内部跟踪丢弃的信标,并在信标计数不再超过速率限制时向 Instana 后台发送信标报告。
默认值为 false
trustDeviceTiming (Boolean( ,可选 ) 启用该选项后,每个信标都会包含一个标志,指示 Instana 后台信任信标创建时间戳。
默认情况下,如果信标在创建超过 30 分钟后才被接收,后端会用服务器的接收时间覆盖创建时间。
此设置的默认值为假。
enableW3CHeaders (Boolean( ,可选 ) 启用此选项后,Android 代理会在受监控的 API 调用中包含 traceparenttracestate 标头。 即使后端没有使用 Instana 代理,这些标头也能实现后端相关性。 在这种情况下,您需要使用兼容的监控工具(如 OpenTelemetry ) 将后台跟踪详情导出到 Instana 后台。 如果禁用此选项,当 Instana 代理也监控后端时,后端相关性才有可能实现。 默认设置为“假”。
performanceMonitorConfig (PerformanceMonitorConfig( ,可选 ) 该参数用于配置应用程序性能监控。 有关性能配置参数,请参见表 2

性能指标配置

下表概述了性能配置参数

表 2. 性能配置参数
参数 描述
enableAppStartTimeReport (Boolean( ,可选 ) 通过该参数可报告应用程序的冷启动时间。
冷启动时间是指 Android 应用程序从头开始启动所需的时间,而不是从后台启动所需的时间。 测量从 Zygote 初始化和进程绑定后开始,到应用程序用户界面开始交互时结束。 在这段时间间隔内,开发人员可以控制优化应用程序的冷启动性能。
启动时间以毫秒为单位。
缺省值为 true
enableAnrReport (Boolean( ,可选 ) 此参数可用于报告应用程序无法响应的情况 (application not respond)。
默认值为 false
anrThresholdMs (Long( ,可选 ) 该参数以毫秒为单位指定应用程序被视为未响应的时间 (application not respond)。
只有当 enableAnrReport 设置为 true 时才适用。

默认值为 3000L
enableLowMemoryReport (Boolean( ,可选 ) 使用该参数可以报告内存不足的通知。
默认值为 false
enableBackgroundEnuReport (Boolean( ,可选 ) 此参数允许每 24 小时报告一次后台网络使用过量的通知。 要进行报告,还必须将标志 trustDeviceTiming 设为 true。
默认值为 false

检查当前配置

要检查当前 Instana 配置,请访问 InstanaConfig 实例:

val currentConfig = Instana.config

读取会话标识符

每个 Instana 代理程序实例都具有唯一的会话标识,您可以将此标识用于应用程序中的其他用途。

表 3. 读取会话标识符
属性 描述
sessionId (String( ,可选 ) 当前会话标识。 该会话 ID 在设置过程中创建。

示例

val sessionId = Instana.sessionId

自动 HTTP 监测

默认情况下,会自动捕获 HTTP 会话。 初始化 Instana 后(安装 Instana Android 插件和 Instana Android SDK 后),代理会处理其余事宜。

Instana Android 代理会自动编织代码,以监控受支持客户端的 HTTP 请求:

  • OkHttp3
  • HttpURLConnection
  • 翻新

可以禁用自动 HTTP 监控,转而使用手动 HTTP 监控。

手动 HTTP 监测

您还可以手动监控 HTTP 会话。

开始捕捉

该函数返回 HTTPMarker ,稍后请求完成时需要用到。

Instana {
    fun startCapture(url: String, viewName: String? = view, requestHeaders: Map<String,String>?): HTTPMarker?
}
配置参数

下表概述了配置参数:

表 4. 配置参数
参数 描述
url (String) 要捕获的 URL。
viewName (String( ,可选 ) 与该请求相关的可见视图的名称。
requestHeaders (Map<String,String>( ,可选 ) 请求标头的名称和值。

该函数返回 HTTP 标记,可用于设置响应大小,并在请求完成时调用完成或错误状态。

完成捕捉

请求完成后,必须调用 finish ,其中包括 HTTPMarker 上的响应和可选的 Error

HTTPMarker {
    fun finish(response: okhttp3.Response)
    fun finish(request: okhttp3.Request, error: Throwable)
    fun finish(connection: java.net.HttpURLConnection)
    fun finish(connection: java.net.HttpURLConnection, error: Throwable)
    fun finish(data: com.instana.android.instrumentation.HTTPMarkerData)
}

取消捕捉

如果请求在完成前被取消,则在 HTTPMarker 上启动以下方法:

fun cancel()

示例

val request = yourMethodToCreateRequest()
val marker = Instana.startCapture(request.url().toString(), viewName: "User Details")
val response = OkHttpClient().newCall(request).execute()
marker?.finish(response)
val marker = Instana.startCapture("https://example.com/user", viewName: "User Details")
// Complete request and manually obtain any relevant information
val httpMarkerData = HTTPMarkerData(
            requestMethod = "GET",
            responseStatusCode = 200,
            responseSizeEncodedBytes = 200,
            responseSizeDecodedBytes = 1000
        )
marker?.finish(httpMarkerData)
HTTPMarker marker = Instana.startCapture("https://example.com/user", "User Details");
// Complete request and manually obtain any relevant information
HTTPMarkerData data = new HTTPMarkerData.Builder()
        .requestMethod("GET")
        .responseStatusCode(200)
        .responseSizeEncodedBytes(200)
        .responseSizeDecodedBytes(1000)
        .build();
marker.finish(data);

设置视图

Instana 可以根据逻辑视图对移动应用程序的洞察进行细分。 为此,请通过 Instana.setView(String) 方法设置视图名称。 然后,该视图将与所有受监控的信标相关联,直到再次调用 setView 时视图发生变化。

不要使用类(例如 WebViewActivity )这样的技术或通用名称来定义视图。 使用可读的视图名称,例如 product detail pagepayment selection。 通过关注用户体验,不熟悉代码库的团队成员也能理解所提供的见解。

Instana.setView(String) 必须在屏幕显示给用户时调用,而不是在创建屏幕时调用(如片段,可以创建一次,但显示多次)。 设置视图名称还可以使 Instana 除了跟踪页面加载之外,还能够跟踪页面转换

示例

class WebViewActivity : AppCompatActivity() {

    override fun onResume() {
        super.onResume()
        Instana.view = "Webview: FitBit authorization"
    }
}

标识用户

用户特定信息可以选择与传输到 Instana 的数据一起发送。 这些信息可用于解锁以下附加功能:

  • 计算受错误影响的用户数量
  • 过滤特定用户的数据
  • 识别发起视图更改或 HTTP 请求的用户

默认情况下,Instana会将任何可识别用户身份的信息与信标相关联。 当您选择向Instana发送用户特定信息时,请注意相关的数据保护法律。 通过用户标识识别用户。 对于 Instana 来说,该操作是一个透明的 String ,仅用于计算某些指标。 userNameuserEmail 也可用于访问更多的过滤器,并以更令人愉悦的方式展示用户信息。

如果您处理的是匿名用户,因此无法访问用户 ID,您也可以使用会话 ID。 在过滤数据时,会话 ID 不如用户 ID 有用,但它们是计算受影响或唯一用户指标的好指标。 您必须设置一个用户名,如 Anonymous ,以便明确区分已通过身份验证的用户和未通过身份验证的用户。 会话标识可以是敏感数据(取决于所使用的框架或平台)。 为避免向 Instana 传输可授予访问权限的数据,可对会话 ID 进行散列。

已经传送到 Instana 后台的数据不能追溯更新。 因此,您必须在应用程序启动过程中尽早调用此 API。

如果未提供用户数据或应用程序缺乏任何用户上下文,则会从信标中检索 usi ( userSessionIdentifier )。 usi 作为一个独特的标识符,分配给应用程序,用于在没有用户数据的情况下唯一标识用户。 通过使用配置参数部分的 usiRefreshTimeIntervalInHrs 参数,可以指定刷新 usi 的时间间隔。

Instana {
    void setUserId(@Nullable String)
    @Nullable String getUserId()
    void setUserName(@Nullable String)
    @Nullable String getUserName()
    void setUserEmail(@Nullable String)
    @Nullable String getUserEmail()
}

示例

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )
        Instana.userId = "1234567890"
        Instana.userEmail = "instana@example.com"
        Instana.userName = "instana android agent demo"
    }
}

添加元数据

所有传输到 Instana 的数据都可以选择附加任意元数据。 您可以使用这些元数据来跟踪用户界面配置值、设置、功能标志以及任何可能对分析有用的附加上下文。

目前最多支持 50 个元键或元值对。 密钥最多可包含 98 个字符,值最多可包含 1024 个字符。

Instana {
     val meta = MaxCapacityMap<String, String>(50)
}

属性

表 5. 属性
参数 描述
meta (MaxCapacityMap) 保存所有元键或元值对的对象。 其界面类似于普通地图。 如果不超过对象的最大容量,您可以像往常一样添加和删除元素。

示例

class UserProfileActivity : AppCompatActivity() {

    override fun onResume() {
        super.onResume()
        Instana.meta.put("user authenticated", "true")
        Instana.meta.put("user type", "editor")
    }
}

将 URL 排除在监控范围之外

可以通过提供正则表达式,将 URL 添加到 ignoreURLs 列表中,从而忽略 URL。 使用此功能的一个好方案是忽略包含任何敏感数据(如密码)的所有 HTTP 请求。

只有自动监控的 URL 才会被忽略。 手动监控的 URL 不会被忽略。

Instana {
    val ignoreURLs = mutableListOf<Regex>()
}
Instana {
    List<Pattern> getIgnoreURLs()
}

示例

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )
        Instana.ignoreURLs.add("/.*([&?])password=.*/i".toRegex())
    }
}

此示例将忽略查询中包含密码的所有 URL。

报告自定义事件

自定义事件可以向 Instana 报告非标准活动、重要交互和自定义时间。 这种报告对分析未检测到的错误(面包屑)和跟踪更多性能指标特别有帮助。

Instana {
    fun reportEvent(event: CustomEvent)
}

通过 Instana 提供的 CustomEvent ,您可以设置多个参数, eventName (在其构造函数中)是唯一必须设置的参数。

配置参数

下表概述了配置参数:

表 6. 配置参数
参数 描述
eventName (String) 定制事件的名称。 它显示在 Instana 控制面板的显著位置
startTime (Long( ,可选 ) 事件开始的时间戳,单位为毫秒(从 Epoch 开始)。 缺省为 Now()-duration
duration (Long( ,可选 ) 事件持续时间,以毫秒为单位。 缺省值为 0。
viewName (String( ,可选 ) 事件发生所在的逻辑视图。 默认为 Instana.view 中设置的当前视图。
meta (Map<String, String>( ,可选 ) 元值的映射。 这些值与该事件的全局 Instana.meta 标签合并。 它们不会用于今后的任何其他活动。 请勿将敏感信息与 meta.
backendTracingID (String( ,可选 ) 启用 Instana 的后端在服务器-定时标头中发送的跟踪 ID( intid;desc=backendTracingID )。
error (Throwable( ,可选 ) 抛出的错误,以提供额外的上下文(如有)。
customMetric (Double( ,可选 ) 可提供精度高达小数点后四位的自定义度量数据。 请勿在此指标中包含敏感信息。

示例

val myEvent = CustomEvent("MyCustomEvent").apply {
    duration = 300
    meta = mapOf("keyOne" to "valueOne", "keyTwo" to "valueTwo")
    backendTracingID = "1234567890"
    customMetric = 98.7654
}

Instana.reportEvent(myEvent)
Map<String,String> myMetas = new HashMap<>();
myMetas.put("keyOne", "valueOne");
myMetas.put("keyTwo", "valueTwo");

CustomEvent myEvent = new CustomEvent("MyCustomEvent");
myEvent.setDuration(300L, TimeUnit.MILLISECONDS);
myEvent.setMeta(myMetas);
myEvent.setBackendTracingID("1234567890");

Instana.reportEvent(myEvent);

Google Play 服务的可用性

您可以明确告诉 Instana 特定用户和会话是否可以使用 Google Play 服务。

Instana {
    val googlePlayServicesMissing: Boolean?
}

示例

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )
        Instana.googlePlayServicesMissing = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) != ConnectionResult.SUCCESS
    }
}
//app/build.gradle
dependencies {
    implementation 'com.google.android.gms:play-services-basement:17.1.1'
    implementation 'com.google.android.gms:play-services-base:17.1.0'
}

登录界面

默认情况下,Instana 会直接登录 LogCat。 您可以通过提供一个实现日志记录器接口的对象来管理这些日志:

interface Logger {
    fun log(level: Int, tag: String, message: String, error: Throwable?)
}

Instana {
    var logger: com.instana.android.Logger?
}

配置参数

下表概述了配置参数:

表 7. 配置参数
参数 描述
level (Int) 由 android.util.Log 级别之一定义的日志级别(android.util.Log.INFO,android.util.Log.ERRO,...)
tag (String) 内部 Instana 代理程序标记
message (String) Instana 生成的日志消息
error (Throwable( ,可选 ) 抛出的错误,以提供更多上下文信息(如有)。

示例

Instana.logger = object : Logger {
    override fun log(level: Int, tag: String, message: String, error: Throwable?) {
        Log.d("my_tag", "intercepted Instana Android Agent log message: '$message'")
    }
}

定义日志记录级别

默认情况下,Instana 会生成 INFO 级别的日志。 您可以通过定义常用 android.util.Log 级别(android.util.Log.INFOandroid.util.Log.ERROR 或其他级别)之外的任何日志级别来更改默认值:

Instana {
    var logLevel: Int
}

示例

Instana.logLevel = android.util.Log.ERROR

启用或禁用数据收集

您可以随时启用数据收集和提交,例如在 Instana 代理启动时或运行期间。

在收集数据前需要用户明确同意的情况下,这一功能最为有用。

Instana {
    fun setCollectionEnabled(enabled: Boolean)
    fun isCollectionEnabled()
}

示例

Instana.setCollectionEnabled(true)

重新编辑 URL 查询参数

收集到的 URL 中的查询参数可能包含敏感数据。 因此,Instana代理支持为查询参数键指定regex模式,其值必须被编辑;任何被编辑的值都会被替换为 <redacted>

在代理向 Instana 后台报告之前,Instana 代理内部会进行重处理。 因此,秘密无法到达 Instana 后端进行处理,也无法在用户界面中进行分析或使用 Instana API 进行检索。

缺省情况下,Instana 代理程序配置了包含三个正则表达式模式的列表,用于自动编辑查询参数值:

  • key
  • secret
  • password

Redaction 仅适用于自动监控的请求及其相关日志。 不会编辑手动监视的请求。

Instana {
    val redactHTTPQuery = mutableListOf<Regex>()
}

示例

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )

        // in order to for example redact "https://example.com?secret=abcdef" into "https://example.com?secret=<redacted>"
        Instana.redactHTTPQuery.add("secret".toRegex())
        // in order to for example redact "https://example.com?hidden1=abcdef&hidden2=123456" into "https://example.com?hidden1=<redacted>&hidden2=<redacted>"
        Instana.redactHTTPQuery.add("^hidden[0-9]".toRegex())
    }
}

从跟踪中排除 URL 查询参数和片段

默认情况下,Android 代理会收集完整的 URL ,其中包括所有参数。 您可以配置代理只收集与指定正则表达式列表匹配的 URL 的参数。 不跟踪排除 URL 的参数。

根据所提供的正则表达式列表,Android 代理会对 URL 进行如下跟踪:

  • 如果 URL 与列表中的一个条目匹配,则会收集包括所有参数在内的整个 URL。
  • 如果 URL 与列表中的条目不匹配,则不会向 Instana 后台发送查询参数和 URL 的片段。
  • 如果所提供的列表为空,则应用默认行为,并跟踪带有参数的完整 URL。
Instana {
    val queryTrackedDomainList = mutableListOf<Regex>()
}

如果 URL 中包含经编辑的秘密或片段,以下情况将说明情况:

  • 如果 URL 与 queryTrackedDomainList 中的条目相匹配,则整个 URL 和经编辑的密文或片段会被发送到 Instana 后台。
  • 如果 URL 与 queryTrackedDomainList 中的条目不匹配,则在向 Instana 后台发送 URL 之前,会排除所有参数。

示例

在下面的示例中,只有与 regex .*10\\.0\\.2\\.2:8081.* 匹配的 URL 才会连同其参数一起被完全收集:

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )
        Instana.queryTrackedDomainList.add(".*10\\.0\\.2\\.2:8081.*".toRegex().toPattern())
    }
}

捕捉 HTTP 标头

作为选项,Instana 代理可以捕获每个跟踪请求或响应的 HTTP 标头。

可以定义一系列 regex 模式,以确定捕获哪些标头。

如果请求和响应中出现相同的标头名称,则只保留响应的标头值。

Instana {
    val captureHeaders = mutableListOf<Regex>()
}

示例

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL
            )
        )

        // in order to capture all request/response headers like: "X-MyCompany-name1", "X-MyCompany-name2"...
        Instana.captureHeaders.add("X-MyCompany-.*".toRegex())
    }
}

启用慢速发送模式

慢速发送模式功能默认为禁用。 如果需要,可以启用此功能。

默认情况下,如果信标发送失败,Instana 代理会尝试重新发送信标,直到发送成功。 这种重发功能在某些蜂窝网络中效果不佳。 启用慢速发送模式功能后,信标发送间隔将改为分配给该参数的时间值。 slowSendIntervalMillis 参数指定的时间值。 每次信标发送只包含一个信标,而不是一批信标(一批信标最多 100 个)。 Instana 代理处于慢速发送模式,直到成功发送一个信标。

的有效时间范围是 slowSendIntervalMillis 的有效时间范围是 2000-3600000 毫秒。

示例

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL,
                slowSendIntervalMillis = 60000
            )
        )
    }
}

跟踪用户会话 ID

默认情况下,会跟踪用户会话,ID 是随机生成的通用唯一标识符 (UUID)。 该 ID 在安装应用程序时保持不变。 参数配置用户会话 ID 的过期时间。 usiRefreshTimeIntervalInHrs 参数配置用户会话 ID 的过期时间。 以下参数值表示用户会话 ID 的状态:

  • 负数:该值表示用户会话 ID 从未过期。 缺省值是 -1。

  • 正数:该值表示用户会话 ID 会在设定时间后刷新,即生成并使用一个新的 UUID。

  • 零:该值用 0.0 表示,表示禁用了用户会话 ID。

示例

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Instana.setup(
            this,
            InstanaConfig(
                key = BuildConfig.INSTANA_KEY,
                reportingURL = BuildConfig.INSTANA_REPORTING_URL,
                usiRefreshTimeIntervalInHrs = 24
            )
        )
    }
}

捕捉可组合的用户界面名称

要自动捕获可组合用户界面的屏幕名称,可以在可组合应用程序的 NavHostController 对象中添加 addInstanaObserver() 扩展函数。 此函数收集为可组合导航指定的路径名称。

示例

@Composable
fun RootNavigationGraph(navHostController: NavHostController, context: Context) {
    NavHost(
        navController = navHostController,
        route = Graph.ROOT,
        startDestination = Graph.INITIAL_FLOW,
    ) {
        initNavGraph(navHostController, context)
        composable(route = Graph.HOME) {
            navHostController.addInstanaObserver() //Adding Instana observer as a extension function.
            HomeScreen()
        }
    }
}