视频版讲解

触达通道定制开发

概述

神策智能运营实现了多种触达通道,如推送支持极光、梦网云等。当神策智能运营需要通过个推、梦网云等第三方平台触达用户(如给客户手机推送通知消息、发送短信)时,神策智能运营会请求第三方平台的 API,再由第三方平台将通知消息、短信发送到用户设备上。默认情况下,神策智能运营内置了消息封装的格式和调用第三方平台 API 的方法,但是这些默认逻辑可能存在一些问题:

  1. App 端已经集成极光、个推等推送平台 SDK,推送的消息内容及格式须符合之前已有规范才可以正确展示通知和跳转,神策智能运营的默认格式 App 无法解析;
  2. 调用第三方平台时需要更多参数,而神策智能运营默认不支持这些字段设值;
  3. 调用第三方平台需要更复杂或定制化的代码逻辑;

为了解决以上问题,实现更多定制化需求,神策智能运营在 0.6 版本增加了“定制触达通道”的功能,该功能允许用户自行实现或修改 App push、短信通道调用第三方平台的代码逻辑,使用流程如下:

  1. 从 github 上下载神策智能运营触达通道默认的代码实现。这些代码是神策智能运营默认的对第三方平台的 API 调用逻辑;
  2. 修改代码,实现定制化的调用逻辑。如修改消息组装格式,设置或修改 API 参数等;
  3. 本地运行单元测试里的代码,指定测试设备的推送 ID,测试能否正常触达测试设备;
  4. 将代码打包,并在神策智能运营通道配置界面上传;
  5. 在神策智能运营上配置通道使用的参数;
  6. 神策智能运营运营计划使用新的定制化通道逻辑触达用户;

本文将以“定制极光推送通道”为例介绍定制推送通道逻辑的流程。需要注意的是:触达通道的代码运行在 JDK 8 的环境中。

获取触达通道默认代码实现

目前可以定制的智能运营触达通道调用代码请见下表:

以极光推送为例,可以通过如下命令从 github 下载默认实现的代码:

git clone https://github.com/sensorsdata/sf-channel-push-jiguang.git
BASH

修改代码

“触达通道”代码分为两部分,以极光推送为例:

  1. 触达通道客户端实现类( ChannelClient ):该类的函数接收神策智能运营框架传入的触达信息(如向推送 ID 是 "241fe1da9ed3cbdab77" 的用户发送标题是 "Hello",内容是 "World" 的通知消息),调用第三方平台发送。代码是 JiguangClient.java ;
  2. 触达通道配置类( ChannelConfig ):该类包含可以在前端界面上配置的触达通道参数,如 AppKey、MasterSecret 等第三方平台鉴权参数,如 uri_activity 等调用 API 时使用的参数。代码是 JiguangChannelConfig.java ;

神策智能运营在使用该通道触达时:

  1. 以界面配置的参数为内容创建 ChannelConfig 实现类即 JiguangChannelConfig 的实例,记作 channelConfig;
  2. 创建 ChannelClient 实现类即 JiguangClient 的实例,记作 channelClient;
  3. 调用 channelClient 的 initChannelClient 函数,参数是 channelConfig 实例,可以将其类型转换为 JiguangChannelConfig 类使用;
  4. 框架多次调用 send(List<MessagingTask> messagingTasks) 方法触达用户,每次参数包含一批需要触达的任务,包含推送 ID 和推送内容等;
  5. 最后调用 close() 关闭触达通道;

一个定制代码的样例:按定制格式生成推送到 APP 的透传内容 。

测试/调试

每个默认代码实现里包含一个单测类,用于测试触达通道是否可以正常工作。可以将推送 ID 改为测试设备的推送 ID,运行单测,观察是否能正常推送通知,以及点击通知的后续行为是否符合预期。

代码打包

可以在通道项目目录下执行 maven 打包命令:

mvn clean package -DskipTests
BASH

默认的包配置会将 maven 依赖一起 shade 到一个 jar 包中,输出路径在项目的 target 目录下。

其中可能需要注意的是:

  1. 样例代码 pom.xml 中部分库使用 provided 类型依赖是因为神策智能运营框架本身已经包含这些依赖,如果需要新增依赖,可以不添加 provided,直接 shade 到输出的 JAR 包中;
  2. 如果 shade 包和神策智能运营框架所包含的类有冲突,神策智能运营框架会优先使用 shade 包中的类。

触达通道定制开发讲解视频