常见问题

最后更新于:2019-11-13 17:55:23

1. SDK 是否需要混淆?

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

2. DebugMode 中的 DEBUG_ONLY 与 DEBUG_AND_TRACK 有什么区别?

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

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

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

事件属性的 value 支持的类型为:String 、Number、JSONArray 、Boolean 、Date 。

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>
  ...

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

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

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

  ...

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

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

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

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

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

例:

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

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

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

插件版本 SDK 版本
1.X 1.X
2.X 2.X
3.X 3.X

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

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

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

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

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

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

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