Android SDK

添加依赖

在 module 级别的 build.gradle 文件中添加依赖

dependencies {
//埋点CDP SDK
implementation 'com.growingio.android:vds-android-agent:cdp-1.2.4'
}

添加初始化代码

请将GrowingIO.starWithConfiguration 加在您的 Application 的onCreate方法中。

SDK的初始化时机必须在 Application的onCreate方法中进行。

public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// GrowingIO 初始化代码
GrowingIO.startWithConfiguration(this, new Configuration()
.setProjectId("获取您的项目ID")
.setDataSourceId("填写您的数据源ID")
.setURLScheme("填写UrlScheme")
.setTestMode(BuildConfig.DEBUG)
.setDebugMode(BuildConfig.DEBUG)
.setTrackerHost("这里设置为您的 HOST ")
.setChannel("XXX应用商店")
);
}
}

添加应用权限和URL Scheme

将应用的 URLScheme 和应用权限添加到你的 AndroidManifest.xml 中。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.cdpdemo">
<!-- GIO 需要的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:name=".MyApplication"
<activity android:name=".MainActivity">
<!--请添加这里的整个 intent-filter 区块,并确保其中只有一个 data 字段-->
<intent-filter>
<data android:scheme="growing.您的URL Scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
<!--请添加这里的整个 intent-filter 区块,并确保其中只有一个 data 字段-->
</activity>
</application>
</manifest>

添加混淆文件

如果您启用了混淆,请在您的 proguard-rules.pro 中加入如下代码。

-keep class com.growingio.** {
*;
}
-dontwarn com.growingio.**
-keepnames class * extends android.view.View
-keepnames class * extends android.app.Fragment
-keepnames class * extends android.support.v4.app.Fragment
-keepnames class * extends androidx.fragment.app.Fragment
-keep class android.support.v4.view.ViewPager{
*;
}
-keep class android.support.v4.view.ViewPager$**{
*;
}
-keep class androidx.viewpager.widget.ViewPager{
*;
}
-keep class androidx.viewpager.widget.ViewPager$**{
*;
}

如果您使用的AndRestGuard ,请在白名单中添加GrowingIO。

R.string.growingio*

API

初始化配置API

初始化配置API在Application中初始化SDK处使用。

API

默认值

是否必填

说明

setProjectId

无

是

项目ID。

setFlushInterval

15s

否

设置获取发送数据的事件间隔,默认15s

setCellularDataLimit

10MB

否

设置每天使用数据网络(2G、3G、4G)上传的数据量的上限,默认值10485KB(10MB)

getCellularDataLimit

无

否

设置每天使用数据网络(2G、3G、4G)上传的数据量的上限,默认值10485KB(10MB)

setDataSourceId

无

是

数据源ID。

srtURLScheme

无

是

设置URLScheme,是应用唯一标识。

setDebugMode

false

否

在local中输出采集日志。

setTestMode

false

否

实时发送数据,开启则不遵循移动网络

状态下数据发送大小默认 3M 限制以及

采集数据缓存30秒发送策略。

为了方便开发者查看日志,一般和

setDebugMode一起使用。

setChannel

无

否

设置App下载渠道。

setImeiEnable

true

否

为了海外应用市场上架应用,设置为

fasle则SDK不采集。

setAndroidIdEnable

true

否

为了海外应用市场上架应用,设置为

false则SDK不采集Android ID。

disableDataCollect

无

否

设置GDPR生效

运行时API

注意:GrowingIO 所有API 都需要在主线程调用。

​

​

setGeoLocation

设置经纬度,并在vst事件中发送,Android SDK暂时没办法自动获取GPS数据,如果您要采集GPS数据,需要在您的App每次获取完GPS数据之后,通过该API告知SDK。如果您不设置,我们默认使用用户IP的location。

clearGeoLocation

清空经纬度。

setChannel

保留原有设置渠道信息的方法,新增在运行时设置渠道信息。新增的接口无法保证所有数据都一定会带上渠道信息(虽然我们会通过重发机制进行保证,但是无法做到100%)。

disableDataCollect

遵守欧洲联盟出台的通用数据保护条例,用户不授权,不采集用户数据。

enableDataCollect

遵守欧洲联盟出台的通用数据保护条例,用户授权,采集用户数据。

