更新时间:2024-10-21 GMT+08:00
分享

云日志服务Android SDK

云日志服务Android SDK提供了Kotlin & Java语言上报日志的一系列方法,如果您需要收集和分析用户在网站上的信息,例如用户的浏览器、浏览行为记录、购买行为记录、终端设备记录,设备异常记录,网络使用记录等,可以直接使用Android SDK上报日志到LTS。

当前仅华北-北京四、华东-上海一、华南-广州区域的白名单用户支持使用该功能,如有需要请提工单申请。

传输协议

HTTPS

使用前提

  • 确认云日志服务的区域,请您根据所在区域,选择RegionName。
  • 获取华为云账号的项目ID(project id),步骤参考:请参见“我的凭证 > API凭证”。
  • 获取需要上报到LTS的日志组ID日志流ID
  • 日志流需要开启匿名写入功能。详细操作请参考管理日志流

版本更新说明

SDK如何处理个人信息请参考华为云日志服务移动端日志采集SDK隐私声明

您集成和使用我们的SDK时需要遵从个人信息保护基本要求,详情请参考华为云日志服务移动端日志采集SDK开发者合规指南

表1 版本更新说明

版本号

下载地址

检验信息下载地址

更新说明

系统

1.0.28

单击下载

单击下载

修复了1.0.26版本以来工程配置导致的配置冲突。

Android 7 及以上

0.0.5

请通过mavenCentral下载。

-

功能与1.0.28版本相同,可支持kotlin 1.3.x。

Android 7 及以上。

1.0.27

单击下载

单击下载

优化了缓存效率。

Android 7 及以上

0.0.4

请通过mavenCentral下载。

-

功能与1.0.27版本相同,可支持kotlin 1.3.x。

Android 7 及以上。

1.0.26

单击下载

单击下载

修复了因异步修改入参导致数据异常的问题。

Android 7 及以上。

1.0.25

单击下载

单击下载

增强代码强壮性,添加参数保护。

Android 7 及以上。

1.0.24

单击下载

单击下载

  • 支持更多region:华东-上海一、华南-广州。
  • 修改了程序目录,修改为com.cloud.lts.*。

Android 7 及以上。

1.0.21

单击下载

单击下载

废弃setconfig方法,使用LTSSDK的构造方法代替。

Android 7 及以上。

1.0.19

单击下载

单击下载

  • 修改了上报时间间隔阈值。
  • 修复了修改配置信息后导致无法获取缓存的问题。

Android 7 及以上。

1.0.18

单击下载

单击下载

  • 增强代码强壮性,修复多实例时可能会产生的崩溃。
  • 修复最低 Android API 支持版本定义错误的问题。
  • 增加设置调试日志级别接口:setLogLevel。
  • 修改了 日志发送的入参 label 的类型,支持多层嵌套。
  • 日志发送入参 content 支持数组类型,方便使用。
  • 添加缓存存储条目最大值支持,如果超过会丢弃后再存储。
  • 修改了请求失败时的控制策略,支持递进式等待。
  • 对本地错误日志输出做了整理。

Android 7 及以上。

1.0.17

单击下载

单击下载

首次发布,提供四个接口:初始化、配置config、上报日志report、立即上报日志reportImmediately。

Android 7 及以上。

