# 常见问题

## 1、SDK 是否需要混淆？

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

## 2、DebugMode 中的 DEBUG\_ONLY 与 DEBUG\_AND\_TRACK 有什么区别？

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

## 3、事件名称和属性名称，是否可以直接用中文？

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

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

## 4、渠道信息应该放在哪里？

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

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

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

## 6、使用 eclipse 集成时，报 SensorsDataContentProvider 找不到?

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

```markup
  ...
  <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 内容。

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

  ...
```

## 8、在 Application  onCreate 中初始化 SDK 时，调用顺序

```
① 初始化 SDK

② registerSuperProperties 设置公共属性（如果不需要设置公共属性，忽略此步）

③ if 获取到用户的 注册 ID ，调用 login 传入 注册 ID 

④ enableAutoTrack 开启全埋点自动采集

⑤ trackFragmentAppViewScreen 开启 Fragment 页面浏览事件自动采集（如果不需要自动采集 Fragment 浏览页面事件，忽略此步）
```

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

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

## 10、fragment 页面浏览事件 $title 的设置

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

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

例：

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

## 11、神策插件与 SDK 适配版本

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

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

## 12、启动事件与退出事件 session 机制的详细说明

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