神策SDK接入说明

 一、Java侧接入说明

简介

https://manual.sensorsdata.cn/sa/latest/java-sdk-1573929.html

快速开始

使用 Maven 集成

<dependencies>
<!-- 引入神策分析 SDK -->
<dependency>
    <groupId>com.sensorsdata.analytics.javasdk</groupId>
    <artifactId>SensorsAnalyticsSDK</artifactId>
    <version>3.4.5</version>
</dependency>
</dependencies>

引入maven仓库修改后的sdk
<dependency>
    <groupId>com.navinfo.autoai</groupId>
    <artifactId>autoai-tracking-sdk-java</artifactId>
    <version>1.1.0-SNAPSHOT</version>
</dependency>

接口地址

http://172.19.230.102/upload?project="应用编码"

在 Spring 框架里面初始化 SDK

@Configuration
public class SensorsConfig {

    //上报地址
    private static String url = "http://172.19.230.102/upload";

    @Resource
    RedisService redisService;



    @Bean(destroyMethod = "shutdown")
    public ISensorsAnalytics init() {
        //网络批量发送模式(此模式在容器关闭的时候,如果存在数据还没有发送完毕,就会丢失未发送的数据!!!)
        ISensorsAnalytics sa = new SensorsAnalytics(
                new FastBatchConsumer(url, false, 100, new Callback() {
                    @Override
                    public void onFailed(FailedData failedData) {
                        //改成写redis,配置定时任务每2小时清一次redis
                        redisService.lRightPush("FailedData-list", failedData);
                    }
                })
        );

        //设置公共属性,以后上传的每一个事件都附带该属性服务器属性
        SuperPropertiesRecord propertiesRecord = null;
        try {
            propertiesRecord = SuperPropertiesRecord.builder()
                    .addProperty("$os",System.getProperties().getProperty("os.name") )
                    .addProperty("$os_version", System.getProperties().getProperty("os.version"))
                    .addProperty("$app_code", "smartCarLife")
                    .build();
        } catch (InvalidArgumentException | UnknownHostException e) {
            return sa;
        }
        sa.registerSuperProperties(propertiesRecord);
        return sa;
    }

}

SensorsConfig.java

 

url:数据上报地址

onFailed:接口异常回调接口

SuperPropertiesRecord:公共属性,可以省略

普通事件上报(track)

(1)页面配置:

参考元数据管理原型

(2)代码接入

EventRecord firstRecord = EventRecord.builder()
        .setDistinctId("cookieId").isLoginId(false)
        .setEventName("test_event")
        .addProperty("$time", Calendar.getInstance().getTime())
        .addProperty("project", "smart车生活")
        .addProperty("$token", "abcdefg")
        .addProperty("Channel", "")
        .addProperty("app_version", "1.0")
        .addProperty("city", city)
        .addProperty("province", province)
        .addProperty("$track_no", IdGenerator.getSn("J"))  
        .build();
sa.track(firstRecord);


EventRecord firstRecord = EventRecord.builder()
        .setDistinctId("registerId").isLoginId(true)
        .setEventName("test_event")
        .addProperty("$time", Calendar.getInstance().getTime())
        .addProperty("project", "smart车生活")
        .addProperty("token", "abcdefg")
        .addProperty("$track_no", IdGenerator.getSn("J"))
        .build();
sa.track(firstRecord);

必传字段:

DistinctId :已登录用户传系统用户id;未登录用户上传匿名id;

   匿名由移动端或者web通过请求头传入,请求头名称自定义,例如"Original-Id"、

"cookieId"都行

isLoginId:Boolean类型

EventName: 事件名称对应元数据管理的事件编码,建议英文有意义字符串

track_no:临时必传,神策的track_id字段为Integer类型,长度不够,暂时增加这个字段

自定义字段字段:

  根据事件属性上传对应字段,例如

.addProperty("$project", "smart车生活")
.addProperty("$token", "abcdefg")

注册登录——用户绑定(trackSignUp)

sa.trackSignUp(String.valueOf(registerId), request.getHeader(cookieId),
        (Map<String, Object>) new HashMap<>().put("$track_no", IdGenerator.getSn("J")));

目的 :registerId和cookieId绑定

触发时机:用户登录时候

用户维护(profileSet)

UserRecord userRecord = UserRecord.builder().setDistinctId(String.valueOf(registerId)).isLoginId(Boolean.TRUE)
        .addProperty("name", userPO.getUserName())
        .addProperty("phone", userPO.getPhone())
        .addProperty("$track_no", IdGenerator.getSn("J"))
        .addProperty("$signup_time", userPO.getCreateTime() == null ?
                LocalDateTime.now().toString() : userPO.getCreateTime().toString())
        .build();
sa.profileSet(userRecord);

