旧-帮助文档
回到 GrowingIO
  • GrowingIO 帮助文档
  • 快速提交工单
  • 快速上手-Web
  • 快速上手-移动端
  • 快速上手-小程序
  • 产品更新日志
  • 分析工具
    • 事件分析
    • 用户分群
    • 用户细查
    • 漏斗分析
    • 活动分析
    • 落地页分析
    • 分布分析
    • 智能路径
    • 留存分析
    • 留存魔法师
    • 活跃用户分析
    • 热图分析
      • Web 端热图
      • App 热图
    • 单图
    • 微信应用用户分析
    • 小程序-分享分析
  • 看板
    • 自定义首页
    • 概览看板
    • KPI看板(企业版)
    • 小程序预置看板
    • 微信内嵌页预置看板
    • 实时监控模板
    • 业务场景
  • GIO 小程序看数助手
  • 广告监测
    • 创建监测链接
      • 推广 App
      • 推广网页
      • 推广小程序(微信)
    • 数据报表
      • 应用级数据
      • 深度数据分析
      • 数据指标说明
    • 推广管理
      • 监测链接
      • 广告活动
      • 推广渠道
    • 渠道配置指南
      • 腾讯社交广告
      • 今日头条
      • 百度原生信息流
      • 微博超级粉丝通
      • 爱奇艺
      • Inmobi
      • 微信广告平台
      • 凤羽广告平台
      • bilibili(B 站)
    • 其他功能
      • 日志导出
      • 维度配置
      • 权限配置
      • 反作弊规则
      • 深度链接配置
    • 相关知识
      • UTM 参数使用指南
      • 创建小程序的推广码
      • 移动端转化归因
      • 默认的渠道来源跟踪
      • DeepLink 启用新域名
    • 广告监测FAQ
  • SDK 文档
    • SDK 简介与安全性说明
    • 各平台 SDK 支持明细
    • SDK 更新日志
    • Web JS SDK
      • Web JS SDK API
      • Web JS SDK 常见问题
    • Android SDK
      • Android 无埋点 SDK
      • Android 无埋点 SDK API
      • Android 半自动采集浏览事件
      • Android 埋点 SDK
      • Android SDK 常见问题
    • iOS SDK
      • iOS 无埋点SDK
      • iOS SDK API
      • iOS 半自动采集浏览事件
      • iOS SDK 1.X旧版本升级指导
      • iOS 埋点SDK
      • iOS SDK 常见问题
    • Hybrid SDK (App内嵌H5)
    • 小程序、小游戏以及内嵌页 SDK
      • SDK 更新日志 - 小程序 & 内嵌页 & 快应用
      • 微信小程序 SDK
        • mpvue+第三方插件 添加代码
      • 微信小游戏 SDK
      • H5 内嵌页 SDK
      • 支付宝小程序 SDK
      • 百度小程序 SDK
      • QQ 小程序 SDK
      • 字节跳动小程序 SDK
      • 快应用 SDK
    • React Native 无埋点 SDK
      • ReactNative 埋点 SDK
    • Flutter 埋点 SDK
    • Cordova 埋点 SDK
    • Weex 埋点 SDK
    • API Cloud埋点 SDK
    • AppCan 埋点 SDK
    • Java 埋点 SDK
    • PHP 埋点 SDK
    • GrowingIO Debugger
      • 验证打点事件
  • 数据模型
    • 用户模型
      • 访问用户
      • 登录用户
      • 用户属性
    • 事件模型
      • 什么是事件
      • 无埋点事件
        • 访问事件及属性
        • 页面事件及属性
        • 动作事件及属性
      • 埋点事件
        • 埋点事件及属性
    • 统计模型
      • 指标--事件的度量
      • 维度--事件的属性
      • 预定义的指标和维度
  • 数据定义
    • 用户变量
      • 登录用户变量
      • 访问用户变量
    • 页面级变量
      • 查询条件直接设置成页面级变量
    • 无埋点圈选
      • Web 圈选
      • App 端圈选 App
      • 电脑端圈选 App
      • 小程序数据定义
      • 微信内嵌页数据定义
      • 圈选指标管理
        • 合并简单指标
        • 复合指标
    • 埋点事件
      • 埋点事件级变量
      • 转化变量
    • 小程序事件和变量
  • 数据管理
    • 新版数据管理功能说明
    • 无埋点事件管理
    • 埋点事件管理
    • 变量管理
    • 合并事件管理
    • 计算指标
  • 系统配置
    • 组织管理
    • 项目管理
    • 用户管理
    • 权限管理
    • 爬虫规则
    • 账号管理
    • UTM 映射管理
    • IP及域名数据过滤
  • API
    • GrowingIO API 认证
    • 广告监测链接创建服务 API
    • 微信小程序二维码创建服务 API
    • 原始数据导出 API
      • 原始数据导出字段说明
        • 无埋点事件
        • 埋点事件与变量
        • 广告相关数据
        • 通用字段说明
      • 原始数据导出 2.0 API
      • 原始数据导出 1.0 API(已废弃)
      • 原始数据导出 API 的升级迁移
      • 原始数据导出格式及处理建议
    • 统计数据导出 API
    • 埋点数据上传API
    • 用户变量上传 API
    • 项目管理 API
    • 数据管理 API (GDPR)
    • API 更新日志
  • 常见问题
    • 基本问题
    • SDK 集成
    • 圈选常见问题
    • 指标和维度
    • 数据安全
    • 产品使用
    • 数据统计差异
    • 无效指标清理说明
  • 内容贡献者
  • 帮助文档问题反馈
