1. 如何判断成功调用trackAppInstall接口

首先需要您们开发人员在您们的 App 中 ,调用 trackAppInstall 接口 ,用来采集 $AppInstall 事件。iOS 和 Android 文档: App 渠道追踪

注:

(1)如果使用精准匹配,iOS 端需要开启获取 IDFA 权限(您的 App 里需要引入 AdSupport 库);Android 端需要在代码里开启获取 IMEI 权限(即 Android SDK 文档中动态申请 android.permission.READ_PHONE_STATE )。

(2)不可以直接在 trackAppInstall 接口中给 utm_soure 等 utm 属性赋值。如果添加了这些赋值代码,App 激活时,就不会进行渠道匹配,而是使用代码中填写的渠道信息设置属性值。

(3)可把渠道包信息,直接设置为 $AppInstall 事件的属性,比如渠道属性 downloadChannel:huawei。

对于 Android 可以给应用商店上传带有标记的渠道包( apk 包),便于区分每个渠道的下载量。可以使用 DownloadChannel 来记录下载商店的渠道。这里 DownloadChannel 只是一个示例,如果需要多个字段来标记渠道包,请按业务实际需要添加。


XML

AndroidManifest.xml 中:

<meta-data android:name="YOUR_DOWNLOAD_CHANNEL" android:value="应用宝" />
CODE

1.1. Android 端

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

JAVA

// 记录激活事件,无自定义属性
try {
	// 触发激活事件
    SensorsDataAPI.sharedInstance().trackAppInstall();
} catch (Exception e) {
    e.printStackTrace();
} 

// 记录激活事件,有自定义属性
try {
     JSONObject properties = new JSONObject();
	//这里的 DownloadChannel 负责记录下载商店的渠道,值应传入具体应用商店包的标记。如果没有为不同商店打多渠道包,则可以忽略该属性的代码示例。
    properties.put("DownloadChannel", "XXX");
    // 触发激活事件
    SensorsDataAPI.sharedInstance().trackAppInstall(properties);
} catch (Exception e) {
    e.printStackTrace();
} 

CODE

1.2. iOS 端

初始化 SDK 后,可以调用 - trackAppInstall  方法记录激活事件,多次调用此方法只会在第一次调用时触发激活事件:

// 记录激活事件,无自定义属性
[[SensorsAnalyticsSDK sharedInstance] trackAppInstall];

// 记录激活事件,有自定义属性
[[SensorsAnalyticsSDK sharedInstance] trackAppInstallWithProperties:@{@"DownloadChannel": @"AppStore"}];
CODE

注意: 一定不要在调用 trackAppInstall 接口时传入 $utm_ 相关的属性。如果要追踪推广渠道,需要用 App 渠道链接来追踪(推广的渠道链接一般由产品运营人员创建)

$AppInstall 事件采集成功后,可以在神策系统查看是否有相应的 AppInstall 事件(即 App 激活事件):

2. 如何切换trackAppInstall接口

2.1. Android 端

由 trackInstallation 接口改为 trackAppInstall() 接口记录激活事件,多次调用此方法只会在第一次调用时触发激活事件:

// 记录激活事件,无自定义属性
try {
	// 触发激活事件
    SensorsDataAPI.sharedInstance().trackAppInstall();
} catch (Exception e) {
    e.printStackTrace();
} 

// 记录激活事件,有自定义属性
try {
     JSONObject properties = new JSONObject();
	//这里的 DownloadChannel 负责记录下载商店的渠道,值应传入具体应用商店包的标记。如果没有为不同商店打多渠道包,则可以忽略该属性的代码示例。
    properties.put("DownloadChannel", "XXX");
    // 触发激活事件
    SensorsDataAPI.sharedInstance().trackAppInstall(properties);
} catch (Exception e) {
    e.printStackTrace();
} 
CODE

2.2. iOS 端

由- trackInstallation: 接口改为- trackAppInstall 接口记录激活事件,多次调用此方法只会在第一次调用时触发激活事件:

// 记录激活事件,无自定义属性
[[SensorsAnalyticsSDK sharedInstance] trackAppInstall];

// 记录激活事件,有自定义属性
[[SensorsAnalyticsSDK sharedInstance] trackAppInstallWithProperties:@{@"DownloadChannel": @"AppStore"}];
CODE

2.3. 事件名修改

事件名由自定义事件 AppInstall 改为预置事件 $AppInstall 事件

若用原记录的激活事件名不是 $AppInstall,需要使用虚拟事件将原激活事件和 $AppInstall 合并分析数据,具体咨询神策技术支持

3. 如何接收广告商的其他参数

