SDK接入指南(Android)

为确保安装成功,请按照以下步骤进行SDK安装

1. 导入SDK

AndroidStudio 接入方案: 在您的app目录下 build.gradle 文件的对应位置添加 compile 字段

{
    compileSdkVersion ...
    buildToolsVersion ...
    ...
}

dependencies {
    ...
    compile 'com.growingio.android:vds-android:latest.release@aar'
}

Eclipse 接入方案: 点击 下载最新版本的SDK,并将下载的最新的包放在您的libs目录下。在Eclipse中右键工程根目录,在弹出菜单中选择Properties->Java Build Path -> Libraries, 点击Add External JARs...选择您刚下载的jar文件,然后在AndroidManifest.xml文件中添加INTERNETACCESS_NETWORK_STATE权限。

2. 添加URL Scheme

把URL Scheme添加到您的项目,以便我们唤醒您的程序,进行圈选。
URL Scheme获取方式有两种

  1. 添加新产品:登录官网 -> 点击新建,选择添加新产品 -> 选择添加Android应用 -> 在第二段“添加URLScheme”中标黄字体。
  2. 现有产品:登录官网 -> 右上角点击用户头像 -> 点击“项目管理” -> 点击左侧的“应用管理” -> 找到对应产品的URL Scheme。

URL Scheme的格式是growing.xxxxxxxxxxxxxxxx

将该产品的URL Scheme添加到您的AndroidManifest.xml中的LAUNCHER Activity

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>

    <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>
</activity>
请添加一整个intent-filter区块,并确保其中只有一个URL Scheme

3. 初始化SDK

请将以下 GrowingIO.startTracingGrowingIO.setScheme加在您的ApplicationonCreate 函数中

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        GrowingIO.startTracing(this, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        GrowingIO.setScheme("growing.xxxxxxxxxxxxxxxx");
    }

}

其中GrowingIO.startTracing第一个参数为 Context 对象,第二个参数为对应的项目ID。GrowingIO.setScheme的参数是您的URL Scheme。加入成功后您便可以进行编译了。

请确保将代码添加在上面描述的位置,添加到其他函数中可能导致数据不准确。

4. 代码混淆

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

-keep class com.growingio.android.sdk.** {
    public *;
}
-dontwarn com.growingio.android.sdk.**

5. 重要配置项

渠道来源统计

要加入渠道来源统计,请在AndroidManifest.xml加入配置项

<meta-data
    android:name="com.growingio.android.GConfig.Channel"
    android:value="XXX应用商店"/>

或者调用

GrowingIO.getInstance().setChannel("XXX应用商店");

采集H5页面数据

如果您在App内嵌入了WebView,可以调用下面的接口来采集页面内数据:

GrowingIO.trackWebView(WebView view, WebChromeClient client);

请在第一次调用WebView.loadUrl()之前调用,如果您没有自定义的WebChromeClient第二个参数可以传空值。调用接口后请不要再使用WebView.setWebChromeClient以免覆盖SDK的设置, SDK会负责调用您的WebChromeClient

如果您使用了X5内核的WebView,请使用以下接口:

GrowingIO.trackX5WebView(WebView view, WebChromeClient client);

采集Banner数据

如果您的应用通过ViewPager实现了Banner,请在ViewPager创建时(包括动态创建)调用下面的接口来采集数据。

GrowingIO.getInstance().trackBanner(View viewPager, List<String> bannerDescriptions)

其中List<String> bannerDescriptions为所有banner的字符串描述。

至此集成完毕。您需要在【添加新产品】页面进行检测并安装。安装成功后您可以在您的App中激活SDK,进行数据定义。具体的激活和圈选教程请看 移动端直接圈选

6. 其他配置项

自定义维度

GrowingIO的数据分析工具提供了例如“应用版本”,“渠道”,“城市”,“设备型号”等等这些通用维度。但在使用过程中,有时无法满足用户对特定数据维度的分析要求。

为了能够让数据分析变得更加的灵活,我们提供了自定义维度的接口,使用者可以对各种对象设置属性。

这些属性在作图时,将表现为维度。

用户属性

用户属性只能用来表示登录用户本身的属性,至少包括用户ID。

根据需求,可以用来指定用户的各种属性

  1. 自然属性,比如性别、出生年月等。
  2. 账户属性,比如等级、类型标签等。
  3. 行为特征,比如是否有过购买记录之类。

用户属性被称为CS字段,最多支持十个,从CS1到CS10,接口如下:

GrowingIO growingIO = GrowingIO.getInstance();
growingIO.setCS1("CS1的key", "CS1的value");
growingIO.setCS2("CS2的key", "CS2的value");
...
growingIO.setCS10("CS10的key", "CS10的value");

在下面的例子中,总计上传5个用户属性,分别是:

CS1: user_id:100324
CS2: company_id:943123
CS3: user_name:张溪梦
CS4: company_name:GrowingIO
CS5: sales_name:销售员小王