Powered by GitBook
On this page
  • 无埋点数据采集问题
  • 1. GrowingIO 对于页面的定义
  • 2. 点击事件采集逻辑
  • 3. 如何查看当前 APP SDK 版本
  • 4. 为何不建议自定义设备ID
  • 5. 多个 URLScheme 配置
  • API 使用问题
  • setPageVariable 自定义页面变量事件发送失败
  • SDK 性能问题
  • 1. SDK 编译时性能和消耗时间
  • 2. SDK 数据发送策略
  • 圈选问题
  • 1. 无法圈选
  • 2. 集成 SDK 后,Activity 受影响
  • Gradle 常见问题
  • 1. Gradle 支持版本
  • 2. 升级 2.8.4 编译报错
  • 3. 使用 Jack 注意
  • APP 内嵌 H5 页面常见问题
  • H5 页面需要集成 SDK 么?
  • H5 页面什么情况需要集成 web js sdk ?
  • H5 怎么增加自定义事件和变量 ?
  1. SDK 文档
  2. Android SDK

Android SDK 常见问题

PreviousAndroid 埋点 SDKNextiOS SDK

Last updated 5 years ago

无埋点数据采集问题

1. GrowingIO 对于页面的定义

确认当前页面方法有三种:

1.,查看圈选页面为当前页面

2.,进入页面发送的page的p为当前的页面

3.使用查看page事件的p

2. 点击事件采集逻辑

设置以下点击事件的控件会被采集点击事件,如果您自定义了点击事件,不在下方列举之内,将无法采集点击事件,影响数据分析。

onCheckedChanged(android/widget/CompoundButton)
onCheckedChanged(android/widget/RadioGroup)
onClick(android/content/DialogInterface)
onClick(android/view/View)
onItemClick(android/widget/AdapterView;android/view/View)
onItemSelected(android/widget/AdapterView;android/view/View)
onNewIntent(android/content/Intent)
onRatingChanged(android/widget/RatingBar)
onStopTrackingTouch(android/widget/SeekBar)
onFocusChange(android/view/View)
onMenuItemClick(android/view/MenuItem)
onOptionsItemSelected(android/view/MenuItem)
onGroupClick(android/widget/ExpandableListView;android/view/View)
onChildClick(android/widget/ExpandableListView;android/view/View)

如果您自定义了 Click 事件, 但是希望 SDK 采集。 可以放置一个 onClickListener 作为代理。这种方案即使随着我们的 SDK 升级也会被兼容。

请注意设置您的 View 可点击:

//设置view Clickable, 如果不设置会不能圈选这个 View。
view.setClickable(true);
public void onCustomClick(View view){
	// 您的业务
	...	
	// 为了 GrowingIO 能够采集自定义点击事件,调用 android.view.OnClickListener
    new View.OnClickListener() {
        @Override
        public void onClick(View view) {}
    }.onClick(view);
}

例: TabHost 的点击事件采集增加 onClickListener 后可以采集到点击事件

