个推回执文档

个推回执文档

logo1.png

个推消息回执回调操作步骤与使用文档

一、引言

通过个推平台将消息发送后,个推通过调用第三方的回执接口向第三方发送消息的回执通知,第三方自己决定后续动作,如:统计发送报表等。如果有接入厂商推送渠道,需要先配置厂商的回执,厂商回执给到个推,然后个推发送回执到第三方服务。回执接收发送流程如下:

img

二、厂商回执配置步骤

1. 根据 厂商消息报表补全 文档进行配置

2. 安卓hw回执配置步骤

1)登录AppGallery Connect 网站进入已经开通推送服务的项目,在 “增长 > 推送服务> 配置 > 选择应用” 中开通 “应用回执状态”,配置个推侧的回调地址以及HTTPS证书。如下

img

  • 回执名称可自定义
  • 回调地址(杭州机房,若应用非杭州机房或不清楚应用对应机房请及时与个推技术支持联系。)
    https://thirdrcp-hz.getui.com/hw
    
  • 点击“提交”,提示“成功”则表示配置成功

3. vivo回执配置步骤

1)登录vivo推送运营平台--点击“应用信息“。 APP回执地址 点击“开通“;

img

2)点击“新增回执“ 添加回执地址。

  • 回调地址(杭州机房,若应用非杭州机房或不清楚应用对应机房请及时与个推技术支持联系。)
    -
    https://receipt-hz.lmmindex.com/vv
    
    img

注:1.添加回执地址后,会生成对应的回执ID,若要使用该回执,请在推送时带上回执id;

2.回执能力关闭后,所有回执能力都失效;删除某个回执ID记录,对应的回执ID将失效

3.回执支持单推和列表推

4.回执地址添加成功后,将在1小时后生效回执

5.更多的注意事项见 vivo消息回执文档

4. 魅族回执配置步骤

1)登录魅族官网--打开“应用列表”界面--点击“打开应用”,见下图:

img

2)进入“配置管理”界面--点击“回执管理”

  • 回调地址(杭州机房,若应用非杭州机房或不清楚应用对应机房请及时与个推技术支持联系。)
    -
    https://thirdrcp-hz.getui.com/mz
    
    3)将回调地址复制到“回执地址”输入框中,点“添加”,如下图:

    img

注:1.魅族只支持单推任务的回执数据;

2.魅族用户必须确保在魅族官网上填写域名地址后,才联系个推客服开通第三方回执权限,否则魅族所有消息无法推送。

5. 荣耀回执配置步骤

  • 消息报表到达回执配置:选择 “开放服务 > 推送服务 > 应用回执 > 新增回执” ,即可进行配置
    img

    img
  • 回执名称可自定义
  • 荣耀回调地址(杭州机房)
    https://thirdrcp-hz.getui.com/ho
    
  • 点击“提交”,提示“成功”则表示配置成功

6. 鸿蒙hw回执配置步骤

1)登录AppGallery Connect 网站进入已经开通推送服务的项目,在 “增长 > 推送服务> 配置 > 选择应用” 中开通 “应用回执状态”,配置个推侧的回调地址以及HTTPS证书。如下

img

  • 回执名称可自定义
  • 回调地址(杭州机房,若应用非杭州机房或不清楚应用对应机房请及时与个推技术支持联系。)
    https://thirdrcp-hz.getui.com/harmony/hw
    
  • 点击“提交”,提示“成功”则表示配置成功

三、个推回执配置步骤

1 协议

1.1 数据传递

1) 协议使用 HTTP POST 方式,通过调用第三方预先提供的 URL 来传递信息;

2) POST 数据的内容采用文本格式,每行表示一条消息回执,一次请求可以有一行或多行,每一行的文本内容为 JSON 串;

3) 第三方接口接收请求后有 HTTP 请求响应,无论是否第三方正常处理都不会再尝试重发;

4) 如果请求第三方接口异常(如:发生网络异常、无响应等),尝试三次后如果还是失败将丢弃;

2 相关接口

2.1 通知第三方

1) 单条回调(格式:JSON)

参数名 参数类型 参数说明
appid String 应用 ID
cid string 接收人 CID
taskid string 任务 ID(即 ContentID)
msgid string 消息 ID
code string 结果码(200 -- 成功,400 -- 推送苹果接口失败, 401 -- 用户不存在,402 -- 非活跃用户,500 -- 系统内部异常)目前只有 200 和 400,后续版本扩展。
desc string 推送结果描述
sign string Sign=MD5(appid+cid+taskid+msgid+masterSecret)
第三方通过该公式使用 mastersecret 计算出自己的 Sign’值,如果 sign== sign’则表示该请求合法。
actionId string 回执 ID
recvtime long 回执上传时间
alias string 根据配置返回

2) 批量回调(格式:文本)

每行内容为单条回调 JSON 格式


3) 常用的回执id

消息渠道 到达 展示 点击
个推通知 0 10000 10010
个推透传 0 -- 60002
安卓华为 110000 -- 60020
鸿蒙华为 330000 -- 60090
荣耀通知 180002 -- 60070
荣耀透传 180001 -- 60070
小米 120000 -- 120010
小米海外 190000 -- 190010
魅族 130000 -- 130010
oppo 140000 -- 60030
oppo海外 310000 -- 60080
vivo 150000 -- 60040
APNs(苹果) 10009 -- 10019

4)各渠道其它回执说明

厂商 actionId 含义
安卓华为 110030 应用未安装(卸载)
安卓华为 110060 指定的token在当前安卓终端用户下不存在
安卓华为 110070 通知栏消息不展示
安卓华为 110180 非活跃设备消息
安卓华为 110150 hw系统内部网络异常
安卓华为 110160 离线用户消息管控
安卓华为 110022 消息的userID与手机当前用户ID不匹配
安卓华为 110027 收到APP的Push透传消息,拉起服务失败本地缓存
安卓华为 110031 系统版本或应用不支持该消息
安卓华为 110102 消息频控丢弃
安卓华为 110144 发送下行消息时请检查profile_id字段。
安卓华为 110201 消息发送管控
安卓华为 1102010 消息发送管控-用户已切换服务地,从A地区到B地区后会重新生成新的token,旧Token会失效,若再回到A区域,此时会生成新token
安卓华为 1102012 消息发送管控-应用已卸载。
安卓华为 1102015 消息发送管控-消息中指定的Token与设备当前登录的用户无法匹配(在开启或者切换过多用户功能的设备上,不同登录用户对应不同的Token)。
安卓华为 1102016 消息发送管控-用户关闭了显示通知栏消息。
安卓华为 110256 可能的原因:
1. 您当日的发送量超出资讯营销类消息的限制,请您调整发送策略。
2. 违反通知消息管理规则,被停止发送资讯营销类消息,或所有消息被归类为资讯营销类消息。
荣耀 180000 在终端设备上目标应用进程不存在导致透传消息被缓存
荣耀 180003 应用未安装(卸载)
荣耀 180004 指定的token在当前安卓终端用户下不存在
荣耀 180005 通知栏消息不展示
荣耀 180006 目标应用被禁用
荣耀 180007 通知栏消息被点击
荣耀 180008 不支持的消息类型
荣耀 180009 1. 消息重复发送。
2. 消息发送数量超过《消息数量管理细则》配额。
荣耀 180011 通知栏跳转目标应用页面失败,一般由于指定的目标页面不存在或者无权限打开该页面
荣耀 180013 消息发送管控
荣耀 180014 userId不匹配当前Android终端用户
荣耀 180015 通知栏展示失败(需检查自定义点击消息动作是否有效)。返回此actionId时,也会同时返回一条actionId:180002
小米 120001 到达但通知栏关闭。返回此actionId时,也会同时返回一条actionId:120000
小米 120020 目标设备无效
小米 120030 客户端调用了disablePush接口禁用Push。
小米 120040 目标设备不符合过滤条件(包括网络条件不符合、地理位置不符合、App版本不符合、机型不符合、地区语言不符合等)。
小米 120050 当日推送总量超限
小米海外 190020 目标设备无效
小米海外 190030 客户端调用了disablePush接口禁用Push。
小米海外 190040 目标设备不符合过滤条件(包括网络条件不符合、地理位置不符合、App版本不符合、机型不符合、地区语言不符合等)。
oppo 140001 应用被卸载、应用自动注销、用户设备刷机、设备30天内未联网会导致RegistrationID失效
oppo 140002 当日应用对该设备推送条数超过单设备推送条数限制
oppo海外 310001 应用被卸载、应用自动注销、用户设备刷机、设备30天内未联网会导致RegistrationID失效
vivo 150101 消息审核不通过
vivo 150103 消息被覆盖
vivo 150104 消息未展示
vivo 15011001 管控-推送量级超限
vivo 15012000 管控-单应用单用户频次限制
vivo 15010012 管控-消息过期
vivo 15020001 不匹配-用户未订阅
vivo 15020002 不匹配-用户不存在
vivo 15020006 不匹配-14天未联网
鸿蒙华为 330030 应用未安装(卸载)
鸿蒙华为 330060 指定的Token在当前终端用户下不存在
鸿蒙华为 330070 通知消息不展示
鸿蒙华为 330180 非活跃设备
鸿蒙华为 330150 hw系统内部网络异常
鸿蒙华为 330160 离线用户消息管控
鸿蒙华为 330022 消息的userID与手机当前用户ID不匹配
鸿蒙华为 330027 在终端设备上目标应用进程不存在导致透传消息被缓存
鸿蒙华为 330031 系统版本或应用不支持该消息
鸿蒙华为 330102 消息频控丢弃
鸿蒙华为 330144 发送下行消息时请检查profile_id字段
鸿蒙华为 330256 消息频次限制。频次限制请参考消息发送频次限制

