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 初始化后调用