1. SDK 是否需要混淆?

由于 SDK 本身就是开源的, 如果你们没有对 SDK 的核心逻辑做修改,不建议混淆。再加上 SDK 中有部分类和接口会被 H5 中的 JavaScript 调用,如果混淆,这部分代码会被混淆掉。

2. DebugMode 中的 DEBUG_ONLYDEBUG_AND_TRACK 有什么区别?

DEBUG_ONLY 模式下,同步数据时,服务端只做校验,不会真正的导入数据。 而在 DEBUG_AND_TRACK 模式下,服务端校验并且会导入数据。

3. 事件名称和属性名称,是否可以直接用中文?

event 和 properties 的名称必须是合法的变量名,即不能以数字开头,且只包含:大小写字母、数字、下划线和 $。

事件属性的 value 支持的类型为:StringNumberJSONArrayBooleanDate

4. 渠道信息应该放在哪里?

profile 里面的渠道使用用户第一次启动时带上的渠道信息,记录用户是从哪里来的,这样在以后的事件分析里就可以看到不同渠道来的用户的情况。不太建议每个事件中都放入当前渠道,因为在 app 中不像 web 一样渠道更新频繁

5. 在发送事件的时候,某些情况下,有的属性值没有,是建议为空还是不带上这个属性?

不带上,或者为 null,效果一样的。

6. 使用 eclipse 集成时,报 SensorsDataContentProvider 找不到?

eclipse 不能 merge AndroidManifest.xml 文件,需要在 AndroidManifest <application> 标签中下加入以下配置:

...
<application>
	<provider
		android:name="com.sensorsdata.analytics.android.sdk.SensorsDataContentProvider"
		android:authorities="您项目的包名.SensorsDataContentProvider"
		android:enabled="true"
		android:exported="true" />
	<meta-data
		android:name="com.sensorsdata.analytics.android.MainProcessName"
		android:value="您项目的包名" />
	...
</application>
...
XML

7. $title 字段采集不对应 ?

如果没有使用到 ActionBar 可以在 Manifest 中给相应的 Activity 设置 label ,这样 $title 字段采集的内容 就会是你设置的 label 内容。

<activity 
	android:label="商品详情页" 
	android:name=".DemoActivity" 
	android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
...
XML

8. 初始化 SDK 时出现 javax.net.ssl.SSLHandshakeException:Invalid input to ASCII

项目的数据接收地址包含了 ‘_’,在 https 中报错了

9. Fragment 页面浏览事件 $title 的设置

Fragment 页面浏览事件 $title 属性默认与所在 Activity$title 采集规则一致。

在 SDK 2.0.0 及以上的版本可使用 @SensorsDataFragmentTitle 注解设置 Fragment$title 属性的值。

例:

@SensorsDataFragmentTitle(title = "HomeFragment")
public class HomeFragment extends Fragment {
...
}
JAVA

10. 神策插件与 SDK 适配版本

神策插件 android-gradle-plugin2 版本与 SDK 适配版本,如下:

插件版本SDK 版本
1.X1.X
2.X2.X
3.X3.X

11. 启动事件与退出事件的详细说明

神策 SDK 为了应对多进程、强杀等场景,在 2.0.3 版本加入了 30 秒的 session 机制,用户退出 App 到后台 30 秒的时候,才会触发退出事件,
之后再启动 App,才会触发启动事件,用户如果在 30 秒内打开了 App,那么是没有对应的退出事件与启动事件的。

另外,如果在退出 App 到后台 30 秒内,进程还没有被杀掉,那么此时会触发退出事件并尝试上报,如果进程被杀掉了,那么退出事件会在下一次启动时补发。所以在查看数据时,
一般退出事件比启动事件少。

12. 事件的动态公共属性与静态公共属性的区别

SDK 中的 动态公共属性 与 静态公共属性 是为了满足不同的场景而设置的。公共属性适用一直于不变的属性,比如我可以设置一个公共属性为应用名称;动态公共属性适用于经常变化的属性,比如我可以设置一个用户是否登录的属性。
而在 SDK 中,事件优先级从低到高依次是:预制属性 < 静态公共属性 < 动态公共属性 < 自定义事件属性,当命名相同时,优先级高的会覆盖优先级低的属性值,所以动态公共属性可以覆盖静态公共属性的值

13. 预置事件增加自定义属性说明

$AppStartApp 启动),$AppEndApp 退出),只能通过增加 公共属性 增加自定义属性。
$AppViewScreenApp 浏览页面)Android 端全埋点采集的事件通过 ScreenAutoTracker 接口增加自定义属性;通过代码 track$AppViewScreen 事件,可参考文档 trackViewScreen 方法。
$AppClick(App 元素点击)Android 端全埋点采集的事件通过 setViewProperties 接口增加自定义属性;通过代码 track$AppClick 事件,可参考此文档:trackViewAppClick 方法。