private void setGrowingIOCS() {
    GrowingIO growingIO = GrowingIO.getInstance();
    growingIO.setCS1("user_id", "100324");
    growingIO.setCS2("company_id", "943123");
    growingIO.setCS3("user_name", "张溪梦");
    growingIO.setCS4("company_name", "GrowingIO");
    growingIO.setCS5("sales_name", "销售员小王");
}

CS字段设置条件和限制

  1. CS 字段不能是和用户没有直接关系的属性,比如不能是订单 ID,商品 ID 等。

  2. CS1 字段:在 GrowingIO 系统中用于识别注册用户的身份,因此 CS1 的 value 必须填写用户的唯一身份标示 ID

  3. CS2 字段:在 GrowingIO 系统中用于识别 SaaS 客户的租户,因此所有的 SaaS 用户必须填写租户的唯一身份标示 ID,非 SaaS 用户不做限定。

  4. 对于未登录用户,不要设置任何CS字段。

  5. 如果没有用到所有的CS字段,剩下的可以不设置。

  6. 同一个CS字段,必须保持在各个平台意义相同

CS1字段设置时机

基本原则

  1. 当App使用者的登录状态改变时设置CS1字段的值
  2. 设置后,在下一次任意Activity.onResume被调用时,新的CS1字段的值才会被发送
  3. 在CS1字段的值被发送前,重复设值会导致新的值取代旧的,旧值会被丢弃

用户手动登录

  1. 如果有多个登录入口,在每一个入口登录成功后,都需要调用GrowingIO.setCS1来设置用户的唯一标识
  2. 如果有第三方登录,成功登录后需要调用GrowingIO.setCS1方法

自动登录:App启动时,自动登录或者用户默认是登录状态,也需要调用GrowingIO.setCS1方法

注册:有的App注册成功后,默认登录,这种情况下也需要调用GrowingIO.setCS1方法

退出:退出登录时,需要把CS1字段置空,传""或者null都可以

其他CS字段遵循相似的设置时机

在上传成功之后,请联系在线客服,我们会为您配置并且激活相应的属性字段。

页面属性

在安卓应用中,页面指的是Activity

对于完成多个功能的Activity,您可以给不同功能分别设置不同的PageGroup用来辅助区分Activity

页面属性被称为PS字段,每个PageGroup最多支持6个PS字段,从PS1到PS6,接口如下:

GrowingIO.setPageGroup(Activity activity, String name);
GrowingIO.setPS1(Activity activity, String property);
GrowingIO.setPS2(Activity activity, String property);
...

我们以商品详情页为例详细说明它的用法。

您可以将商品的类别,尺码、颜色、生产厂商等信息设置为PS字段,从而更加灵活的分析用户行为。

如,定义产品详情页“Clothing”为一个PageGroup,并上传4个页面属性,分别是:
PS1:商品ID:1234567
PS2:商品名称:运动T-shirt
PS3:商品尺码:M
PS4:商品颜色:蓝色

public class ProductInfoActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       GrowingIO growingIO = GrowingIO.getInstance();
       growingIO.setPageGroup(this, "Clothing");
       growingIO.setPS1(this, "1234567");
       growingIO.setPS2(this, "运动T-shirt");
       growingIO.setPS3(this, "M");
       growingIO.setPS4(this, "蓝色");
    }
}

PS字段设置条件和限制

  1. 页面属性接口必须在ActivityonCreate方法中调用

  2. 请务必设置PageGroup后再设置各个PS字段

  3. 如果没有用到所有的PS字段,剩下的可以不设置。

  4. 除了页面本身外,在商品详情页上面所有的界面元素的行为,包括浏览和点击等,都会和这些页面属性建立关联。

在上传成功两小时后,您需要在「项目管理-项目配置-CS 配置中」进行字段配置和激活,配置成功后便可开始使用 CS 字段进行分析。配置过程请参考 属性数据(CS)上传配置文档

设置图片内容

SDK默认不会采集ImageView的内容,如果您需要区分不同的ImageView可以使用contentDescription来标记:

View.setContentDescription(CharSequence contentDescription);

忽略元素

如果您需要忽略某些特殊内容,比如倒计时元素或涉及隐私的内容,可以使用该功能。

GrowingIO.ignoreView(View view)

设置ActivityGroup

如果您使用了ActivityGroup并且每个子Activity的显示顺序是动态的,请给每个Activity的DecorView设置ID来辅助统计

ViewGroup container = (ViewGroup) findViewById(R.id.activity_container);
View tabDecor = getLocalActivityManager().startActivity("ProductTabActivity",
       new Intent(this, ProductTabActivity.class)).getDecorView();
container.addView(tabDecor);

GrowingIO.setTabName(tabDecor, "ProductTabActivity");

动态添加View

如果您有某些View动态添加到ViewTree中并且在父容器中的位置不固定(例如常见的多Fragment实现的Tab切换),请给每个View设置ID来辅助统计

View content = getLayoutInflater().inflate(R.layout.content_view, container, false);

GrowingIO.setTabName(content, "MyContent");

自定义点击事件

如果您有自定义的控件重写了ViewonTouchEvent方法来判断和处理点击事件,请在每次触发点击事件时调用:

GrowingIO.setPressed(View view);

results matching ""

    No results matching ""