目的 :更新用户资料,覆盖更新

触发时机:用户注册和用户资料更新的时候触发

首次用户更新(profileSetOnce)

应该暂时用不到,先不写

问题解答

1.属性名称是否必须加$?

属性名称带$代表是预制属性,不需要在元数据管理页面去配置就能使用的;

当然目前没配置的属性也能使用,还没加检查。

2、目前java服务侧需要接什么业务?

用户注册事件

用户登录事件

其他待定

3、java服务侧需要记录设备id、设备来源、设备版本号、app版本本号怎么办?

服务侧的通用属性只能记录服务端通用的信息;

移动端的信息尽量通过请求头传递过来。

4、元数据怎么配置?

参考文档:先参考原型(待补充)

5 、整体流程如何?

培训下

更新记录:

20220923 移除手动填写track_no字段的要求,系统会根据时间和track_id自动生成

二、WEB侧接入说明

简介

https://manual.sensorsdata.cn/sa/latest/web-js-sdk-7548149.html

三、安卓侧接入说明

参考资料:https://manual.sensorsdata.cn/sa/latest/android-sdk-1573907.html

更新记录:

20220923 移除手动填写track_no字段的要求,系统会根据时间和track_id自动生成

1. 集成神策分析 SDK

1.1. 引入插件

project 级别的 build.gradle 文件中添加 android-gradle-plugin2 依赖:

 buildscript {
    repositories {
                mavenCentral()
        jcenter()
    }
    dependencies {
                // 添加 gradle 3.2.0+ 依赖
        classpath 'com.android.tools.build:gradle:3.5.3'
        // 添加神策分析 android-gradle-plugin2 依赖
        classpath 'com.sensorsdata.analytics.android:android-gradle-plugin2:3.4.9'
    }
}

Android Plugin 需要 Android Gradle Plugin 3.2.0+,否则会导致元素点击事件和 Fragment 的页面浏览事件无法触发,App 和 H5 打通功能受影响。

插件与 SDK 版本依赖关系:

插件版本

可用 SDK 版本范围

v3.4.0 <= 插件版本

v5.4.3 <= SDK 版本

v3.3.9 == 插件版本

v5.4.2 == SDK 版本

v3.3.4 <= 插件版本 <= v3.3.8

v5.1.0 <= SDK 版本 <= v5.4.1

v3.2.12 <= 插件版本 <= v3.3.3

v4.3.2 <= SDK 版本 <= v5.4.1

v3.2.4 <= 插件版本 <= v3.2.11

v4.0.7 <= SDK 版本 <= v5.4.1

v3.0.0 <= 插件版本 <= v3.2.1

v3.0.4 <= SDK 版本 <= v5.4.1

1.2. 引入 SDK

在主 modulebuild.gradle 文件中应用 com.sensorsdata.analytics.android 插件、添加 SDK 依赖:

apply plugin: 'com.android.application'
// 应用 com.sensorsdata.analytics.android 插件
apply plugin: 'com.sensorsdata.analytics.android'

dependencies {
   // 添加 Sensors Analytics SDK 依赖
   implementation 'com.sensorsdata.analytics.android:SensorsAnalyticsSDK:6.4.4'
}
  • Android SDK 要求最低系统版本为 API 14(Android 4.0)

  • 目前,Android SDK ( aar 格式) 大小约为 800 KB

  • Android SDK 在 AndroidManifest.xml 中注册了可能使用到的权限,具体的权限和用途可参考权限配置说明

2.初始化神策分析 SDK

2.1. 获取项目数据接收地址

数据接收地址:http://172.19.230.102/upload

2.2. 初始化 SDK

String SA_SERVER_URL = "数据接收地址";

// 初始化配置
SAConfigOptions saConfigOptions = new SAConfigOptions(SA_SERVER_URL);
// 开启全埋点
saConfigOptions.setAutoTrackEventType(SensorsAnalyticsAutoTrackEventType.APP_CLICK |
                SensorsAnalyticsAutoTrackEventType.APP_START |     
                SensorsAnalyticsAutoTrackEventType.APP_END |       
                SensorsAnalyticsAutoTrackEventType.APP_VIEW_SCREEN)
                                //开启 Log
                                .enableLog(true);
/**
 * 其他配置,如开启可视化全埋点
 */
// 需要在主线程初始化神策 SDK
SensorsDataAPI.startWithConfigOptions(this, saConfigOptions);

延迟初始化 SDK 会导致全埋点采集不准确和可视化全埋点、点击分析功能异常,若 App 有合规需求,可参考 Android 合规步骤

3. SDK 基本配置

3.1. 开启全埋点

初始化 SDK 时,setAutoTrackEventType() 方法可以配置需要开启的全埋点类型。全埋点其他配置,可参考全埋点 (Android)