如果客户想要接收广告商的其他参数用于分析,例如获取对应的广告计划 id(AID) 以区分不同的广告计划,可按照下面的方式实现。

下列以头条为例进行说明。

3.1. 方案一:使用神策预置的 utm 属性存放对应的参数

 1、在渠道管理工具中,选择字节-巨量广告渠道,并且根据 字节-巨量广告对接文档 将链接里不存在的且想要接收的其他参数(例如 请求语言)的宏(__SL__)填写到 神策预置的 utm_ 属性下,生成对应的监测链接。
2、渠道匹配成功后,对应的 utm_ 属性下的值,即为接收的第三方渠道参数的值(例如 请求语言: SL)

3.2. 方案二:使用自定义属性存放对应的参数

1、在渠道管理工具中,选择今日头条/抖音渠道,并且根据 字节-巨量广告的对接文档 将链接里不存在的且想要接收的其他参数(例如请求语言)的宏(__SL__)填写到 自定义属性下,生成对应的监测链接。

2、渠道匹配成功后,对应的自定义属性下的值,即为接收的第三方渠道参数的值(例如 请求语言: SL

自定义属性:即使用utm属性参数帮助用户区分各渠道投放效果。

注意:开启强校验后,需要在事件管理里面把$AppChannelMatching的可见性设置为true,才能使用自定义属性。

4. 广点通中如何获取下列6个参数

参数名参数的参考值
account_id8683590
client_id110787531
client_secret9IPQ0VP7INuYY6SA
user_action_set_id( iOS 的)110781921
user_action_set_id( Android 的)1107817601
refresh_tokenb8b393938dc3a4ddfc0b7e8abb721e92

具体参数含义可参考此文档:

https://developers.e.qq.com/docs/apilist/auth/oauth2#a2

  • client_idclient_secret 在应用程序管理页面获取(一定要等 App 审核通过,才会有对应的 client_idclient_secret ):

  • refresh_token 和 account_id

获取 refresh_token  和 account_id 之前,需要先获取 Authorization Code,然后通过 Authorization Code 获取 refresh_token 和 account_id。具有可参考此文档:

https://developers.e.qq.com/docs/apilist/auth/oauth2#a2

(1) Authorization Code 获取方法:

在浏览器的地址中,输入该请求。

https://developers.e.qq.com/oauth/authorize?client_id=&redirect_uri=<回调地址>&state=<STATE>&scope=<SCOPE>

其中 state=<STATE> scope=<SCOPE>两个参数可以去掉。

比如您的client_id=123456,回调地址是 https://www.example.com

那么浏览器地址栏中输入如下地址:

https://developers.e.qq.com/oauth/authorize?client_id=123456&redirect_uri=https://www.example.com

输入链接之后,浏览器页面会跳转至 redirect_uri 对应的系统或页面,同时携带 authorization_code (有效期 5 分钟)

https://www.example.com/?[authorization_code=xxxxx&state=

(2) 使用 Authorization Code 获取 refresh_token 、account_id 和 access_token

在终端命令(mac 电脑)或者 cmd 命令提示符中(windows 电脑)输入如下请求:

curl -G 'https://api.e.qq.com/oauth/token' \
-d 'client_id=<CLIENT_ID>' \
-d 'client_secret=<CLIENT_SECRET>' \
-d 'grant_type=authorization_code' \
-d 'authorization_code=<authorization_code>' \
-d 'redirect_uri= <回调地址>'

以上 <CLIENT_ID><CLIENT_SECRET><authorization_code><回调地址>,填写具体的参数

上述请求可以获取到 refresh_token 和 account_id 返回结果示例如下:

  • user_action_set_id ( iOS APP 的参数)

在终端命令(mac 电脑)或者 cmd 命令提示符中( windows 电脑)输入如下请求:

curl 'https://api.e.qq.com/v1.1/user_action_sets/add?access_token=<ACCESS_TOKEN>&timestamp=<TIMESTAMP>&nonce=<NONCE>' \
-H 'Content-Type: application/json' \
-d '{"account_id": "<ACCOUNT_ID>","type": "IOS","mobile_app_id": "<应用商店的 ID>","name": "iosuser_action_set", "description": ""}'

其中  <ACCESS_TOKEN>、<ACCOUNT_ID> 填写具体的值。<TIMESTAMP> 填写当前时间戳(可以百度搜索获取),<NONCE> 是一个随机数,随意填写就行。每次请求时,这个随机数都需要变更。<应用商店的 ID>:IOS:App Store id;ANDROID:应用宝 id 。

具体可参考此文档 :https://developers.e.qq.com/docs/apilist/user_data/user_action_set

  • user_action_set_id (android App 的参数)

在终端命令(mac 电脑)或者 cmd 命令提示符中( windows 电脑)输入如下请求:

curl 'https://api.e.qq.com/v1.1/user_action_sets/add?access_token=<ACCESS_TOKEN>&timestamp=<TIMESTAMP>&nonce=<NONCE>' \
-H 'Content-Type: application/json' \
-d '{"account_id": "<ACCOUNT_ID>","type": "ANDROID","mobile_app_id": "<应用商店的 ID>","name": "androiduser_action_set", "description": ""}'

其中  <ACCESS_TOKEN>、<ACCOUNT_ID> 填写具体的值。<TIMESTAMP> 填写当前时间戳(可以百度搜索获取),<NONCE> 是一个随机数,随意填写就行。每次请求时,这个随机数都需要变更。<应用商店的 ID>:IOS:App Store id;ANDROID:应用宝 id 。

注意:user_action_set_id 一个账户下只能创建一个(每个 App只能创建一个,如果一个账号有2个 App,iOS 和 android 各 2 个,那么会有 4 个 user_action_set_id),创建后不能编辑和删除,上面的 add 接口为创建接口,如果之后想要再次查询 user_action_set_id,可以使用下面的 get 接口获取

curl -G 'https://api.e.qq.com/v1.1/user_action_sets/get?access_token=<ACCESS_TOKEN>&timestamp=<TIMESTAMP>&nonce=<NONCE>' \
-H 'Content-Type: application/json' \
-d 'account_id=<ACCOUNT_ID>' \
-d 'fields=["type","description","name"]'

其中  <ACCESS_TOKEN>、<ACCOUNT_ID> 填写具体的值。<TIMESTAMP> 填写当前时间戳(可以百度搜索获取),<NONCE> 是一个随机数,随意填写就行。每次请求时,这个随机数都需要变更。

请求以及返回结果的示例如下:

5. 如何实现客户从微信获取 access_token 并自动同步给神策

5.1. 第⼀步:获取 api_secret

5.2. 第二步:获取同步地址

将同步地址 url 中的参数 copy 出来,http://localhost:8107/api/v2/sa/channel_token?project=default&app_id=123abc,把红色值 copy 出来;

5.3. 第三步,请求同步

5.3.1. 直接 curl 命令请求(示例如下)

curl -H "Content-Type:application/json" -X POST -d '{"access_token": "xxx","project":"xxx","app_id":"xxx"}' '同步地址&token=xxx'


参数解释:

access_token:根据您实际的 access_token 填写

project:根据您实际的神策项⽬填写

app_id:根据您实际的 app_id 填写

同步地址:第二步获取的同步地址

token:第一步获取的 api_secret


最终请求命令组合完毕:

curl -H "Content-Type:application/json" -X POST -d '{"access_token": "x1x1x1x1x1x1x1x1","project":"default","app_id":"123abc"}' 'http://localhost:8107/api/v2/sa/channel_token?project=default&app_id=123456abc&token=x2x2x2x2x2x2x2x2'

5.3.2. 使用 postman ⼯具发请求(示例如下)

选择 POST 方式,地址栏中填写http://localhost:8107/api/v2/sa/channel_token?project=default&app_id=123456abc&token=x2x2x2x2x2x2x2x2,填写参数形式选择 Body 的 raw 选项,输入 access_token、project、app_id 的 json 格式数据。

注意:access_token、api_secret如有发生变化,请重新同步。

6. 后端埋点的深度回传事件配置

若您将后端埋点的事件配成深度回传事件,确保该事件可成功回调,需您在后端埋点的深度回传事件上报时必须加上以下属性

属性名属性类型默认显示名支持情况
$is_channel_callback_event

布尔值是否进行渠道匹配回调默认只有首次触发渠道追踪自定义事件时,该属性的值为 ture,后续再次触发该事件时,该属性值为 false。可在创建渠道链接时设置首次回传和每次回传。
$app_id字符串应用唯一标识

若您将后端埋点的事件配成深度回传事件,确保该事件可成功回调,需您在后端埋点的深度回传事件上报时必须加上 $app_id 属性回传。

请调用下列客户端 SDK 的方法获取 $app_id ,避免手动输入错误导致无法成功回传:

  • Android 端获取方法:context.getApplicationInfo().processName
  • iOS 端获取方法:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"]

Android SDK 4.1.0 版本支持

iOS SDK 2.0.9 版本支持


7. iOS 14 相关问题

1、当 IDFA 无法追踪时,匿名ID用什么?

神策会调用 IDFV 作为匿名设备 ID 进行采集,当 IDFV 也无法采集的情况会使用 UUID 进行兜底。