安装Android SDK

  1. 集成接入SDK。

    1. maven仓库集成。
      1. 在build.gradle中添加依赖。
        plugins {
            ...
            id 'org.jetbrains.kotlin.android' version 'KOTLIN_VERSION' apply false  // 添加kotlin插件,1.x.x最低支持1.6.20版本,最低可支持1.3.61版本
            ...
        }
      2. 在app/build.gradle中添加依赖。
        dependencies {
            ...
            implementation 'io.github.lts-sdk:lts-sdk-android:1.0.28'
            ...
        }
      3. 在 settings.gradle中添加maven仓库源。
        pluginManagement{
            ...
            repositories {
                ...
                // 加入下面内容
                mavenCentral()
           }
        }
        dependencyResolutionManagement {
            ...
            repositories {
                ...
                // 加入下面内容
                mavenCentral()
           }
        }
    2. 手动集成。
      1. 下载日志SDK包。
      2. 下载后解压到指定目录。注:直接解压即可,不需要额外操作。
      3. 将解压后的aar静态库文件添加到您的项目工程中。
      4. 在build.gradle中添加依赖。
        plugins {
            ...
            id 'org.jetbrains.kotlin.android' version 'KOTLIN_VERSION' apply false  // 添加kotlin插件,1.x.x最低支持1.6.20版本,0.0.x最低可支持1.3.61版本
            ...
        }
      5. 在app/build.gradle中添加依赖。
        dependencies {
            ...
            implementation fileTree(dir: $dir, include: ['*.aar']) // 填写aar所在的文件夹,例如'libs'
            implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.0' // 0.0.x版本依赖版本为1.3.3
            implementation 'androidx.core:core-ktx:1.7.0'// 0.0.x版本依赖版本为1.2.0
            implementation 'com.google.code.gson:gson:2.8.9'
            kapt 'androidx.room:room-compiler:2.3.0'    // 0.0.x版本依赖版本为2.2.6
            api 'androidx.room:room-runtime:2.3.0'      // 0.0.x版本依赖版本为2.2.6
            api 'androidx.room:room-common:2.3.0'       // 0.0.x版本依赖版本为2.2.6
            ...
        }
      6. 在 settings.gradle中添加maven仓库源。
        pluginManagement{
            ...
            repositories {
                ...
                // 加入下面内容
                google()
                mavenCentral()
           }
        }
        dependencyResolutionManagement {
            ...
            repositories {
                ...
                // 加入下面内容
                google()
                mavenCentral()
           }
        }
        • 如果您的Gradle版本低于7.0 则需要将mavan仓库源添加到build.gradle文件中。

  2. 初始化,详细参数请参考表4

    1. 添加依赖
      import com.cloud.lts.UserConfig
      import com.cloud.lts.LTSSDK
    2. Kotlin:初始化代码示例。
      // 注意:认证用的华为云账号AK、SK硬编码到代码中或者明文存储都有很大的安全风险,建议密文存放,使用时解密,确保安全。
      val ak: String = getData("HUAWEICLOUD_SDK_AK")
      val sk: String = getData("HUAWEICLOUD_SDK_SK")
      // LTS参数配置
      val userConfig = UserConfig.Builder()
      // 必填参数
      .setRegion(USER_REGION)  // 云日志服务的区域
      .setProjectId(PROJECT_ID)  // 华为云账号的项目ID
      .setGroupId(LOG_GROUP_ID)  // LTS的日志组ID
      .setStreamId(LOG_STREAM_ID)  // LTS的日志流ID
      .setAccessKey(ak)  // 华为云访问密钥
      .setSecretKey(sk)  // 华为云秘密访问密钥
      // 选填参数
      .setUrlHost(url)  // LTS的公网地址域名
      .setCacheThreshold(200)
      .setTimeInterval(60)
      .setIsReportBackground(true)
      .setIsReportLaunch(false)
      .build()
       // LTS初始化方法
      ltssdk = LTSSDK( </* Application Instance */> , userConfig)
    3. Java:初始化代码示例。
      // 注意:认证用的华为云账号AK、SK硬编码到代码中或者明文存储都有很大的安全风险,建议密文存放,使用时解密,确保安全。
      String ak = getData("HUAWEICLOUD_SDK_AK")
      String sk = getData("HUAWEICLOUD_SDK_SK")
      // LTS参数配置
      UserConfig userConfig = new UserConfig.Builder()
       // 必填参数
      .setRegion(USER_REGION)  // 云日志服务的区域
      .setProjectId(PROJECT_ID)  // 华为云账号的项目ID
      .setGroupId(LOG_GROUP_ID)  // LTS的日志组ID
      .setStreamId(LOG_STREAM_ID)  // LTS的日志流ID
      .setAccessKey(ak)  // 华为云访问密钥
      .setSecretKey(sk)  // 华为云秘密访问密钥
      // 选填参数
      .setUrlHost(url)  // LTS的公网地址域名
      .setCacheThreshold(200)
      .setTimeInterval(60)
      .setIsReportBackground(true)
      .setIsReportLaunch(false)
      .build();
      // LTS初始化方法
      ltssdk = new LTSSDK( </* Application Instance */> , userConfig);
      1. LTSSDK支持多实例日志上报机制,根据不同配置创建实例进行上报。

  3. 上报日志。LTS提供两种上报日志的方法。

    表2 两种上报日志的方法

    Method

    Description

    report(content, labels)

    上报日志:先存入本地数据库,根据配置中设定的策略实施上报。

    reportImmediately(content, labels)

    立即上报日志。

    表3 Parameters参数

    Name

    Description

    content

    日志内容,支持字典和字典数组;键值对最多300个;content转JSON字符串最大支持长度为30*1024,超出部分被截断。

    labels

    日志标签。

    • 支持字典或空值。
    • 最外层键值对最多50个。
    • 最外层key最大长度为64。
    • 支持字母、数字和下划线组合,首字符须是字母。
    • 字典转JSON字符串最大支持长度为30720,超出则该条日志无法上报。
    • Kotlin代码示例如下:
      var ltssdk: LTSSDK
      val food = hashMapOf(Pair("food_1", "rice"), Pair("food_2", "wheat"), Pair("food_3", "egg"))
      val fruit = hashMapOf(Pair("fruit_1", "apple"), Pair("fruit_2", "pear"), Pair("fruit_3", "banana"))
      val label = hashMapOf( Pair("date","2023-10-01"))
      val contents = listOf(food, fruit).toTypedArray()
      ltssdk.report(food, label)    // 缓存上报单条 带标签
      ltssdk.report<String, String>(food)    // 缓存上报单条 不带标签
      ltssdk.reportImmediately(food, label)    // 立即上报单条 带标签
      ltssdk.reportImmediately<String, String>(food)    // 立即上报单条 不带标签
      ltssdk.report(contents, label)    // 缓存上报多条 带标签
      ltssdk.report<String, String>(contents)    // 缓存上报多条 不带标签
      ltssdk.reportImmediately(contents , label)    // 立即上报多条 带标签
      ltssdk.reportImmediately<String, String>(contents)    // 立即上报多条 不带标签
    • Java代码示例如下:
      LTSSDK ltssdk;
      HashMap fruit = new HashMap<String, String>(){{
          put("fruit_1", "apple");
          put("fruit_2", "pear");
          put("fruit_3", "banana");
      }};
      HashMap food = new HashMap<String, String>(){{
          put("food_1", "rice");
          put("food_2", "wheat");
          put("food_3", "egg");
      }};
      HashMap<String, String> labels = new HashMap(){{
          put("date","2023-10-01");
      }};
      HashMap[] contents = {food, fruit};
      ltssdk.report(food);  // 缓存上报单条 不带标签
      ltssdk.report(food, labels);  // 缓存上报单条 带标签
      ltssdk.reportImmediately(food);  // 立即上报单条 不带标签
      ltssdk.reportImmediately(food, labels);  // 立即上报单条 带标签
      ltssdk.report(contents); // 缓存上报多条 不带标签
      ltssdk.report(contents, labels); // 缓存上报多条 带标签
      ltssdk.reportImmediately(contents);  // 立即上报多条 不带标签
      ltssdk.reportImmediately(contents, labels);  // 立即上报多条 带标签