3.2. 设置事件公共属性

对于所有事件都需要添加的属性,初始化 SDK 后,可以通过 registerSuperProperties() 将属性注册为公共属性。设置方法如下:

 // 将应用名称作为事件公共属性,后续所有 track() 追踪的事件都会自动带上 "AppName" 属性
try {
    JSONObject properties = new JSONObject();
    properties.put("AppName", getAppName(this));
    SensorsDataAPI.sharedInstance().registerSuperProperties(properties);
} catch (JSONException e) {
    e.printStackTrace();
}

公共属性会保存在 App 本地缓存中。可以通过 unregisterSuperProperty() 删除一个公共属性,或使用 clearSuperProperties() 删除所有已设置的事件公共属性。

3.3. 用户登录

当用户注册成功或登录成功时,需要调用 SDK 的 login() 方法:

 SensorsDataAPI.sharedInstance().login("登录 ID");

为了准确记录登录用户的行为信息,建议在以下时机各调用一次用户登录方法:

· 用户在注册成功时

· 用户登录成功时

· 已登录用户每次启动 App 时

3.4. 记录激活事件

可以调用 trackAppInstall() 方法记录激活事件,多次调用此方法只会在第一次调用时触发激活事件:

 if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.M){
    if (ActivityCompat.checkSelfPermission(this, "android.permission.READ_PHONE_STATE") != PackageManager.PERMISSION_GRANTED) {
        // 6.0 以上,无权限时,先申请 READ_PHONE_STATE 权限。
        ActivityCompat.requestPermissions(this, new String[]{"android.permission.READ_PHONE_STATE"}, 100);
    } else {
        // 6.0 以上,有权限时,直接触发激活事件。
        trackAppInstall();
    }
} else {
    // 6.0 以下,无须申请权限,直接触发激活事件。
    trackAppInstall();
}

在权限回调的 onRequestPermissionsResult() 方法中,申请权限结果回调无论申请权限成功失败,都要调用 trackAppInstall():

 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 100) {
        // 申请权限结果回调时(无论申请权限成功失败),都需要触发激活事件。
        trackAppInstall();
    }
}


/**
 * 记录激活事件
 */
private void trackAppInstall() {
    try {
        JSONObject properties = new JSONObject();
                //这里的 DownloadChannel 负责记录下载商店的渠道,值应传入具体应用商店包的标记。如果没有为不同商店打多渠道包,则可以忽略该属性的代码示例。
        properties.put("DownloadChannel", "XXX");
        // 触发激活事件
                // 如果您之前使用 trackInstallation() 触发的激活事件,需要继续保持原来的调用,无需改为 trackAppInstall(),否则会导致激活事件数据分离。
        SensorsDataAPI.sharedInstance().trackAppInstall(properties);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  1. 若用原记录的激活事件名不是 $AppInstall,需要使用虚拟事件将原激活事件和 $AppInstall 合并分析数据,具体咨询神策技术支持

  2. 更多关于渠道追踪功能的说明,请参考渠道追踪

3.5. 代码埋点追踪事件

SDK 初始化后,可以通过 track() 方法追踪用户行为事件,并为事件添加自定义属性:

 try {
    JSONObject properties = new JSONObject();
    properties.put("ProductID", 123456);                    // 设置商品 ID
    properties.put("ProductCatalog", "Laptop Computer");    // 设置商品类别
    SensorsDataAPI.sharedInstance().track("BuyProduct", properties);
} catch (JSONException e) {
    e.printStackTrace();
}

事件名和事件属性的格式规范,请参考数据格式

4. SDK 可选配置

4.1. 打通 App 与 H5

版本要求

  • Android SDK v4.0.8 及以上版本

  • Android 插件 v3.2.4 及以上版本

初始化 SDK 时,进行如下配置,即可开启 App 打通 H5 功能

 // 开启 App 打通 H5
saConfigOptions.enableJavaScriptBridge(boolean isSupportJellyBean);

isSupportJellyBean:是否支持 API level 16 及以下的版本。打通功能通过 WebViewaddJavascriptInterface() 方法实现,但在 API level 16 及以下的版本,addJavascriptInterface() 方法有安全漏洞,因此请谨慎使用。

打通功能需要 App 和 H5 同时开启才可以生效,H5 开启方法请参考 App 打通 H5

X5 内核打通,在初始化后添加 SensorsDataAPI.sharedInstance().showUpX5WebView(WebView,true);

UC 内核的 WebView 除了上述代码,还需要在插件配置中添加:addUCJavaScriptInterface = true 这个选项,在主 module 级别的 build.gradle 文件中添加我们的扩展如下;

sensorsAnalytics{
        addUCJavaScriptInterface=true
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值