2.2 第三方响应

参数名 参数类型 参数说明
code String 成功接收回执(0),未成功(-1)
result string 描述

1) 单条回执示例:

{"code":"200","recvtime":1559252242250,"appid":"laaN0B4deu8HMBXm141","sign":"84702a155dc2a13ad7e037b29c751a","msgid":"1559252299573551004101","actionId":"110000","taskid":"OSS-0531_RZBMR2SwQj66QmqOy86","desc":"ok","cid":"d12403fad5a8b5e94896f8b65be228"}

2) 批量回执示例:

{"code":"200","recvtime":1559252242250,"appid":"laaN0B4deu8HMBXm141","sign":"84702a155dc2a13ad7e037b29c751a","msgid":"1559252299573551004101","actionId":"110000","taskid":"OSS-0531_RZBMR2SwQj66QmqOy86","desc":"ok","cid":"d12403fad5a8b5e94896f8b65be228"}
{"code":"200","recvtime":1559252242250,"appid":"laaN0B4deu8HMBXm141","sign":"84702a155dc2a13ad7e037b29c751a","msgid":"1559252299573551004101","actionId":"120000","taskid":"OSS-0531_RZBMR2SwQj66QmqOy86","desc":"ok","cid":"d12403fad5a8b5e94896f8b65be228"}

3) 响应示例:

{"code":"0","result":"ok"}

3. 使用方式

3.1 登记回执 url 步骤

1) 首先提供接受第三方回执的 URL 地址,格式以 http://或 https://开头;

2) 提供您应用的 appid

3) 您需要哪些回执信息,目前提供:收到、展示、点击和自定义回执。

示例代码:
首先开启一个服务端,如:
第三方提供的回执 URL 地址为:http://xxx.xxx.xx.xxx/getReportUrl.do
SpringMVC 的 controller 接受回执

@RequestMapping(value = "getReportUrl.do")
    @ResponseBody
    public Map<String,Object> getReportUrl(HttpServletRequest request) throws IOException{
        byte[] bytes = getRequestInputStream(request);
        System.out.println(new String(bytes));
        return null;
    }
    public static byte[] getRequestInputStream(HttpServletRequest request) throws IOException {
        ServletInputStream input = request.getInputStream();
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int position = 0;
        while (true) {
            position = input.read(buffer);
            if (position == -1) {
                break;
            }
            output.write(buffer, 0, position);
        }
        return output.toByteArray();

3.2 服务端处理回执

  个推会将推送结果以文本形式通过 HTTP POST 方式发送到上面提供的 URL,开发人员需
要解析字段,并返回是否成功接收回执,字段解析详见(接口)部分。


  Ps:关于通过苹果 APNs 推送和通过个推推送的回执的一点不同


  苹果推送:回执会返回请求苹果推送接口失败的结果,其结果码为 400

  个推:回执会返回所有通过个推推送(包含通过 ios 在线推送),成功到达客户端的结果,
其结果码为 200。


  因此,第三方接收到的结果码为 200 的回执是指推送接口请求返回成功并且有对应actionid返回的回执,结果码为
400 的回执指请求苹果推送接口失败的回执。

注:因 POST 数据只是普通文本内容,整个 HTTP BODY 不是一个 JSON 串,所以不要对Content-Type强制
限制接收 application/json 格式,需要读取 body 体后按单行 JSON 处理即可。

四、开通回执权限

提供个推appid和回执url地址,联系对应的商务同学,或者添加下方二维码进行咨询

开发者中心 SDK 下载

文档中心搜索

技术
咨询

微信扫一扫

随时联系技术支持

在线
咨询