TabHost.OnTabChangeListener listener = new TabHost.OnTabChangeListener() {
    public void onTabChanged(String tabId) {
        // GrowingIO 点击事件采集适配 TabHost 添加代码
        new View.OnClickListener() {
            @Override
            public void onClick(View view) {}
        }.onClick(mTabHost.getCurrentTabView());
    }
}

最后,如果您是在布局文件中在view上使用 onClick 属性的点击事件,不会被采集,不支持。

3. 如何查看当前 APP SDK 版本

有以下多种方式,任选其一。

  1. 唤起圈选,点击小红点,能够看到版本号;

  2. 使用 Mobile Debugger , 点击左侧截图区域的 i 图标,能够看到版本号;

  3. 翻阅代码,app 目录层中的 build.gradle 文件中查找;

  4. 查看日志,每条 vst 事件中 av 字段描述版本号;

  5. 抓包查看,网络请求中包含。

4. 为何不建议自定义设备ID

我们强烈不建议您自行定义设备ID有以下几个方面:

  1. 我们采集的设备 ID 为了能够唯一标识一台设备信息,如果您进行自定义,有可能用户卸载重新安装应用,设备 ID 会不一致,造成老用户被识别成新用户;

  2. 如果您未曾定义过设备ID,并且已经集成SDK并且发版过,则新旧设备 ID 不兼容,老用户被认为成新用户,导致新用户数量暴增;

5. 多个 URLScheme 配置

在 Android 无埋点 SDK 集成步骤中,其中有一步需要在 manifest.xml 文件中配置 intent-filter 代码块,如果有多个 URLScheme 配置,请参照以下代码:

<activity
    android:name=".LauncherActivity"
    android:launchMode="singleTop"
    android:theme="@style/AppTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <!-- GrowingIO URLScheme -->
    <intent-filter>
        <data android:scheme="growing.xxxxxxxxxxxxxxxx" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
    <!-- 测试多个 scheme 能够成功被唤醒 -->
    <intent-filter>
        <data
            android:host="share"
            android:scheme="will" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>

API 使用问题

setPageVariable 自定义页面变量事件发送失败

此问题常发生在 Activity 中包含多个 Fragment 的页面中。

  • 如果此 Fragment 不是您业务上认为的页面,可以使用 ignoreFragment 不认为此 Fragment 可以作为页面访问事件发送。

  • 注意:setPageVariable 接口参数中的 Activity 或者 Fragment 必须为当前页面访问事件页面,即可成功发送自定义页面事件。

SDK 性能问题

1. SDK 编译时性能和消耗时间

SDK 2.7.5 正式支持 instant Run, 不需要配置 gioenable 变量,请升级 SDK。

GrowingIO Android SDK 的编译时耗时取决于您的项目大小,我们的原理是字节码插桩(使用Transform API)。 从clean项目, 执行assembleDebug, 如果添加了GrowingIO的SDK, 会大约增加50%的时间, 如果执行assembleRelease, 添加GrowingIO SDK 大约会增加30%的时间。 可以看出GrowingIO确实会影响您的编译时长,尤其是在项目比较大的情况。 如果您感觉到明显的编译耗时长,我们提供了一个在开发期间 GrowingIO 不参与编译的配置,如下:

1.在 Project 项目中,gradle.properties 文件内添加

# true GrowingIO 参与编译,false 不参与编译
gioenable = true

2.在 Module 级别的 build.gradle 文件中增加配置

android {
    defaultConfig {
        resValue("string", "growingio_project_id", "您的项目ID")
        resValue("string", "growingio_url_scheme", "您的URL Scheme")
        // 增加 gioenable 的配置
        resValue("string", "growingio_enable", project.gioenable)
    }
}

上线时,一定要将 gradle.properties 文件中的 gioenable 改为 true 。否则我们将无法采集数据。

SDK 2.7.4 以下版本不支持 Instant Run , 请开发者开发期间配置 gioenable = false ,即可使用 Instant Run。

2. SDK 数据发送策略

如下图:

圈选问题

1. 无法圈选

2. 集成 SDK 后,Activity 受影响

是否在集成 SDK 时配置 GrowingIO <intent-filter/> 代码块中的 Activity 中使用了 getIntent 呢?

解答: 请在您的逻辑中过滤掉 Gio 的 Intent ,我们的 Intent 大致格式是这样:

growing.xxxxxxxxxxx://growing/oauth2/token?loginToken=xxxxx.........

