1. 概述

1.1. App 客户端逻辑

对于 App 客户端来说,基本的工作就是根据上面的数据结构进行推送数据的解析,然后进行相关自定义操作。但是需要注意的是:

注意与原有逻辑的兼容,建议把神策的逻辑放到原有逻辑之前处理,防止原有推送逻辑无法解析神策数据,然后直接返回,导致神策推送数据没有处理。一定做好与原有逻辑的兼容。

1.2. App 端需要采集的事件:

  • 上报推送 ID
  • 触发推送打开的埋点

1.2.1. 上报推送 ID

对于各个推送平台来说,注册 ID 名称也有所差别,极光平台称之为 Registration ID,个推平台称之为 Client ID 以及友盟平台称之为 deviceToken,用处都类似,唯一标识一台设备。在推送注册成功后,各个推送平台都提供了相关的回调接口,此时在接口中调用 profilePushId(type, registerId) 接口上报注册 ID。

1.2.2. 触发推送打开的埋点

神策 SF 推送的数据格式参照上一节中的重要数据格式定义所列举,App 端需要采集通知打开的事件——AppOpenNotification,该事件的属性都是从神策 SF 推送的数据中解析而来。AppOpenNotification 事件的属性如下:

name

cname

说明

$sf_msg_title推送标题推送消息标题
$sf_msg_content推送内容推送消息内容
$sf_link_url定向跳转页面打开一个 URL,会使用此字段,字段名固定
$sf_plan_id运营计划 ID推送计划 ID
$sf_audience_id运营受众 ID推送计划的受众 ID,受众是批量计算的,会定时变更,此 ID 用于区分是哪个批次的受众,非必须属性,可能没有
$sf_plan_strategy_id实验组 ID实验组 ID
$sf_plan_type计划类型目前有两个值,"运营计划" 和 "流程画布"
$sf_strategy_unit_id策略组 ID标记流程画布里策略器的 ID

2. SF 推送数据解读

2.1. 以 iOS / 极光 为例,推送直接拿到的结构如下:

{
    "_j_business" = 1;
    "_j_msgid" = 67554013335743940;
    "_j_uid" = 27613330581;
    aps =     {
        alert =         {
            body = "...";
            title = "...";
        };
        badge = 4;
        sound = "";
    };
    "sf_data" = "{.....}";
}
JS


2.2. 其中 sf_data 字段中的数据为 SF 传给客户端的数据,具体数据为:

# 推送消息中,sf_data 字段 JSON 解析后得到
{
    "sf_link_url":"http://sensorsdata.cn", # 打开一个 URL,会使用此字段,字段名固定
    "sf_landing_type":"CUSTOMIZED",        # 为 OPEN_APP、LINK、CUSTOMIZED
    "sf_msg_id": "83ddb764-e163-453e-a715-d68621170b71",  # 神策自行产生的消息 id,用于排错
    "sf_plan_id": "3",                  # 计划 ID 这里均为字符串类型,以支持在神策分析中进行分组
    "sf_audience_id": 5,                # 受众 ID
    "sf_plan_strategy_id": "0",         # 实验组 ID,用于区分实验组
    "sf_strategy_unit_id": "100",       # 策略器 ID,用于区分策略器
    "sf_plan_type": "运营计划",          # 计划类型,中文显示名(SIMPLE 运营计划,RICH 流程画布)
    "customized":{                      # 自定义字段信息(所谓的透传消息)
        "book_id":"12345",              # 这里的 key/value 是在计划中自定义的.
        "news_id":"678"
    }
}
JS


2.3. 对于 推送数据 和 sf_data 字段数据的具体解读:

来源字段名/获取方式对应到神策的 属性名(注意是预置属性,属性名带 $ 前缀)埋点时对应的神策数据类型含义
推送消息外部结构消息标题$sf_msg_titleSTRING推送标题
消息内容$sf_msg_contentSTRING推送内容
sf_datasf_link_url$sf_link_urlSTRING打开一个 URL,会使用此字段,字段名固定
sf_landing_type$sf_landing_typeSTRINGOPEN_APP、LINK、CUSTOMIZED
sf_plan_id$sf_plan_idSTRING这里均为字符串类型,以支持在神策分析中进行分组
sf_audience_id$sf_audience_idNUMBER受众 ID
sf_plan_strategy_id$sf_plan_strategy_idSTRING实验组 ID
sf_plan_type$sf_plan_typeSTRING计划类型,SIMPLE 运营计划,RICH 流程画布
sf_strategy_unit_id$sf_strategy_unit_idSTRING策略器 ID
customized

自定义字段信息(所谓的透传消息)

这里的 key/value 是在计划中自定义的.


其中 sf_landing_type 字段分别有 OPEN_APP、LINK、CUSTOMIZED,对应 App 的动作分别是 打开 App、打开一个网页、自定义消息

2.3.1. 打开 App

  1. 默认行为,点击推送消息,就打开 App 首页。
  2. 注意,这里虽然称之为 “打开 APP”,但为了能够传递埋点所需的统计信息,仍旧会用到推送平台的 extra 字段等特性.
  3. sf_data 内含信息如下:

    {
        "sf_landing_type": "OPEN_APP",
        ...
    }
    JS
  4. 在 SF Web UI 端的触达设置示例:

2.3.2. 打开一个网页

  1. 在 App 里打开 URL.
  2. 您需要在 App 里解析 sf_data 结构并得到 sf_link_url 字段的信息,并实现打开 URL 的动作。
  3. sf_data 内含信息如下:

    {
        "sf_landing_type": "LINK",
        "sf_link_url": "http://sensorsdata.cn/",
        ...
    }
    JS
  4. 在 SF Web UI 端的触达设置示例:

2.3.3. 自定义消息

  1. 此处可以定义多个自定义的字段,用以描述更复杂的打开动作。
  2. sf_data 内含信息如下:

    {
        "sf_landing_type": "CUSTOMIZED",
        ...
        "customized":{
            "liveId": "1234",
            "foo": "bar"
        }
    }
    JS
  3. 在 SF Web UI 端的触达设置示例: