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. 后端埋点的深度回传事件配置

自 SA 版本:2.1.4874 起,渠道追踪新增了深度回传事件区分多 App 回传的逻辑。

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

属性名属性类型默认显示名产品版本各版本支持情况
$is_channel_callback_event

布尔值是否进行渠道匹配回调SA 1.15 - 2.2

追踪自定义事件时进行渠道匹配,可以调用 SDK 方法,对自定义事件进行追踪,匹配到渠道信息后会将结果回传到广告平台。具体使用,可以参考 SDK 的 API 文档。

默认只有首次触发渠道追踪自定义事件时,该属性的值为 ture,表示匹配成功会给广告平台回传深度事件。后续再次触发该事件时,该属性值为 false。只有首次发生会回传。

SAT 版本默认只有首次触发渠道追踪自定义事件时,该属性的值为 ture,后续再次触发该事件时,该属性值为 false。可在创建渠道链接时设置首次回传和每次回传。
$channel_device_info字符串是否不进行追踪回调SA 1.15 - 2.1追踪自定义事件时进行渠道匹配,可以调用 SDK 方法,对自定义事件进行追踪,匹配到渠道信息后会将结果回传到广告平台。该字段记录用于渠道匹配的设备信息,比如 IMEI、Android ID、Mac 地址、IDFA。具体使用,可以参考 SDK 的 API 文档。
SA 2.2+ 、SAT 版本支持;默认1(客户端、服务端使用该属性名时默认填写1)
$app_id字符串应用唯一标识SA2.1.4874以上及SAT版本

若您将后端埋点的事件配成深度回传事件,确保该事件可成功回调,需您在后端埋点的深度回传事件上报时必须加上 $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 进行兜底。

2、IDFA 无法追踪后,对渠道投放有什么影响?

除IDFA外,神策目前已经支持CAID作为精确匹配的方式之一,CAID是中国广告协会与中国信息通信研究院联合研究机构、广告产业链各方提出中国广告协会互联网广告标识(CAA Advertising ID,简称 CAID)方案,可以自愿选择是否接入CAID,申请官网:http://www.cnaa123.com/

已经支持的渠道:头条/抖音、广点通、快手。

iOS SDK集成文档:SDK 集成 (iOS)

对于不接入CAID的客户,神策精准匹配功能失效,会默认使用模糊匹配原理进行兜底。