请您在代码逻辑中判断如果是以 growing 开头的 scheme 不处理它,代码示例:

// 请注意自己判断 intent 是否为空
Uri data = intent.getData();
if (data.getScheme().startsWith("growing.")){    
    Log.d(TAG, "GrowingIO url scheme, not process");
}

Gradle 常见问题

1. Gradle 支持版本

Android 无埋点 SDK 支持 com.android.tools.build:gradle 2.3.3 及其以上版本,推荐版本是 3.2.1。下文将简称 com.android.tools.build:gradle为 gradle。

无埋点 SDK 随着 gradle 的升级也在逐步兼容,请参考以下表格更新 SDK:

无埋点 SDK 版本

说明

2.8.4+

  • SDK 2.8.4 版本及其以上支持 gradle 3.5.0;

  • 新增在编译期间校验用户使用的 SDK 是否为稳定 SDK 版本,如果使用有问题的版本将主动在编译时提示用户升级 SDK,并抛出异常提示,拒绝编译。

2.7.8

2. 升级 2.8.4 编译报错

升级无埋点 SDK 2.8.4 如果报错如下:

Unable to load class 'org.apache.http.impl.client.CloseableHttpClient'. Possible causes for this unexpected error include: Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.) Re-download dependencies and sync project (requires network)

The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem. Stop Gradle build processes (requires restart)

Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.

In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

此报错原因是在 SDK 2.8.4 时新增在编译期间校验用户使用的 SDK 是否为稳定 SDK 版本,如果使用有问题的版本将主动在编译时提示用户升级 SDK,并抛出异常提示,拒绝编译功能,此部分代码逻辑触发了Proguard 的 Bug ,导致报错。建议解决方案有两种:

  1. 升级 gradle 为 3.2.1 及其以上版本;

  2. 在项目级别 build.gradle 中添加以下依赖即可:

 classpath "org.apache.httpcomponents:httpclient:4.5.10"

示例代码:

dependencies {
    //使用 gradle 3.2.1 以下并且 SDK 2.8.4 版本会触发此问题
    classpath 'com.android.tools.build:gradle:3.1.4'
    classpath 'com.growingio.android:vds-gradle-plugin:autotrack-2.8.4'
    //添加以下依赖能够解决,或者升级 gradle
    classpath "org.apache.httpcomponents:httpclient:4.5.10"
}

3. 使用 Jack 注意

android {
    ...
    defaultConfig {
        ...
        // Remove this block. 删掉这里!!!
        jackOptions {
            enabled true
            ...
        }
    }
    // Keep the following configuration in order to target Java 8.
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

如果您未移除,集成 SDK 后 App 将 Crash 。

APP 内嵌 H5 页面常见问题

H5 页面需要集成 SDK 么?

如果您集成原生无埋点 SDK , 则不需要单独集成 hybrid sdk ,无埋点 sdk 会将 hybrid sdk 自动注入,并且采集点击、浏览、文本输入等事件。

H5 页面什么情况需要集成 web js sdk ?

如果您的页面,在移动端和网站同时投放,不考虑平台只关注这个页面的数据时,集成 web js sdk 。

此时,由于您集成了 web js sdk ,并且移动端无埋点 sdk 会自动注入 hybrid sdk ,则会发两份数据采集信息,web js sdk 发送一份, hybrid sdk 发送一份。

如果您单独期望关闭 web js sdk 的数据采集,请将window.webViewRequestSend的值为false。

H5 怎么增加自定义事件和变量 ?

如果您还未采集到点击事件, 并且使用了 lambda 表达式,请看 。

首先需要确认当前页面发送的页面访问(page)事件是哪个 Fragment ,您可以。

请根据自行排查,如果仍有问题,可以联系技术支持。

增加接口 setAndroidIdEnable , setImeiEnable, setGoogleAdIdEnable 为海外上架应用涉及采集用户 androidId, imei, googleAdId 隐私数据的开关支持。。注意,以上接口不支持 gradle 3.0.x 以下版本。

依据,SDK不支持 Jack 编译器,请确认移除 jackOptions 代码块。

官网说明
Web JS SDK 埋点文档。
参照这三种方式确认当前的页面访问事件
圈选
这篇文档
Mobile Debugger
详情见 API 文档
Hybrid SDK 埋点文档。
lambda 配置
查看日志