# 运行时API

GrowingIO SDK 为App提供了运行时调用的API，使用方法如下：

{% tabs %}
{% tab title="Java" %}

```java
// 得到 GrowingIO 实例后可以调用其中 API
GrowingIO gio = GrowingIO.getInstance();
gio.setUserId("登录用户ID");
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
val gio = GrowingIO.getInstance()
gio.userId = "登录用户ID"
```

{% endtab %}
{% endtabs %}

{% hint style="danger" %}
GrowingIO SDK 所有 API 都需要在主线程调用。
{% endhint %}

## 基础配置API

<table data-header-hidden><thead><tr><th>API</th><th>说明</th><th width="150">无埋点SDK版本支持</th><th>埋点SDK版本支持</th></tr></thead><tbody><tr><td>API</td><td>说明</td><td>无埋点SDK版本支持</td><td>埋点SDK版本支持</td></tr><tr><td>setGeoLocation</td><td>设置经纬度，并在 vst 事件中发送，Android SDK 默认不获取<code>GPS</code>数据，如果您要采集<code>GPS</code>数据，需要在您的App每次获取完<code>GPS</code>数据之后，调用过该<code>API</code>。经纬度设置为(0,0)，视为无效设置</td><td>ALL</td><td>ALL</td></tr><tr><td>clearGeoLocation</td><td>清空经纬度</td><td>ALL</td><td>ALL</td></tr><tr><td>setViewInfo</td><td><p>配置 view 的 Tag，标记 View ，并在 SDK 相关事件中发送 ，内容对应 <code>xPath</code> 中的 <code>obj</code></p><p>例如：在商品<code>ListView</code>添加购物车的场景中，每个商品<code>item</code>都含有一个加入购物车按钮，这时无法区分商品<code>item</code>与将它加入购物车按钮的一对一关系，此时调用此方法增加描述。</p><p>注意：适用于原有<code>v</code>字段含义不大，只关注描述的场景，使用此接口后<code>v</code>字段将不采集</p></td><td>ALL</td><td>-</td></tr><tr><td>setViewContent</td><td><p>配置 view 的 Tag，标记 View ，并在 GrowingIO相关事件中发送，内容对应 <code>xPath</code> 中的 <code>v</code></p><p>SDK默认不会采集ImageView的内容，为了能对不同的图片元素（ImageView）区分统计，需要对每个具有分析意义的图片元素（ImageView）添加描述。</p></td><td>ALL</td><td>-</td></tr><tr><td>setViewID</td><td><p>设置 View id ，配置之后对应 xPath 中的 view id，SDK将会使用Layout文件中的ID来识别一个元素。</p><p>如果部分元素在Layout文件中没有ID，建议在Layout文件中添加。</p><p>对于动态生成的元素，可以使用如下方法对它设置唯一的ID。</p><p>当您的应用界面改版时，可能会导致无法准确地统计已经圈选的元素。因此，对于应用中的主要流程涉及到的界面元素，建议您为它们设置固定的唯一ID，以保证数据的一致性。</p><ul><li>ID 只能设置为字母、数字和下划线的组合</li><li>如果在ViewGroup上设置ID的话，SDK会忽略他所有子元素的默认ID（就是写在xml文件里的）只会使用GrowingIO.setViewID设置的ID。</li><li>对于已经集成过旧版SDK并圈选过的应用，对某个元素设置ID后再圈选它，指标数值会从零开始计算，类似初次集成SDK后发版的效果，但不影响之前圈选的其它指标数据。如果不希望出现这种情况，请不要使用这个方法</li></ul></td><td>ALL</td><td>-</td></tr><tr><td>setChannel</td><td><ul><li><strong>&#x3C;2.6.5 版本</strong>： 先设置渠道信息，再发送数据 能够保证所有数据都一定会带上渠道信息。</li><li><strong>>=2.6.5 版本</strong>： 保留原有设置渠道信息的方法，新增在运行时设置渠道信息。新增的接口无法保证所有数据都一定会带上渠道信息（虽然我们会通过重发机制进行保证，但是无法做到100%）。</li></ul></td><td>ALL</td><td>ALL</td></tr></tbody></table>

## 数据采集API

<table data-header-hidden><thead><tr><th width="203">API</th><th>说明</th><th width="150">无埋点SDK版本支持</th><th>埋点SDK版本支持</th></tr></thead><tbody><tr><td>API</td><td>说明</td><td>无埋点SDK版本支持</td><td>埋点SDK版本支持</td></tr><tr><td>isDeeplinkUrl</td><td>校验链接URI是否满足GIO的格式，如"gio.ren"或".datayi.cn"结尾等</td><td>>=2.8.11</td><td>>=2.8.11</td></tr><tr><td>doDeeplinkByUrl</td><td>true 表示是GIO的deeplink链接，进行下一步判断， false 表示非GIO相关链接.参数callback不填则默认使用全局初始化时设置的callback</td><td>>=2.8.11</td><td>>=2.8.11</td></tr><tr><td>disableDataCollect</td><td>遵守欧洲联盟出台的通用数据保护条例，用户不授权，不采集用户数据</td><td>>=2.3.2</td><td>ALL</td></tr><tr><td>enableDataCollect</td><td>遵守欧洲联盟出台的通用数据保护条例，用户授权，采集用户数据</td><td>>=2.3.2</td><td>ALL</td></tr><tr><td>disable</td><td>GrowingIO停止采集</td><td>ALL</td><td>ALL</td></tr><tr><td>resume</td><td>GrowingIO恢复采集</td><td>ALL</td><td>ALL</td></tr><tr><td>stop</td><td>GrowingIO停止采集，可以不在主线程调用</td><td>ALL</td><td>ALL</td></tr><tr><td>setThrottle</td><td>是否节流发送（节流发送时imp不发送），内部实际调用 Configuration 中的同名方法，所以在初始化时候配置和运行时动态配置，效果一样。</td><td>ALL</td><td>-</td></tr><tr><td>setImp</td><td><code>imp</code>事件开关，<code>true</code> 为打开</td><td>ALL</td><td>-</td></tr><tr><td>disableImpression</td><td>不发送<code>imp</code></td><td>ALL</td><td>-</td></tr><tr><td>ignoredView</td><td><p>忽略配置的 View ，不采集用户数据。</p><p>如果您需要忽略某些特殊内容，比如倒计时元素或涉及隐私的内容，可以使用此接口。</p></td><td>ALL</td><td>-</td></tr><tr><td>ignoreFragment</td><td>不采集配置的 Fragment 页面浏览事件（<code>page</code>），不将<code>Fragment</code>视作一个页面，可以理解成当作为一个可点击的view。自动采集用户行为事件（<code>clck、chng</code>）和元素展示事件（<code>imp</code>）。</td><td>ALL</td><td>-</td></tr><tr><td>ignoreFragmentX</td><td>支持 AndroidX ， 功能同 ignoreFragment。</td><td>>=2.6.6</td><td>-</td></tr><tr><td>ignoreViewImp</td><td><p>忽略配置的 View ，不采集用户元素浏览数据。</p><p>如果您需要忽略某些大量的 数据，比如弹幕，可以使用此接口。</p></td><td>>=2.6.7</td><td>-</td></tr><tr><td>setPageName</td><td><p>设置页面别名，有些时候，对于完成某个功能的页面，统计时可能需要进一步细分。 比如，对于展示商品列表的页面，需要区分衣物类商品，以及食品类商品的两种列表的访问量。</p><p>​</p><p>注意</p><ol><li>必须在该<code>Activity</code>的<code>onCreate</code>方法中完成该属性的赋值操作。</li><li>页面别名只能设置为字母、数字和下划线的组合。</li><li>为查看数据方便，请尽量对iOS和安卓的同功能页面取不同的名称。</li></ol></td><td>ALL</td><td>-</td></tr><tr><td>setPageNameX</td><td>支持 AndroidX ， 功能同 setPageName。</td><td>>=2.6.6</td><td>-</td></tr><tr><td>getSessionId</td><td>得到 session id</td><td>ALL</td><td>ALL</td></tr><tr><td>getDeviceId</td><td>获取设备id，对应数据采集的<code>u</code>字段，又称为<code>匿名用户id</code>，用来定义一台设备，SDK 自动生成。</td><td>ALL</td><td>ALL</td></tr><tr><td>​trackBanner</td><td>设置所有广告图对应的广告内容描述，内容描述需要跟广告的顺序相同。</td><td>ALL</td><td>-</td></tr></tbody></table>