配置参数说明

表4 初始化参数说明

参数名称

类型

是否必填

默认值

描述

projectId

String

必填

-

华为云账号的项目ID。

accessKey

String

必填

-

华为云账号的访问密钥,简称AK。

说明:

认证用的华为云账号AK、SK硬编码到代码中或者明文存储都有很大的安全风险,建议密文存放,使用时解密,确保安全。

secretKey

String

必填

-

华为云账号的秘密访问密钥,简称SK。注意:认证用的华为云账号AK、SK硬编码到代码中或者明文存储都有很大的安全风险,建议密文存放,使用时解密,确保安全。

region

String

必填

-

LTS的服务区域。

groupId

String

必填

-

LTS的日志组ID。

streamId

String

必填

-

LTS的日志流ID。

url

String

选填

null

用于上报的公网地址域名,如未设置,将根据region自动生成链接,格式如下:https://lts-access.{region}.myhuaweicloud.com

cacheThreshold

Long

选填

200条

当本地数据库日志存储条数达到该值会触发上报,取值范围为30-1000条。

timeInterval

Long

选填

3秒

定时器每隔该值会触发上报,取值范围为1-1800秒。

isReportBackground

boolean

选填

true

是否开启APP切入后台时上报功能。

isReportLaunch

boolean

选填

false

是否开启APP启动时上报功能。

上报日志策略说明

LTSSDK支持四种日志上报策略:阈值上报、定时上报、应用切后台和启动时上报,根据场景选择合适的值配置cacheThreshold、timeInterval、isReportBackground、isReportLaunch等参数。

权限配置

LTSSDK 需要 Android 的网络权限,如果您没有配置,请将下面内容的写入APP 的 Manifest.xml 文件中:

manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
...
// 加入下面的内容
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>

混淆配置

如App对代码进行乱序混淆,则在混淆配置文件中添加代码段:

-keep class com.cloud.**{*;} 

接入调试

在开发过程中可以启用调试模式,借助控制台日志实时查看上报日志的记录情况,观察具体结果并根据需要进行调整。

需要通过调用LTSSDK的静态方法来修改,SDK支持Debug、Info、Warning 、 Error 和 Off 5个级别的默认为静默输出(Off)。5个级别分别对应的参数:LogLevel.DEBUG、LogLevel.INFO、LogLevel.WARNING、LogLevel.ERROR、LogLevel.OFF。代码示例如下:

LTSSDK.setLogLevel(LogLevel.DEBUG)

参数获取方式

  • 区域表
    表5 区域表

    区域名称

    RegionName

    华北-北京四

    cn-north-4

    华东-上海一

    cn-east-3

    华南-广州

    cn-south-1

  • 日志组ID登录云日志服务页面,选择“日志管理”,鼠标悬浮在日志组名称上,可查看日志组名称和日志组ID
  • 日志流ID单击“日志组名称”可查看日志流列表,鼠标悬浮在日志流名称上,可查看日志流名称和日志流ID

相关文档