示例代码:

// 得到 GrowingIO 实例后可以调用其中 API
IGrowingIO gio = GrowingIO.getInstance();
gio.setUserId("xiaowang");

常用API

设置登录用户ID

当用户登录应用后调用setUserId,上传登录用户ID。

参数名称

类型

是否必须

说明

userId

string

是

应用的登录用户ID。

代码示例:

//setuserId API调用示例
GrowingIO.getInstance().setUserId("xiaowang")

Tips:

如果您的App每次用户升级版本时无需重新登录的话,为防止用户本地缓存被清除导致的无法被识别为登录用户,建议在用户每次升级App版本后初次访问时重新调用上述setUserId方法。

清除登录用户ID

当用户退出登录后,调用clearUserId,清除已经设置的登录用户ID。

//clearUserId API原型和调用示例
GrowingIO.getInstance().clearUserId();

设置自定义事件和属性

发送一个自定义事件,在添加所需发送的事件代码之前,需要在打点管理用户界面配置事件及事件属性。

参数名称

类型

是否必须

说明

eventId

string

是

事件标识符。

eventLevelVariable

JSON Object

否

事件发生时所伴随的维度信息。

限制:非空,键值对个数限制小于等于100(eventLevelVariable.length()<=100);

eventLevelVariable内部不允许含有

JSONObject或者JSONArray;

key长度限制小于等于50,value长度限制小

于等于200,值不能为空字符串,也就是“”。

itemId

string

否

物品模型唯一标识属性,如"order_id"

itemKey

string

否

物品模型唯一标识属性的值,如"123456"

示例代码:

// track API调用示例一
IGrowingIO gio = GrowingIO.getInstance();
gio.track("registerSuccess");
​
// track API调用示例二 - 事件属性
IGrowingIO gio = GrowingIO.getInstance();
JSONObject jsonObject = new JSONObject();
jsonObject.put("gender", "male");
jsonObject.put("age", "21");
gio.track("registerSuccess", jsonObject);
​
// track API调用示例三 - 物品模型
IGrowingIO gio = GrowingIO.getInstance();
JSONObject jsonObject = new JSONObject();
String eventName = "payOrder";
eventVar.put("k1","v1");
eventVar.put("k2","v2");
String itemKey = "order_id";
String itemId = '123456';
gio.track(eventName, eventVar, itemId, itemKey);

设置用户属性

自定义用户属性,用于用户属性相关的分析,比如年龄、性别、会员等级等。

参数名称

类型

是否必传

说明

key

string

否

用户变量的标识符。

value

string

否

用户变量的值。

peopleVariables

JSON Object

否

限制:非空,键值对个数限制小于等于

100(jsonObject.length()<=100);

内部不允许嵌套含有JSONObject或者

JSONArray;

key长度限制小于等于50,value长度限制

小等于200,值不能为空串,也就是""。

代码示例:

//代码示例一
try {
GrowingIO.getInstance().setUserAttributes(new JSONObject().put("age", 54).put("gender", "male"));
} catch (JSONException e) {
e.printStackTrace();
}
//代码示例二
HashMap<String,Object> userAttr = new HashMap<>();
userAttr.put("age",54);
userAttr.put("gender","female");
GrowingIO.getInstance().setUserAttributes(userAttr);

发送自定义Page 事件 (数据采集SDK >=1.2.0)

参数名称

类型

是否必须

说明

pageName

string

是

page事件标识符。

/**
发送自定义Page事件
​
@param pageName : 页面名称, pageName为正常中英文数字组合的字符串, 长度<=1000, 请不要含有 "'|\*&[email protected]/', 等特殊字符
*/
IGrowingIO trackPage(String pageName);
​
//代码示例
GrowingIO.getInstance().trackPage("TrackTestPage");

加载了H5内嵌页SDK gio_hybrid_cdp.js的页面。自动采集H5(数据采集SDK >=1.2.0)

参数名称

类型

是否必须

说明

webView

WebView

是

WebView实例化后立刻调用

​
//代码示例
private void initWebView() {
mWebView = findViewById(R.id.web_view);
GrowingIO.getInstance().bridgeForWebView(mWebView);
mWebView.loadUrl("https://www.growingio.com");
}

需要在 webview 初始化后调用