<table data-header-hidden><thead><tr><th>​trackBanner</th><th>设置所有广告图对应的广告内容描述，内容描述需要跟广告的顺序相同。</th><th width="150">ALL</th><th>-</th></tr></thead><tbody><tr><td>trackEditText</td><td><p>SDK 默认不采集用户输入框的内容，设置以后，采集除了密码以外的输入框文本内容。​​</p><p>当这个输入框失去焦点（包括应用退到后台），且输入框内容跟获取焦点前相比发生变化时，输入框内文字会被发送回GrowingIO。</p><p>注意：对于密码输入框，即便标记为需要采集，SDK也会忽略，不采集它的数据。</p></td><td>ALL</td><td>-</td></tr><tr><td>trackFragment</td><td><p>如果APP初始化时候，没有设置 <code>trackAllFragment</code> 即不采集全部 <code>Fragment</code>，可以选择性采集指定 <code>Fragment</code>，设置之后 sdk 将监听 <code>Fragment</code> 的各个生命周期， 采集相关用户行为数据。</p><p>请在 <code>new Fragment</code> 的时候调用此方法。</p></td><td>ALL</td><td>-</td></tr><tr><td>trackFragmentX</td><td><p>支持 AndroidX ， 功能同 trackFragment。</p><p>请在 <code>new Fragment</code> 的时候调用此方法。</p></td><td>>=2.6.6</td><td>-</td></tr><tr><td>trackWebView</td><td>采集 <code>WebView</code> 事件，默认采集，您可以在不全量采集<code>WebView</code>的时候，定制采集某个<code>WebView</code></td><td>>=2.8.22</td><td>-</td></tr><tr><td>trackX5WebView</td><td>采集 X5WebView 事件，默认采集</td><td>&#x3C;2.6.0</td><td>-</td></tr><tr><td>setTabName</td><td>如果您有某些View动态添加到ViewTree中并且在父容器中的位置不固定（例如常见的多Fragment实现的Tab切换），请给每个View设置ID来辅助统计</td><td>ALL</td><td>-</td></tr><tr><td>setImeiEnable</td><td>设置为 false 则 SDK 不采集 <code>imei，</code>适用于<strong>海外应用市场</strong>上架的应用。</td><td>>=2.7.8</td><td>>=2.7.8</td></tr><tr><td>setAndroidIdEnable</td><td>设置为 false 则 SDK 不采集 <code>androidId</code> ,适用于<strong>海外应用市场</strong>上架的应用。</td><td>>=2.7.8</td><td>>=2.7.8</td></tr><tr><td>setGoogleAdIdEnable</td><td>设置为 false 则 SDK 不采集 <code>GoogleAdId</code> ,适用于<strong>海外应用市场</strong>上架的应用。</td><td>>=2.7.8</td><td>>=2.7.8</td></tr><tr><td>setOAIDEnable</td><td>国内<a href="http://www.msa-alliance.cn/col.jsp?id=120">移动安全联盟MSA</a> 联合各大手机制造商推出了 OAID ， 作为唯一广告标识符。<strong>Android 2.8.5</strong> 新增。</td><td>>=2.8.5</td><td>>=2.8.5</td></tr><tr><td>bridgeForWebView</td><td>提供原生的 WebView bridge供hybrid调用, 支持hybrid事件发送</td><td>-</td><td>>=2.9.0</td></tr><tr><td>bridgeForX5WebView</td><td>提供腾讯X5内核的WebView bridge供hybrid调用, 支持hybrid事件发送</td><td>-</td><td>>=2.9.0</td></tr><tr><td>bridgeForUcWebView</td><td>提供UC内核的WebView bridge供hybrid调用, 支持hybrid事件发送</td><td>>=2.9.13</td><td>>=2.9.13</td></tr></tbody></table>
