OPPO推送消息内容审核标准 基于第三方审核结果的消息推送

基于第三方审核结果的消息推送

OPPO推送服务禁止推送违反《通知运营规范》内容规范的消息,为避免您的消息存在内容违规,建议您基于第三方内容审核平台(推必安)的审核结果来进行消息推送,即在推送消息给Push服务器时,附带推必安对消息体内容审核后的结果,当OPPO PUSH服务器检测到审核结果不通过时,会对消息进行拦截,并返回结果。

推送消息内容安全公共服务平台(推必安)提供高效过滤色情、广告、涉政、暴恐、违法、低俗等多类垃圾文字及关键词的检测能力,推必安接入方式详见推必安官网公有云接口文档。

基于推必安审核结果消息推送流程

流程说明

1、开发者调用推必安登录审核平台接口(https://text.tuibianchina.com/manager/apiLogin),获取推必安审核接口需要的audit_token。
1)登录推必安官网,注册帐号。
2)调用推必安审核平台接口。

请求示例

curl -H “Content-Type:application/json” -X POST -d '{"userName":"admin","password":"$MD5(PWD)"}' https://text.tuibianchina.com/manager/apiLogin

响应示例

{ “errno”: 0, “errcode”:”success” “errmsg”: “成功” ”data“: { “record”: “4863ba214b9f4673b88e9b25afa8036f” } }

说明

响应成功获取的“record”是您用于文本审核接口时鉴权的参数audit_token。

2、开发者将需要推送的标题(title)、内容(content)拼接成字符串,拼接方式见注1。调用推必安审核接口(https://text.tuibianchina.com/v1/audit),获取审核结果。
请求示例:

curl -H "Content-Type:application/json" -X POST -d '{"pkg":"com.opush.test", "content":"标题#内容”}' https://text.tuibianchina.com/v1/audit

响应示例

 { “code”: 40004, “data”: { “contentId”: “4863ba214b9f4673b88e9b25afa8036f”, “labels”: [ { “level”: 1, “reason”: “POLITIC”, } ] }, “msg”: “Block” } 

说明

code表示响应码,“200”为通过,“40004”为不通过
如果您的审核文本存在敏感词,响应体会将敏感词显示在labels中。
更多字段值内容详情请参见推必安公有云接口文档。

3、将推必安返回的审核结果,传递到opush推送接口的auditResponse参数,进行消息推送。详见接口文档《通知栏消息》

4、相关推送接口都增加了auditResponse字段,详情见服务端API接口文档。

注1:在请求推必安审核接口时传入的content字段需要使用后续消息推送的标题(title)、内容(content)进行拼装,具体格式为”标题#内容”,及”title#content”。

OPPO开放平台 服务端单点推送

OPPO开放平台 服务端单点推送

单点推送

单点推送

单点推送主要用于向一个特定的用户推送同一条消息的场景。一条单点推送消息对应一个推送目标,对应一个消息ID。针对批量的单点推送任务,OPPO PUSH提供批量的单点推送接口可供开发者一次性发起多条单点推送服务。
和广播推送相比,单点推送无需预先保存消息体,而是在调用推送消息接口的同时传入消息内容。
为方便表述,以下部分内容介绍会将单点推送简称为单推。

单点推送接口

接口详情

描述内容
接口功能发送通知栏消息
请求方法POST
Content-Typeapplication/x-www-form-urlencoded
请求编码UTF-8
请求路径/server/v1/message/notification/unicast

请求参数

参数定义:

名称类型必须默认描述
auth_tokenstring鉴权令牌,详见鉴权一章。
messageString消息体参数,接受一个嵌套的JSON结构,推送目标和具体消息内容均在这个字段中配置。

message字段是一个JSON结构参数,接受的字段及含义如下:

名称类型必须默认描述
target_typeShort推送的目标类型 2: registration_id 5: 别名
target_valueString推送目标,按taget_type对应填入,仅接受一个值。
notificationJSON通知栏消息内容,参考消息体内容定义,按照JSON格式填入
verify_registration_idBooleanFALSE消息到达客户端后是否校验registration_id。 true表示推送目标与客户端registration_id进行比较,如果一致则继续展示,不一致则就丢弃;false表示不校验

message示范:

{
		"target_type": 2,
		"target_value": "CN_078ad8b8a137cadb14ae5b70cf846312",
		"verify_registration_id": true,
        // notification是一个嵌套在message的json,配置通知栏消息内容和参数
		"notification": {
				"appMessageId": null,
				"style": 1,
				"bigPictureId": null,
				"smallPictureId": null,
				"title": "您的订单已取消",
				"subTitle": null,
				"content": "您的订单(realme X7…) 已取消",
				"clickActionType": 4,
				"clickActionActivity": "com.realme.store.home.view.MainActivity",
				"clickActionUrl": null,
				"actionParameters": "{\"messageNo\":null,\"title\":\"您的订单已取消\",\"desc\":\"您的订单(realme X7…) 				已取消\",\"type\":null,\"redirectType\":2,\"resource\":\"1\",\"version\":1}",
				"showTimeType": 0,
				"showStartTime": null,
				"showEndTime": null,
				"offLine": true,
				"offLineTtl": 86400,
				"pushTimeType": 0,
				"pushStartTime": null,
				"timeZone": null,
				"fixSpeed": null,
				"fixSpeedRate": null,
				"networkType": null,
				"callBackUrl": null,
				"callBackParameter": null,
				"channelId": "message",
				"showTtl": 0,
				"notifyId": 1
				}
}

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString请求响应信息
dataString响应返回值,正确响应后包含消息ID

推送请求调用成功响应示例:

{
    code:0,
    message: "",
    data : {
       // 消息ID 格式为 AppID-1-1-全局唯一性ID
       messageId : ZngnvJIM7wQusNtbqYnpH6XX-1-1-622ff7cfae27668d2ed3afec,
       } 
}

推送目标存在问题响应示例:
推送请求调用失败,但推送目标存在问题

{
    code:1000,
    message: "registration_id格式不正确
}

返回码(code)

Code英文描述中文描述
10000Invalid Registration_idregistration_id格式不正确

批量单推接口

接口

描述内容
接口功能批量发送单推通知栏消息
请求方法POST
Content-Typeapplication/x-www-form-urlencoded
请求编码UTF-8
请求路径/server/v1/message/notification/unicast_batch

请求参数

和推送单条消息的单推接口相比,批量单推接口使用messages字段容纳不少于一条的消息推送参数。messages字段是一个JSON数组,里面的一个元素和单推接口参数中的message相同。
以下是参数定义:

名称类型必须默认描述
auth_tokenstring鉴权令牌,详见鉴权一章。
messagesString通知栏消息JSON数组字符串,示例:[{message},{message}]【最多1000个】

message:

名称类型必须默认描述
target_typeShort目标类型 2: registration_id , 5:别名
target_valueString推送目标用户: registration_id或alias
notificationJSON通知栏消息内容,参考消息体内容定义,按照JSON格式填入
verify_registration_idBooleanFALSE消息到达客户端后是否校验registration_id。 true表示推送目标与客户端registration_id进行比较,如果一致则继续展示,不一致则就丢弃;false表示不校验

一个批量单推接口的messages参数范例

[
	// 传入两个推送目标和推送内容,将会产生两条单推推送消息
	{
		"target_type":2,
		"target_value":"CN_906bf7b0d76a5c0001668ddc410ab903",
		"notification":{
			"title":"Hello World-1",
			"content":"Hello World message-1"
		}
	},
	{
		"target_type":2,
		"target_value":"CN_b457331fd7874d0200c595ebb8d39de8",
		"notification":{
			"title":"Hello World-2",
            "content":"Hello World message-2"
        }
]

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString请求响应信息
dataString返回值,JSON类型

推送请求调用成功响应示例:

{
     code: 0,
     message: "",
     data: [
         {
               messageId: xxxxxxxxx, // 消息Id
               registrationId: xxxxxxxxx
        }, {
               messageId: xxxxxxxxx, // 消息Id
               registrationId: xxxxxxxxx
       }, {
               messageId: xxxxxxxxx, // 消息Id
               registrationId: xxxxxxxxx, // 消息Id
               errorCode: 10000, // 失败码
               errorMessage: xxxx // 失败说明
       }
    ]
}

返回码(code)

Code英文描述中文描述
10000Invalid Registration_idregistration_id格式不正确

OPPO推送服务端设置广播推送

OPPO推送服务端设置广播推送

广播推送

OPPO PUSH提供广播和单点推送两种下发消息的方式。以下是这两种推送方式的介绍及具体的API使用方式。

广播推送

广播推送主要用于向大批量用户推送同一条消息的场景,例如标签推送、大批量的注册ID推送等。一般情况下,广播消息会在同一时间向这批目标设备推送消息,如果设置了定速推送,则按照给定的速度均匀向圈定的目标推送消息。
使用广播推送,需要先在OPPO PUSH保存一条广播消息体,再通过创建好的消息体对应的消息ID,调用OPPO PUSH的广播推送接口推送该条消息。

保存通知栏消息内容体

接口详情

描述内容
接口功能保存消息内容体,获取消息Id
请求方法POST
请求编码UTF-8
Content-Typeapplication/x-www-form-urlencoded
请求路径/server/v1/message/notification/save_message_content

请求参数

除了共有的鉴权参数外,消息体内容的参数均以key-value的形式填写在HTTP请求的body中。

名称类型必须描述
auth_tokenstring鉴权令牌,详见鉴权一章。

消息体内容参数:参数主要围绕消息体的具体内容,以及推送的方式,消息体内容参数设置详情可查看通知栏消息

响应参数

调用接口后,OPPO PUSH会响应JSON格式的字符串,包含以下字段:

名称类型必须描述
codeInt返回码,具体含义请参考调用地址,公共参数和返回码一章。
messageString响应信息描述
dataStringJSON格式的响应返回值,成功调用将包含消息ID,后续需要使用消息ID来进行广播消息推送。

响应示例

{
    "code": 0,
    "message": "success",
    "data": {
        "message_id": "58ad47319e8d725350a5afd5" //消息ID
      }
}

调用广播推送

接口详情

描述内容
接口功能发送通知栏消息
请求方法POST
Content-Typeapplication/x-www-form-urlencoded
请求编码UTF-8
请求路径/server/v1/message/notification/broadcast

请求参数

名称类型必须默认描述
auth_tokenstring鉴权令牌,详见鉴权一章。
message_idString消息ID。
消息ID是调用保存消息体接口成功后响应的唯一标识。
广播通知栏消息ID的格式为AppID-1-3-ObjectID,如ZngnvJIM7wQusNtbqYnpH6XX-1-3-622ea78f923805b1389e61c2,其中ZngnvJIM7wQusNtbqYnpH6XX是某个业务的AppID,622ea78f923805b1389e61c2是这条消息在Push的唯一ID。
target_typeShort目标类型。
接受一个short类型数字,目前推送目标可指定以下几种:
2:表示推送目标为注册ID类型,
5:表示推送目标为别名类型,
6:表示推送目标按照标签对应的用户群圈定;
target_valueString具体的推送目标用户信息,根据推送目标类型有不同的传入方式:
1.注册ID类型或别名类型的推送。这两种类型一次调用可传入最多1000个目标,目标之间以英文字符 ; 为分隔符。如传入注册ID目标列表,字符串可表示为 “RegID1;RegID2;RegID3”, 或者别名名单 “Alias1;Alias2;Alias3” 。

标签:
2.标签推送。标签推送的目标值使用标签表达式。
标签表达式由一个或多个指令组合而成,一个指令包括组合字段和标签名单,表示若干个标签的组合搭配。
假设有一个标签表达式,标签表达式的配置和计算规则如下:
{ “or” : [ “tagID1”, ” tagID2″ ], “and” : [ “tagID3”, “tagID4”], “not” : [ “tagID5”, “tagID6”] }
表达式逻辑计算如下:
计算 “or” 字段的结果,得到tagID1和tagID2的并集A;计算 “and” 字段的结果 tagID3和tagID4的交集B;
计算 “not” 字段的结果 (tagID5和tagID6的并集C’)的非集=C最后计算所有A和B和C的交集。
最终结果为 (tagID1 ∪ tagID2)∩(tagID3 ∩ tagID4)∩(¬(tagID5 ∩ tagID6))

响应参数(JSON)

名称类型必须描述
codeInt返回码,具体含义请参考调用地址,公共参数和返回码一章
messageString响应信息描述
dataStringJSON格式的响应返回值,成功调用将包含消息ID和任务ID。

推送请求调用成功响应示例

{
    code:0,
    message: "success",
    data : {
        message_id : xxxxxxxxx // 消息Id
        task_id : xxxxxxxxx // taskId
    }
}

如果推送目标存在问题,会根据对应异常的目标进行响应,示例如下:

{
    code:0,
    message: "",
    data : {
        message_id : xxxxxxxxx, // 消息ID
        task_id:XXXXXXXXXX,     //推送任务ID
        // 部分目标有异常,将以 错误码——对应目标名单的形式返回
        "10000": [
            "J0476035d625e6c64567f71487e040e7d017f0558675b",
            "J0476045d625e6c64567f71487e040e7d017f0558675b",
            "J0476035d625e6sd64567f71487e040e7d017f0558675b"
        ]
   }
}

返回码(code)

Code英文描述中文描述
10000Invalid Registration_idregistration_id格式不正确

OPPO开放平台OPPO消息推送标签管理

OPPO开放平台OPPO消息推送标签管理

标签管理

添加标签

接口

环境HTTPS请求地址备注
生产环境https://api-device.push.heytapmobi.com/设备API
沙箱环境暂无
描述内容
接口功能新增标签
请求方法POST
Content-Typeapplication/json
请求编码UTF-8
请求路径/server/v1/device/add_tags

请求参数

名称类型必须默认描述
nameString标签名称,字符长度50字符
descString标签描述,字符长度200字符

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString错误详细信息,不存在则不填
dataString返回值,JSON类型,包含响应结构体

响应示例

{
    "code": 0,
    "message": "success"
}

添加标签组

接口

描述内容
接口功能新增标签,app全局最多可新增1000个标签组
请求方法POST
Content-Typeapplication/json
请求编码UTF-8
请求路径/server/v1/device/add_tag_group

请求参数

名称类型必须默认描述
groupString标签组名称
tagsString标签列表,单个标签组最多可设置50个标签;多个标签之间使用英文分号分隔
descString标签描述

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString错误详细信息,不存在则不填
dataString返回值,JSON类型,包含响应结构体

响应示例

{
    "code": 0,
    "message": "success"
}

标签订阅接口

接口

描述内容
接口功能为指定设备绑定标签
请求方法POST
Content-Typeapplication/json
请求编码UTF-8
请求路径/server/v1/device/subscribe_tags

请求参数

名称类型必须默认描述
registration_idStringNull注册ID
tagsStringNull标签内容,多个标签之间使用英文分号分隔,单个标签字节长度50字符; 限制:单次调用接口可设置50个标签;单个用户总量上限也是50个标签 这个接口可重复调用,多次调用不会清理原来设置的标签

响应参数(JSON)

名称类型必须描述
codeInt 是返回码,请参考公共返回码与接口返回码
messageString错误详细信息,不存在则不填
dataString返回值,JSON类型,包含响应结构体

响应示例

{
    "code": 0,
    "message": "success",
}

取消标签订阅接口

接口

描述内容
接口功能取消订阅标签
请求方法POST
Content-Typeapplication/json
请求编码UTF-8
请求路径/server/v1/device/unsubscribe_tags

请求参数

名称类型必须默认描述
registration_idStringNull注册ID
tagsStringNull标签内容,多个标签之间使用分号分隔 限制:单次调用接口可删除50个标签

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString 否错误详细信息,不存在则不填
dataString返回值,JSON类型,包含响应结构体

响应示例

{
    "code": 0,
    "message": "success"
}

查询所有标签

接口

描述内容
接口功能查询该设备所有标签
请求方法POST
Content-Typeapplication/json
请求编码UTF-8
请求路径/server/v1/device/get_all_tags

请求参数

名称类型必须默认描述
registration_idStringNull注册ID

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString错误详细信息,不存在则不填
dataString返回值,JSON类型,包含响应结构体

响应示例

{
    "code": 0,
    "message": "success",
    "data": {
        "registrationId": "58ad47319e8d725350a5afd5",
        "tags": [
            {
                "tag": "深圳"
            },
            {
                "tag": "广州"
            }
        ]
    }
}

OPPO开放平台消息推送设置别名管理方法

OPPO开放平台消息推送设置别名管理方法

别名管理

别名(Alias)是OPPO PUSH提供的一项用户设备映射功能。通过别名,开发者可以为注册ID建立一个方便自己管理的别名,在推送消息时,可以通过别名推送的方式,传入设置好的别名,OPPO PUSH会把别名转化为注册ID并正确下发。OPPO PUSH提供了创建别名,删除别名和查询别名三个与别名相关的管理接口。

创建别名

接口

环境HTTPS请求地址备注
生产环境https://api-device.push.heytapmobi.com/设备API
沙箱环境暂无
描述内容
接口功能建立registration_id与alias的相互的一对一映射关系,需要注意的是,一个别名仅与一个注册ID构成映射关系,如果对同一个别名注册多个不同的注册ID映射,服务将为最近一次的注册行为建立映射关系并覆盖原有的所有映射。
请求方法POST
Content-Typeapplication/json
请求编码UTF-8
请求路径/server/v1/device/set_alias

请求参数

名称类型必须默认描述
registration_idStringNull注册ID
aliasStringNull别名内容(仅支持单值,与注册ID一一对应),最大64字符(不能输入分号)

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString错误详细信息,不存在则不填
dataString返回值,JSON类型,包含响应结构体

成功的响应示例

{
    "code": 0,
    "message": "success"
}

失败的响应示例

{
    "code": -1,
    "message": "Service Currently Unavailable"
}

删除别名

接口

描述内容
接口功能删除别名
请求方法POST
Content-Typeapplication/json
请求编码UTF-8
请求路径/server/v1/device/delete_alias

请求参数

名称类型必须默认描述
registration_idStringNull注册ID registration_id与alias不同时为空 registration_id与alias皆不为空时,registration_id优先于alias
aliasStringNull别名(仅支持单值,与注册ID一一对应) registration_id与alias不同时为空 registration_id与alias皆不为空时,registration_id优先于alias

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString错误详细信息,不存在则不填
dataString返回值,JSON类型,包含响应结构体

成功的响应示例

{
    "code": 0,
    "message": "success"
}

失败的响应示例

{
    "code": -1,
    "message": "Service Currently Unavailable"
}

查询别名

接口

描述内容
接口功能查询别名
请求方法POST
Content-Typeapplication/json
请求编码UTF-8
请求路径/server/v1/device/get_alias

请求参数

名称类型必须默认描述
registration_idString注册ID

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString错误详细信息,不存在则不填
dataString返回值,JSON类型,包含响应结构体

成功的响应示例

{
    "code": 0,
    "message": "success",
    "data": {
        "registrationId": "58ad47319e8d725350a5afd5",
        "alias": "AliasName"
    }
}

失败的响应示例

{
    "code": -1,
    "message": "Service Currently Unavailable"
}

OPPO开放平台 OPPO推送独立接口上传图片

OPPO开放平台 OPPO推送独立接口上传图片

上传图片

OPPO PUSH提供携带图片的消息推送能力,在使用图片推送前,需要先将图片上传到OPPO PUSH服务端,由OPPO PUSH服务端统一处理存储,推送消息时使用上传成功的图片ID作为图片索引,由OPPO PUSH服务将图片组装为消息体的内容部分并下发。

上传大图

接口

环境HTTPS请求地址备注
生产环境https://api-media.push.heytapmobi.com/媒体服务
沙箱环境暂无
描述内容
接口功能上传图片
请求方法POST
请求编码UTF-8
Content-Typemultipart/form-data
请求路径/server/v1/media/upload/big_picture

请求参数

图片文件按照multipart/form-data标准携带图片文件,图片要求尺寸876*324 px,文件大小1M以内,格式为PNG/JPG/JPEG。

名称类型必须默认描述
FILE图片文件
picture_ttlInt86400图片保存的存活时间(time_to_live) (单位:秒),最长30天

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString错误详细信息,不存在则不填
dataString返回值,JSON类型,包含响应结构体
{
    "code": 0,
    "message": "success",
    "data": {
        "big_picture_id": xxxxxxxxx //大图id
      }
}

上传图标

接口

描述内容
接口功能上传图片
请求方法POST
请求编码UTF-8
Content-Typemultipart/form-data
请求路径/server/v1/media/upload/small_picture

请求参数

图片文件按照multipart/form-data标准携带图片文件,图片要求尺寸144*144 px,文件大小为50k以内,格式为PNG/JPG/JPEG

名称类型必须默认描述
FILE图片文件
picture_ttlInt86400图片保存的存活时间(time_to_live) (单位:秒),最长30天

响应参数(JSON)

名称类型必须描述
codeInt返回码,请参考公共返回码与接口返回码
messageString错误详细信息,不存在则不填
dataString返回值,JSON类型,包含响应结构体

响应示例

{
    "code": 0,
    "message": "success",
    "data": {
        "small_picture_id": xxxxxxxxx, //图标id
      }
}

OPPO开放平台 消息回执说明

OPPO开放平台 消息回执说明

消息回执

消息回执是OPPO PUSH提供给开发者获知消息送达状态的功能。由于推送消息请求是异步调用,调用请求接口成功仅表示消息成功开始下发,不代表消息最终的推送状态,因此OPPO PUSH在后续的消息推送流程中捕获重要事件,并通过HTTP请求的形式反馈给开发者,这个功能成为消息回执功能。

开启和配置消息回执

要使用消息回执功能,开发者在推送每条消息时需要在对应的请求字段中配置回执参数,目前回执参数主要有两个,一个是开发者接受OPPO PUSH回执HTTP请求的目标地址URL,以及这个回执请求携带的URL参数。

回执参数是归属于消息体内容的参数,和其他消息体参数一样,按照不同推送方式,在创建广播消息体或在单点推送接口中正确配置配置参数即可获取消息的回执。

以下是回执参数说明:

名称类型是否必填默认描述是否支持单推
call_back_urlString* 仅支持registrationId推送方式 *
开发者接收消息送达的回执消息的URL地址。
OPPO PUSH提供消息回执的功能,消息回执的功能是指消息送达后,OPPO PUSH基于HTTP/HTTPS请求的方式告知开发者对应消息的送达情况。
要使用回执功能,开发者需要配置回执目标地址的URL参数,URL长度限制在限制200以内。
以下是一个使用回执的示例:
1.开发者配置本参数
2.消息到达设备后,OPPO PUSH根据本参数,向这个URL以
Content-Type为application/json的方式发送一个HTTP/HTTPS请求。请求内容的示例如下
JSON 数据示例:
[
{
“messageId”: “msgId1”, // 到达的消息ID
“appId”: “appid”, // 对应的应用ID
“taskId”: “taskId1”, // 如果是广播消息,对应taskID;如果是单推消息,该字段为消息ID
“registrationIds”: “regId1, regid2”, // 消息的推送目标注册ID
“eventTime”: “timestamp”, // 回执事件产生时间
“param”: “call_back_parameter”, // 开发者指定的回执参数
“eventType”: “push_arrive” // 到达事件,消息到达的事件被定义为push_arrive
},
// 对于完全一致的URL地址,OPPO PUSH可能会将相同URL地址回执信息在一个HTTP/HTTPS请求中发送,因此body里是一个长度大于等于1的JSON数组
{
“messageId”: “msgId1”,
“appId”: “appid”,
“taskId”: “taskId1”,
“registrationIds”: “regId1,regid2”,
“eventTime”: “timestamp”,
“param”: “call_back_parameter”,
“eventType”:
“push_arrive”
}
]
call_back_parameterString开发者指定的自定义回执参数。
数字符串长度限制在100以内,OPPO PUSH将这个参数设置在回执请求体单个JSON结构的param字段中。

回执事件

OPPO PUSH 有如下回执事件

回执事件含义触发条件备注
push_arrive表明消息成功到达设备消息成功到达设备,OPPO PUSH客户端向服务端反馈已经收到该条消息。表示消息到达OPPO PUSH客户端,不包含通知栏的展示,点击等后续动作含义。
regid_invalid无效的RegistrationID应用被卸载、应用自动注销、用户设备刷机、设备30天内未联网会导致RegistrationID失效开发者接收到无效RegistrationID的回执后可以做剔除或者过滤处理,减少无效推送

OPPO开放平台 推送通知栏消息 参数说明

OPPO开放平台 推送通知栏消息 参数说明

通知栏消息

名称类型是否必填默认描述是否支持单推
app_message_idStringApp开发者自定义消息Id,主要用于消息去重。
对于广播消息,相同app_message_id只会保存一条;
对于单推消息,相同app_message_id的消息只会对同一个目标推送一次。
styleInt1通知栏样式
1. 标准样式
2. 长文本样式
(ColorOS版本>5.0可用,通知栏第一条消息可展示全部内容,非第一条消息只展示一行内容)3. 大图样式
(ColorOS版本>5.0可用,通知栏第一条消息展示大图,非第一条消息不显示大图,推送方式仅支持广播,且不支持定速功能)。
big_picture_idString大图id【style为3时,必填】,通过上传大图接口获得大图id后可使用。
上传大图接口请参考服务端API介绍章节
small_picture_idString通知图标id,通过上传小图接口获得小图id后可使用。
上传小图接口请参考服务端API介绍章节。
titleString设置在通知栏展示的通知栏标题, 【字数串长度限制在50个字符内,中英文字符及特殊符号(如emoji)均视为一个字符】
sub_titleString子标题,设置在通知栏展示的通知栏标题, 【字符串长度限制在10个字符以内,中英文字符及特殊符号(如emoji)均视为一个字符计算】
contentString设置在通知栏展示的通知的正文内容
1)当选择标准样式(style 设置为 1)时,内容字符串长度限制在200以内;
2)当选择长文本样式(style设置 为 2)时,内容字符串长度限制在128以内;
3)当选择大图样式(style 设置为 3)时,内容字符串长度限制在50以内。
【字符串长度计算说明:中英文字符及特殊符号(如emoji)均视作一个字符计算】
click_action_typeInt0点击通知栏后触发的动作类型。
点击动作类型值的定义和含义如下:
0.启动应用;
1.跳转指定应用内页(action标签名);
2.跳转网页;
4.跳转指定应用内页(全路径类名);【非必填,默认值为0】;
5.跳转Intent scheme URL
click_action_activityStringNull当设置click_action_type为1或者4时,需要配置本参数。
应用内页地址【click_action_type为1/4/时必填,长度500】
示例:
假设应用注册了类名为InternalActivity的activity,应用内页的xml配置如下

当开发者期望消息被点击后跳转到这个应用内页,可以有两种方法传递参数:
指定click_action_type为1时,click_action_activity传入com.coloros.push.demo.internal
指定click_action_type为4时,click_action_activity传入com.coloros.push.demo.component.InternalActivity
click_action_urlStringNull跳转URL,当跳转的形式为URL时,click_action_type参数需要设置为2或5,同事设置本参数。本参数接受最大长度2000以内的URL。
示例:
click_action_type为2时,本参数可设置为http://oppo.com?key1=val1&key2=val2click_action_type为5时,本参数可设置为command://test?key1=val1&key2=val2
action_parametersStringNull跳转动作参数。
打开应用内页或网页时传递给应用或网页的附加参数【JSON格式】,字符串长度不超过4000。当跳转类型是URL类型时,参数会以URL参数直接拼接在URL后面。
示例:{“key1”:“value1”,“key2”:“value2”}
show_time_typeInt0通知栏展示类型。展示类型如下
0:即时展示
1:定时展示
show_start_timeLong0定时展示的开始时间。
选择定时展示后,消息将于设定的开始时间到结束时间之内展示。
本参数接受13位的unix时间戳。
show_end_timeLong0定时展示的结束时间。
选择定时展示后,消息将于设定的开始时间到结束时间之内展示。
本参数接受13位的unix时间戳。
off_lineBooleanTRUE是否是离线消息。
如果是离线消息,OPPO PUSH在设备离线期间缓存消息一段时间,等待设备上线接收。
off_line_ttlInt3600离线消息的存活时间,单位是秒。存活时间最大允许设置为10天,参数超过10天以10天传入。
push_time_typeInt0定时推送 (0, “即时”),(1, “定时”), 【只对全部用户推送生效】
push_start_timeLong0定时推送开始时间(根据time_zone转换成当地时间), 【push_time_type 为1必填】,时间的毫秒数
time_zoneStringGMT+08:00时区,默认值:(GMT+08:00)北京,香港,新加坡
fix_speedBooleanFALSE是否定速推送。广播类型消息专用,如果设置定速推送,消息将会以给定的速度均匀下发。
fix_speed_rateLong1000定速推送的速率,单位为条每秒。
指定消息为定速推送消息时,需要指定本参数。
定速推送速率范围在[1000, 10000]。
network_typeInt0推送的网络环境类型。
本参数将影响用户设备仅在指定类型的网络环境下接收消息。
参数定义如下:
0:不限联网方式;
1:仅wifi推送,设置后,消息只会在用户处于WiFi环境下才下发。
call_back_urlString回执功能详见回执一章仅支持registrationId推送方式开发者接收消息送达的回执消息的URL地址。
OPPO PUSH提供消息回执的功能,消息回执的功能是指消息送达后,OPPO PUSH基于HTTP/HTTPS请求的方式告知开发者对应消息的送达情况。
要使用回执功能,开发者需要配置回执目标地址的URL参数,URL长度限制在限制200以内。
以下是一个使用回执的示例:
1.开发者配置本参数
2.消息到达设备后,OPPO PUSH根据本参数,向这个URL以Content-Type为application/json的方式发送一个HTTP/HTTPS请求。

请求内容的示例如下JSON 数据示例:
[
{
“messageId”: “msgId1”, // 到达的消息ID
“appId”: “appid”, // 对应的应用ID
“taskId”: “taskId1”, // 如果是广播消息,对应taskID;如果是单推消息,该字段为消息ID
“registrationIds”: “regId1, regid2”, // 消息的推送目标注册ID
“eventTime”: “timestamp”, // 回执事件产生时间
“param”: “call_back_parameter”, // 开发者指定的回执参数
“eventType”: “push_arrive” // 到达事件,消息到达的事件被定义为push_arrive
},
// 对于完全一致的URL地址,OPPO PUSH可能会将相同URL地址回执信息在一个HTTP/HTTPS请求中发送,因此body里是一个长度大于等于1的JSON数组
{ “messageId”: “msgId1”,
“appId”: “appid”,
“taskId”: “taskId1”,
“registrationIds”: “regId1,regid2”,
“eventTime”: “timestamp”,
“param”: “call_back_parameter”,
“eventType”: “push_arrive”
}
]
call_back_parameterString开发者指定的自定义回执参数。
参数字符串长度限制在100以内,OPPO PUSH将这个参数设置在回执请求体单个JSON结构的param字段中。
channel_idStringOPPO PUSH 提供的默认通道ID指定下发的通道ID。
通知栏通道(NotificationChannel),从Android9开始,Android设备发送通知栏消息必须要指定通道ID,(如果是快应用,必须带置顶的通道Id:OPPO PUSH推送)
show_ttlInt86400限时展示时间(单位:秒)。
消息在通知栏展示后开始计时,展示时长超过展示事件后,消息会从通知栏中消失。
显示展示的时间范围在6小时到48小时之间,默认24小时。
notify_idInt由OPPO PUSH生成每条消息在通知显示时的唯一标识,主要用于新旧消息的覆盖。不设置本参数时,PUSH自动为给每条消息生成一个唯一标识;
当不同的消息设置为同一个notify_id,到达设备的新消息将覆盖旧消息展示在设备通知栏中。
auditResponseJSONnull推必安信息审核api响应内容,详见《基于第三方审核结果的消息推送》支持

OPPO推送能力开发 调用地址,公共参数和返回码

OPPO推送能力开发 调用地址,公共参数和返回码

请求地址

OPPO PUSH提供以下三个请求URL地址,分别提供国内的消息推送服务,海外消息推送服务,以及国内环境的其他非推送的反馈功能。

环境HTTPS请求地址备注
国内环境https://api.push.oppomobile.com/对国内设备推送消息
海外环境https://api-intl.push.oppomobile.com/对海外设备推送消息
国内环境https://feedback.push.oppomobile.com/反馈功能

如何区分国内设备:
RegistrationID 使用“_”符号分隔成数组。
数组大小为1:regId属于国内;如:b6bbd94b59cdb5df8391642c1509b7fe
数组大小为2:第一个值为“CN”,属于国内;如:CN_b6bbd94b59cdb5df8391642c1509b7fe
数组大小为3:第二个值为“CN”,属于国内;如:OPPO_CN_b6bbd94b59cdb5df8391642c1509b7fe

公共参数

公共参数是所有请求都需要携带的参数。

名称类型默认描述
auth_tokenString必填鉴权令牌
auth_token有效期为24小时,过期后无法使用,在HTTP请求体中携带该参数。 鉴权令牌通过调用鉴权接口可以获得,详情请参考鉴权章节。

返回码

返回码是携带在接口响应的code字段中,范围在(-1-100)的数字,通过返回码可以判断接口调用的结果。表示错误的返回码一般是由于用户的请求不符合调用规范引的。用户遇到这些错误的返回,建议先检查应用的接入权限,推送权限是否正常,以及是否按照参数各式和限制正确设置请求参数。

Code英文描述中文描述
-2Service in Flow Control服务器流量控制
-1Service Currently Unavailable服务不可用,此时请开发者稍候再试
0Success成功,表明接口调用成功
11Invalid AuthToken不合法的AuthToken
12Http Action Not AllowedHTTP 方法不正确
13App Call Limited应用调用次数超限,包含调用频率超限
14Invalid App Key无效的AppKey参数
15Missing App Key缺少AppKey参数
16Invalid Signaturesign校验不通过,无效签名
17Missing Signature缺少签名参数
18Missing Timestamp缺少时间戳参数
19Invalid Timestamp非法的时间戳参数
20Invalid Method不存在的方法名
21Missing Method缺少方法名参数
22Missing Version缺少版本参数
23Invalid Version非法的版本参数,用户传入的版本号格式错误,必需为数字格式
24Unsupported Version不支持的版本号,用户传入的版本号没有被提供
25Invalid Encoding编码错误,一般是用户做http请求的时候没有用UTF-8编码请求造成的
26IP Black ListIP黑名单
27Access Denied没有此功能的权限,拒绝访问
28App Disabled应用不可用
29Missing Auth Token缺少Auth Token参数
30Api Permission Denied该应用没有API推送的权限
31Data Not Exist数据不存在
32Data Duplicate数据重复
33The number of messages exceeds the daily limit消息条数超过日限额
34The number of upload pictures exceeds the daily limit上传图片超过日限额
40Missing Required Arguments缺少必选参数,API文档中设置为必选的参数是必传的,请仔细核对文档
41Invalid Arguments参数错误,一般是用户传入参数非法引起的,请仔细检查入参格式、范围是否一一对应
51Invalid Picture图片无效,一般是图片格式、图片分辨率、图片大小不符合格式及图片未上传等,请仔细检查图片格式及上传文件方式。

业务级错误问题:
请求后端业务服务器出现的问题,返回的错误码在10000到20000之间,具体业务错误码可参见广播推送、单点推送等接口。 每个接口最多10个返回码

OPPO开放平台 消息推送服务端鉴权 方法

OPPO开放平台 消息推送服务端鉴权 方法

鉴权

开发者通过OPPO PUSH服务端的鉴权接口验证合法身份,并获得权限令牌。其他所有的API请求都需要在HTTP body中携带auth_token字段以进行合法的服务调用。为保证安全性,令牌具有一定的时效性,因此调用者也需要定时更新自己的权限令牌。本文后续接口默认都认为已携带该参数。

鉴权接口

描述内容
接口功能开发者身份鉴权,获得令牌。
请求方法POST
请求编码UTF-8
Content-Typeapplication/x-www-form-urlencoded
请求路径/server/v1/auth

请求参数

以下参数均在HTTP body中携带

名称类型默认描述
app_keyString必填OPPO PUSH发放给合法应用的AppKey。
signString必填加密签名。
是用AppKey、当前时间戳毫秒数、MasterSecret拼接而成的字符串并用SHA256加密而成的字符串。
MasterSecret是注册应用时OPPO PUSH发放的服务端密钥,与AppKey对应
timestampLong必填当前时间的unix时间戳。
格式为13位时间毫秒数,时区采用GMT+8。
需要使用最近一小时内的时间戳,否则会导致鉴权失败

请求响应

返回结果携带在HTTP响应的body中,整个body内容是JSON格式。

名称类型描述
codeInt返回码,具体含义请参考返回码描述(增加超链接)
messageString请求响应结果的文字描述
dataJSON返回值,JSON类型,包含了具体的鉴权结果

响应示例:

{
    "code": 0,
    "message": "success",
    "data": {
        //权限令牌,推送消息时,需要提供auth_token,有效期默认为24小时,过期后无法使用
        "auth_token": "58ad47319e8d725350a5afd5" 
         "create_time": "时间毫秒数"
      }
}

OPPO推送服务端 Java SDK集成

OPPO推送服务端 Java SDK集成

接入准备

运行环境

SDK使用Java编写,接入前需确认是否安装Java环境并且版本为1.7及以上

获取SDK

1)开发者需要登录推送运营平台获取应用的AppKey, MasterSecret
2)下载SDK相关包:OPush_JAVA_SDK.zip

导入SDK

1)解压已下载的SDK包
2)将文件夹下所有jar文件放入项目工程的libs目录
3)刷新工程,确保文件出现在libs目录下。如果没有的话请手动添加

SDK类定义说明

类名使用说明
Sender发送消息工具类,可以发送单推、批量单推、广播消息
Environment枚举类
Environment.CHINA_PRODUCTION 中国
Environment.INTERNATIONAL 海外
Notification通知栏消息
Target推送目标类,包含推送目标类型、推送目标
TargetType推送目标类型,支持registration_id推送类型
Result服务器返回的结果
ReturnCode返回的状态码,根据这个状态可以自检请求参数的是否合法
ReturnCode.ErrorCode平台返回的状态码枚举类

详情见SDK javadoc

接入SDK示范

创建sender对象

SDK提供Sender类封装了OPPO Push推送服务的各类服务接口。因此,使用SDK推送消息或调用其他服务,首先要创建Sender对象。

// 使用appKey, masterSecret创建sender对象(每次发送消息都使用这个sender对象)
Sender sender = Sender.newBuilder()
        .appKey("appKey") // 设置appKey
        .masterSecret("masterSecret") // 设置masterSecret
        .env(Environment.CHINA_PRODUCTION)  // 中国
        .httpMaxConnection(64) // 设置http最大连接数
        .httpMaxRoute(64)   // 设置最大http路由连接数
        .httpConnectionTimeout(5000) // http连接超时时间
        .httpConnectRequestTimeout(5000) // 等待连接超时时间
        .httpSocketTimeout(5000) // socket超时时间
        .build();

推送消息

创建通知栏消息体

推送消息前,需要构造消息内容,SDK提供Notification类供开发者设置消息内容。

/**
 * 这是构造一个通知栏消息体Notification对象的实例方法。
 * 请注意,后续的例子会调用这个getNotification()方法
 * */
private Notification getNotification() {
    Notification notification = new Notification();
    
    // 标题,内容是必填项
    notification.setTitle("通知栏消息tile");
    notification.setContent("通知栏内容");

    /*
     * 以下参数非必填项,参考OPPO push服务端api文档进行设置,本示例选取部分参数进行示范
     */
    //通知栏样式 1. 标准样式  2. 长文本样式  3. 大图样式 【非必填,默认1-标准样式】
    notification.setStyle(1);
    // App开发者自定义消息Id,OPPO推送平台根据此ID做去重处理,对于广播推送相同appMessageId只会保存一次,对于单推相同appMessageId只会推送一次
    notification.setAppMessageId(UUID.randomUUID().toString());
    // 应用接收消息到达回执的回调URL,字数限制200以内,中英文均以一个计算
    notification.setCallBackUrl("http://www.test.com");
    // App开发者自定义回执参数,字数限制50以内,中英文均以一个计算
    notification.setCallBackParameter("");
    // 点击动作类型0,启动应用;1,打开应用内页(activity的intent action);2,打开网页;4,打开应用内页(activity);【非必填,默认值为0】;5,Intent scheme URL
    notification.setClickActionType(4);
    // 应用内页地址【click_action_type为1或4时必填,长度500】
    notification.setClickActionActivity("com.coloros.push.demo.component.InternalActivity");
    // 网页地址【click_action_type为2必填,长度500】
    notification.setClickActionUrl("http://www.test.com");
    // 动作参数,打开应用内页或网页时传递给应用或网页【JSON格式,非必填】,字符数不能超过4K,示例:{"key1":"value1","key2":"value2"}
    notification.setActionParameters("{\"key1\":\"value1\",\"key2\":\"value2\"}");
    // 展示类型 (0, “即时”),(1, “定时”)
    notification.setShowTimeType(1);
    // 定时展示开始时间(根据time_zone转换成当地时间),时间的毫秒数
    notification.setShowStartTime(System.currentTimeMillis() + 1000 * 60 * 3);
    // 定时展示结束时间(根据time_zone转换成当地时间),时间的毫秒数
    notification.setShowEndTime(System.currentTimeMillis() + 1000 * 60 * 5);
    // 是否进离线消息,【非必填,默认为True】
    notification.setOffLine(true);
    // 离线消息的存活时间(time_to_live) (单位:秒), 【off_line值为true时,必填,最长3天】
    notification.setOffLineTtl(24 * 3600);
    // 时区,默认值:(GMT+08:00)北京,香港,新加坡
    notification.setTimeZone("GMT+08:00");
    // 0:不限联网方式, 1:仅wifi推送
    notification.setNetworkType(0);
    return notification;
}

推送单推通知栏消息

// 创建通知栏消息体
Notification notification = getNotification(); 
// 创建推送目标对象,传入注册ID
Target target = Target.build("CN_8fa0618f178145d8c2a44091a1326411"); 
// 调用单推接口,推送消息,获得调用结果
Result result = sender.unicastNotification(notification, target); 
// 获取http请求状态码
result.getStatusCode(); 
// 获取平台返回码
result.getReturnCode(); 
// 获取平台返回的messageId
result.getMessageId();  

推送批量单推通知栏消息

// batch最大长度为1000,超出会导致请求失败
Map batch = new HashMap(); 
// 创建目标对象并加入到批量队列中
batch.put(Target.build("CN_ddfaa7db1e4ecf75014143bdbc3e53ea"), getNotification());
batch.put(Target.build("CN_8fa0618f178145d8c2a44091a1326411"), getNotification());
// 调用批量单推接口,推送消息,获得调用结果
Result result = sender.unicastBatchNotification(batch); 
// 获取http请求状态码
result.getStatusCode(); 
// 获取平台返回码
result.getReturnCode(); 
// 获取对应批量单推结果
List batchResult = result.getUnicastBatchResults(); 
for (Result.UnicastBatchResult record : batchResult) {
    record.getMessageId();
    record.getErrorCode();
    record.getErrorMessage();
    record.getTargetValue();
}

保存和发送广播通知栏消息

/**
 * 推送广播消息分为两步
 * 首先调用保存消息体接口,保存广播消息内容,得到消息ID
 * 使用消息ID调用广播推送接口,推送广播消息
 * */

// 创建通知栏消息体
Notification broadNotification = getNotification();

// 发送保存消息体请求
Result saveResult = sender.saveNotification(broadNotification); 
// 获取messageId
String messageId = saveResult.getMessageId(); 
// 获取http请求状态码
saveResult.getStatusCode(); 
// 获取平台返回码
saveResult.getReturnCode(); 


// 创建推送目标 广播目标接受多个注册ID,字符串中以英文分号';'分割
Target target = new Target(); 
target.setTargetValue("CN_ddfaa7db1e4ecf75014143bdbc3e53ea;CN_8fa0618f178145d8c2a44091a1326411");

// 发送广播消息
Result broadResult = sender.broadcastNotification(messageId, target); 
// 获取广播taskId
broadResult.getTaskId(); 
List errorList = broadResult.getBroadcastErrorResults();
// 如果大小为0,代表所有目标发送成功
if (errorList != null && errorList.size() > 0) { 
    for (Result.BroadcastErrorResult error : errorList) {
        // 错误码
        error.getErrorCode(); 
        // 目标
        error.getTargetValue(); 
    }
}

上传图片

如果要推送带图片的消息,需要先上传图片。
注意:仅广播通知栏消息 支持图片推送功能。

上传大图

// 指定图片文件
File bigPicture = new File("大图文件路径");
// 图片过期时间(单位秒),最长30天 
int bigPictureTtl = 86400; 
// 使用Sender调用上传大图接口 
Result uploadBigPicResult = sender.uploadBigPicture(bigPictureTtl, bigPicture); 
// 获取大图id,保存消息体填入
String bigPictureId = uploadBigPicResult.getBigPictureId(); 

// 创建消息体时选择图片推送消息类型(3表示图片推送),并传入图片ID
Notification notification = getNotification();
notification.setStyle(3);
notification.setBigPictureId(bigPictureId);

// 执行保存消息体,广播推送等后续操作
// save and send notification ...

上传图标

// 指定图片文件
File smallPicture = new File("小图文件路径");
// 图片过期时间(单位秒),最长30天
int smallPictureTtl = 86400;  
// 使用Sender对象调用上传小图接口
Result uploadSmallPicResult = sender.uploadSmallPicture(smallPictureTtl, smallPicture);
// 获取小图id,保存消息体
String smallPictureId = uploadSmallPicResult.getSmallPictureId(); 

// 创建消息体时选择图片推送消息类型(3表示图片推送),并传入图片ID
Notification notification = getNotification();
notification.setStyle(3);
notification.set(smallPictureId);

// 执行保存消息体,广播推送等后续操作
// save and send notification ...

OPPO开放平台 OPPO推送SDK数据安全说明

OPPO开放平台 OPPO推送SDK数据安全说明

SDK工作方式

OPush SDK在打包时被集成到应用中,随应用启动而运行,当应用关闭时,SDK会随着应用关闭,不会在后台进行任何操作。

SDK权限说明

SDK需以下权限,具体集成方法请参考“Android SDK集成”

//网络相关
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
<uses-permission android:name="android.permission.INTERNET">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">

//鉴权
android:permission="com.heytap.mcs.permission.SEND_PUSH_MESSAGE"

SDK数据搜集

请参见 “推送个人信息保护政策”和 “个人数据处理说明

SDK数据安全保护

服务端鉴权,详情请见服务端“鉴权

APP 隐私政策声明

当您的应用集成本SDK后,需要在APP隐私政策中添加以下内容:
SDK名称:OPUSH SDK
使用目的:推送通知栏消息
使用方式:去标识,加密传输的安全方式
收集数据类型:设备信息、应用信息、网络信息

OPPO开放平台 推送私信通道申请

OPPO开放平台 推送私信通道申请

为了改善终端用户的通知体验,营造良好可持续的推送生态,OPPO推送对各个APP的push消息数量进行了限量管控;同时针对即时聊天/系统提醒等push需求可以申请走私信通道(该通道不限量);

消息分类说明

OPPO PUSH将消息分为私信消息和公信消息两类。
私信消息是针对用户有一定关注度,且希望能及时接收的信息,如即时聊天信息、个人订单变化、快递通知、订阅内容更新、评论互动、会员积分变动等,与单个用户信息强相关的内容;

私信消息场景概述
通讯信息用户间聊天消息(私信、私聊、群聊),包括聊天消息中的图片、文件传输、音/视频通话,不包括官方号或者商家批量推送给用户的私信、广告;
个人状态变化用户帐号上下线、帐号状态变化、帐号信息认证、等级权限变更等相关提醒。
个人财务提醒个人财务、交易相关事项提醒,包括收付款、银行到账&扣款、交易提醒、催缴&退款信息、充值、账单、贷款受理进度、还款/逾期提醒、资金冻结提醒、资金限制提醒、缴纳保证金提醒等。
个人设备提醒1、IoT设备发出的设备状态/信息/提示/告警等提醒消息。
2、监控设备监控动态及报警提醒;
个人资源变化用户个人的虚拟财产如积分/余额等变更提醒,以及增值服务的充值/到期/续费/到账提醒。
注意:
这里的虚拟财产必须是非促销类的, 促进用户增长的领金币或促销类红包/优惠券不属于重要消息。
个人订单状态变化及日程/邮件提醒1、生成订单相关信息  如:下单成功、司机接单提醒、卖家收到新订单、订单详情、订单状态、物流状态、订单售后、订单投诉处理进度、开票信息等;
2、日程提醒:登机、酒店入住、会议提醒等等。
3、邮件的发送、接收状态信息
个人手动关注的
某个主体内容更新
1、用户在App内主动设置的提醒信息并确认会收到推送,如:主动设置的开播提醒、书籍更新;
2、设置的商品或机票降价、商品开团提醒;主动关注的行情动态提醒;主动设置的签到打卡提醒;付费订阅内容更新提醒等。
注意:
1)关注的主播开播提醒、特别关注的帐号/作者发布动态才属于重要消息,普通关注的帐号/作者发布动态不属于重要消息。
2)被赞、被@、关注、转发、评论、回复等社交互动类消息属于普通消息,不属于重要消息,但用户对商家的点评提醒、老师对学生作业的评论提醒除外。

公信消息是针对用户关注度不高,且对于接收这类信息并无心理预期,如热点新闻、新品推广、平台公告、社区话题、有奖活动等,多用户普适性的内容;

公信消息场景概述
内容推荐非用户主动订阅,APP向用户推送的资讯、内容。如:微博、资讯、新闻、点评、小说、广告、视频、音频、直播等等
陌生人推荐大V、主播、异性、可能认识的人等
促销活动及推荐商品推广、宣传、折扣、红包、领劵、返现等优惠信息;推荐产品功能、服务更新,商品、商家、店铺推荐的内容,例如“您的授信额度增加”
业务到期提醒提醒用户保险、医疗、水电到期续保续费,或者话费、会员等月结日充值提醒等服务续期类推送
运营活动各类APP内非用户主动设置的需用户参与的活动提醒消息、小游戏提醒、服务或商品评价提醒等。 如:抽奖、积分、签到、任务、分享、偷菜、领金币等
社交动态用户之间的社交互动提醒,如:添加好友、被赞、被@、评论、留言、关注、转发、评论/回复
普通关注着的动态关注的人发布作品,如:关注的人直播提醒、动态更新

公信信道和私信信道权限对比

类型私信信道公信信道
推送数量限制不限量有公信类通道共享推送次数,当日达到推送量限制后,所有公信类通道将无法再推送消息;
推送限量:当累计用户数<50000时,按100000计算;当累计用户数≥50000时,累计用户数*2。
配置方式客户端适配通道、并且邮件申请通过后,需要在OPPO推送平台上登记该通道,并将通道对应属性设置为“私信”默认开通
服务端推送方法单点推送”api(服务端SDK对应unicastNotification、unicastBatchNotification方法),channel_id带上私信通道的通道ID“单点推送”和“广播推送”都支持;
消息类型限制私信消息(通过私信模板限制)不限制,公信消息/私信消息均可

创建私信通道

Step1:应用客户端开发在客户端创建私信通道,并记下通道名称和通道ID。

创建通道方式:通知通道(Channel)适配
注意:通道名称和通道ID需与申请表格内提交一致并确保后续消息下发时消息体与对应通道的模板相匹配。

Step2:将已创建通道的客户端发版。

Step3:开发者进行私信通道登记

用开发者帐号登陆push.oppo.com,进入应用,在【配置管理-通道配置-新建通道】,进行通道登记,“消息ID”和“通道名称”与客户端填写的一致,点击【确定】进行提交。

私信通道权益申请

1、私信通道首次申请

step1:填写私信模板

下载表格文档,并填制通道信息:
开通私信通道申请-APP名称-申请日期.xlsx

step2:发送邮件至push@oppo.com,标题及正文如下,同时附上私信模板Excel文档

邮件标题:私信通道开通申请——应用名称
邮件正文:
应用ID:XXX
应用名称:XXX
应用包名:XXX
私信专用通道名称:
私信专用通道ID:
业务接口人联系微信:
XX应用申请开通私信通道,并承诺遵守运营规则,仅在私信通道推送模板相关消息。
该通道对应的私信消息模板见附件:

提示:
1)如果之前没有创建过通道,则需要新建通道,因为根据规范Android8.0以上推送消息需要配置通道,否则消息可能无法触达用户。
2)“通讯信息”需单独开通一个私信通道,详见下方《无模板私信通道申请》

2、 新增模板申请:

当有新增的私信消息模板,请发送邮件至push@oppo.com进行记录,以免触发违规。

邮件标题:新增私信模板申请——应用名称
邮件正文:
应用ID:XXX
应用名称:XXX
应用包名:XXX
私信专用通道名称:
私信专用通道ID:
业务接口人联系微信:
XX应用申请开通私信通道,并承诺遵守运营规则,仅在私信通道推送模板相关消息。
该通道对应的私信消息模板见附件:

3、无模板私信通道申请

对于“通讯信息”类型,若可以提供对应的模板,则按照<1、私信通道首次申请>进行操作申请;
若是无法提供模板,则需要针对“通讯信息”单独开通一个私信通道,该通道能且只能发送聊天消息;
特别说明:该通道申请后,OPPO PUSH将会定期核查,若应用于该通道发送“通讯信息”以外的消息,将永久禁用单独聊天消息功能;

step1:填写《无模板私信通道申请表》

下载表格文档,并填制通道信息:
开通无模板私信通道申请-APP名称-申请日期.xlsx

step2:发送邮件至push@oppo.com,标题及正文如下,同时附上该通道对应的场景说明、及相关截图或录屏内容附件

邮件标题:无模板私信通道申请——应用名称
邮件正文:
应用ID:XXX
应用名称:XXX
应用包名:XXX
私信专用通道名称:
私信专用通道ID:
业务接口人联系微信:
XX应用申请开通无模板的私信通道,并承诺遵守运营规则,仅在该通道推送“通讯信息”。
对应的场景及相关截图或录屏内容见附件

运营监管及处罚

处罚标准

对于私信通道发送公信信息的情况

OPPO Push将会对私信通道发送信息情况结合提供的私信模板进行监控,若出现利用私信通道发送模板以外的信息量达到一定比例,将视为违规;
第一次违规:邮件警告,并要求7个自然日整改,逾期未收到反馈邮件,按照二次违规处理;
第二次违规:关闭私信权限15个自然日,
第三次违规:关闭私信权限30个自然日;
三次以上属于严重违规,永久禁用私信通道;

*可能触发该违规的场景:
1、开发者仅申请开通了私信通道,没有提交模板;
2、开发者提供的模板与私信通道实际推送的消息内容不一致;
建议开发者合理评估应用推送需求。若公信额度充裕,优先使用公信通道进行消息下发;若申请私信通道权限,请确保私信通道内推送的消息与所提交的模板内容一致。

对于通讯消息通道发送除聊天以外的信息

针对通讯消息,提交无模板私信通道申请。平台将会定期核查通讯消息通道,若应用在该通道发送“通讯信息”以外的消息,将永久禁用单独聊天消息功能;

权益恢复申请

因私信通道未提交模板或发送模板以外信息,被邮件警告或者关闭私信通道的app,可以在整改完成后,填写附件并发送邮件至push@oppo.com申请恢复;
下载表格文档,并填制通道信息:
恢复私信通道申请-APP名称-申请日期.xlsx

邮件标题:恢复私信通道申请——应用名称
邮件正文:
应用ID:XXX
应用名称:XXX
应用包名:XXX
私信专用通道名称:
私信专用通道ID:
业务接口人联系微信:
您好,我司应用XX(应用名称)于XXXX年XX月XX日由于XX被关闭XX私信通道。
当前,我司已进行整改,下线违规消息,整改报告见附件。
同时,我司承诺:不再用私信通道发送公信。
请OPPO推送团队恢复XX(应用名称)的私信通道。 该通道对应的私信消息模板见附件:

FAQ

1、公信通道必须走公信消息,私信通道必须走私信消息吗?

公信通道不限制消息类型;
私信通道必须走私信消息,且确保这些私信消息已经提交了对应的模板,否则会受到到运营监管处罚;

2、私信通道开通后,随着时间推移,各个APP的私信模板由于业务的诉求而变更时,需要重新提交申请么?

需要;
私信模板是判断私信通道push合规使用的重要方式,APP业务私信模板发生变化,若没有及时知会给OPPO PUSH团队,则会使得这部分私信被监控系统判断为公信内容,而收到对应处罚。

3、已经申请过了私信通道,原有的私信通道还有效吗?

原有通道有效,但需要补充私信模板。

4、不申请私信通道会会有什么影响吗?

可以使用公信通道下发消息,公信通道存在每日推送量限制
公信推送量限制请参考《推送服务受限说明

5、创建私信通道需要按私信类型分类吗?

有模板私信通道须与无模板(通讯消息)私信通道区分(通道ID与名称不能为同一个),以免系统识别通讯消息通道下发除聊天以外的消息导致违规。
注意:通道名称和通道ID需与申请表格内提交一致并确保后续消息下发时消息体与对应通道的模板相匹配。

6、模板Excel附件应该怎么填制呢?

1、选择对应的私信类型,私信类型对于不在分类中的场景,私信类型请选择“其他”;
2、标题模板和内容模板中符号“$$”之间的内容是“可变量”,其他的内容是“固定不变的”;为确保模板是对应到某一固定的业务场景,模板内容不能全部为“可变量”,必须包含有具体含义的固定不变内容。

示例:您好,请查收$XXXX$ ;您好,您的设备$XX$检测到$XXX$;

3、对于通讯消息及需要用户主动设置才接收到的提醒(如订阅类通知),需要提供相关设置界面的截图或者录屏材料,以确保申请的场景满足规范要求;

OPPO开放平台消息推送自检工具

OPPO开放平台消息推送自检工具

自检工具

OPush Demo的使用

OPush Demo提供了一些基本功能的接入示例,开发者可以在接入SDK之前,通过demo方快速体验和了解推送的实际效果。也可以测试一些基本功能例如注册、注销、清除通知、打开通知设置等功能。或者通过修改部分代码,可以快速验证接入功能。

代码参考demo下载:heytapPushDemo.rar(3.0.0版本)

OPPO开放平台消息推送错误代码定义

OPPO开放平台消息推送错误代码定义

错误代码定义

错误码定义说明

参考类 com.coloros.mcssdk.mode.ErrorCode 中的错误码定义进行处理,详细如下:

通用错误码

Code英文描述中文描述
-5ERROR_REGISTERID_CHECK_ERROR监测registerId有误
-4ERROR_APPPACKAGE_EMPTY应用包名为空
-3ERROR_DEVICEID_NULL设备id为空
-2ERROR初始值
-1SERVICE_CURRENTLY_UNAVAILABLE服务不可用,请开发者稍候再试
0SUCCESS成功,只表明接口调用成功

应用注册接口错误码

Code英文描述中文描述
11Insufficient ISV Permissions无此API调用权限,开发者权限不足
12Http Action Not AllowedHTTP 方法不正确
13App Call Limited应用调用次数超限,包含调用频率超限
14Invalid App Key无效的AppKey参数
15Missing App Key缺少AppKey参数
16Invalid Signature sign校验不通过,无效签名
17Missing Signature缺少签名参数
18Missing Timestamp缺少时间戳参数
19Invalid Timestamp非法的时间戳参数
20Invalid Method不存在的方法名
21Missing Method缺少方法名参数
22Missing Version缺少版本参数
23Invalid Version非法的版本参数,用户传入的版本号格式错误,必需为数字格式
24Unsupported Version不支持的版本号,用户传入的版本号没有被提供
25Invalid encoding编码错误,一般是用户做http请求的时候没有用UTF-8编码请求造成
26IP Black ListIP黑名单
40Missing Required Arguments缺少必选参数 ,API文档中设置为必选的参数是必传的,请仔细核对文档
41Invalid Arguments参数错误,一般是用户传入参数非法引起的,请仔细检查入参格式、范围是否一一对应
42ERROR_MCS_NOT_PREPAREDMCS没有完成初始化

onError错误码

Code英文描述中文描述
-1ERROR_CODE_REGISTER_API_FREQUENTLY注册频繁调用
-2ERROR_CODE_UNREGISTER_API_FREQUENTLY注销频繁调用
-3ERROR_CODE_PAUSE_API_FREQUENTLY停止推送频繁调用
-4ERROR_CODE_RESUME_PUSH_API_FREQUENTLY恢复推送频繁调用
-5ERROR_CODE_GET_NOTIFICATION_STATUS_API_FREQUENTLY获取通知栏状态频繁调用
-6ERROR_CODE_SET_NOTIFICATION_TYPE_API_FREQUENTLY设置通知栏tyye频繁调用
-7ERROR_CODE_CLEAR_NOTIFICATION_TYPE_API_FREQUENTLY清除通知栏type频繁调用
-8ERROR_CODE_OPEN_NOTIFICATION_SETTINGS_API_FREQUENTLY打开通知栏设置界面频繁调用
-9ERROR_CODE_CLEAR_NOTIFICATIONS_API_FREQUENTLY清除通知栏消息频繁调用
-10ERROR_CODE_GET_PUSH_STATUS_API_FREQUENTLY获取push状态频繁调用
-11ERROR_CODE_SET_PUSH_TIME_API_FREQUENTLY设置push时间频繁调用
-12ERROR_CODE_REQUEST_NOTIFICATION_PERMISSION_API_FREQUENTLY请求通知栏权限频繁调用
-13ERROR_CODE_SEND_INSTANT_ACK_API_FREQUENTLY发送ack频繁调用
-14ERROR_CODE_STATISTIC_FREQUENTLY埋点上报频繁调用
-15ERROR_CODE_ENABLE_APP_NOTIFICATION_FREQUENTLY关闭应用通知栏频繁调用
-16ERROR_CODE_DISABLE_APP_NOTIFICATION_FREQUENTLY开启应用通知栏频繁调用
-17ERROR_CODE_GET_APP_NOTIFICATION_FREQUENTLY获取应用通知栏状态频繁

OPPO消息推送 样式配置教程

OPPO消息推送 样式配置教程

样式配置

支持Web平台及API两种推送方式,Web平台推送请参考 推送运营平台指南 > 创建推送,API推送请参考服务端指南>通知栏消息
推送内容展示样式有短文本、长文本、大图三种展示样式

短文本

消息内容最大文本最大字数为50。
通知栏第一条可展示全部内容,非第一条只展示一行内容,超过一行的内容不会显示。

长文本

ColorOS版本大于5.0可用,消息内容文本最大字数为120。
通知栏第一条消息可展示全部内容,非第一条只展示一行内容。

大图

ColorOS版本大于5.0可用。
在连接WIFI状态下通知栏第一条消息可显示大图,非通知栏第一条消息或非WIFI状态下消息不显示大图。

OPPO消息推送高级能力配置

OPPO消息推送高级能力配置

客户端高级能力配置

推送弹窗开关

在第一次启动APP时会弹窗询问用户是否开启通知栏权限,如果用户选择允许,则直接开启,不需要跳转到系统设置页让用户手动开启,简单高效能大幅提升通知栏权限开启的成功率。
用户一旦作出选择,整个APP生命周期内不会再次触发。
仅限Color OS 12.1以下。

/**
 * 弹出通知栏权限弹窗(仅一次)
 */
27)void requestNotificationPermission ();

服务端高级能力

具体使用可参考【服务端指南/通知栏消息

推送方式

推送服务支持标签、RegID、Alias等推送方式。

基于标签的推送

标签(Topic)是具有某些相同属性的用户集合, 在应用初始化时或运行过程中,开发者可结合自己的业务特征,给用户打上不同的标签(Topic)。
在推送消息时,开发者可以结合每条消息的内容和目标用户,选择所对应的标签,完成请求后,OPPO PUSH会对这一标签的用户群进行消息推送,满足精准推送的需求。

基于 RegID 的推送

RegID是应用在对应设备的上唯一标识,当开发者需要给一个或多个设备推送消息时,可以使用基于 RegID的推送,将个性化的信息推送给指定设备。这种方式适用于需要为每个用户订制个性化推送的场景。
注意:RegID在用户设备刷机、卸载应用、或设备长时间无连接时会失效

基于 Alias 的推送

alias 是OPPO推送提供的一种个性化设定, 开发者可以将用户在应用内的帐号或其它用户唯一标识设定为用户设备 RegID 的别名,在推送中可以直接基于别名进行推送,可参考【别名管理】进行使用。
别名不仅方便开发者将推送与自有的帐号系统进行关联,同时也避免了因需要保存设备 RegID 与自有帐号的对应关系而额外带来的开发和存储成本。

注意:
1)alias与RegID(设备)一一对应,同一个alias不能对应多个RegID,alias对应的RegID以最后一次setalias对应的RegID为准;
2)alias失效的可能原因如下:
主动调用unsetalias;
alias对应的RegID已经失效;
设置alias不成功(调用setalias失败);
3)alias只跟设备相关,所以请使用用户帐号作为alias时,合理判断alias可能失效的情况。

定时推送

可以根据业务需求自定义消息推送时间,可以选择立即推送或指定时间推送。定时展示功能设置成功后消息即时下发,到达用户手机后并不直接展示出来,到了设置的定时展示时间,消息才展示出来。

A/B测试推送

A/B测试推送:为满足业务方对推送文案进行优选测试, 推送消息推送提供A/B测试推送功能,支持把不同的文案推送给具有相同特征的人群,运营人员可比较文案点击率,选出最优文案发送给目标用户。

自定义消息有效期

开发者可设置每条消息的有效期,在设置的有效期内,只要设备联网,便会收到消息。消息有效期最长10天,最短1小时。

消息标题和内容支持添加emoji表情

消息标题和内容支持插入emoji表情以丰富推送内容,吸引用户点击了解推送内容。

OPPO推送消息能力Android SDK集成

OPPO推送消息能力Android SDK集成

版本说明

目前SDK版本为V3.1.0,仅支持ColorOS 3.1或以上版本的手机系统,如无特殊说明,兼容历史版本。

SDK接入流程

开通推送权限

具体权限申请流程可参考【推送服务开启指南

获取秘钥等验证信息

申请通过后,可在OPPO推送平台-配置管理-应用配置-页面查看AppKey、AppSecret和MasterSecret(仅开发者帐号(主帐号)可查看)。

名词解释:AppKey、AppSecret客户端的身份标识,客户端SDK初始化时使用。

SDK集成步骤

注册并下载SDK

Android的SDK以aar形式提供,第三方APP只需要添加少量代码即可接入OPPO推送服务。
代码参考demo下载:heytapPushDemo
下载aar文件,即3.1.0版本sdk:com.heytap.msp_3.1.0.aar

aar依赖

第一步:添加maven仓库

repositories {
    google()
    mavenCentral()
}

第二步:添加maven依赖

implementation(name: 'com.heytap.msp_3.1.0', ext: 'aar')
//以下依赖都需要添加
implementation 'com.google.code.gson:gson:2.6.2'
implementation 'commons-codec:commons-codec:1.6'
implementation 'com.android.support:support-annotations:28.0.0'(SDK中的接入最小依赖项,也可以参考demo中的依赖)

第三步:添加aar配置
在build文件中添加以下代码

Android{
....

repositories {
    flatDir {
        dirs 'libs'
    }
}

....
}

配置AndroidManifest.xml

1)OPPO推送服务SDK支持的最低安卓版本为Android 4.4系统。
<uses-sdk  android:minSdkVersion="19"/>
 
2)推送服务组件注册
//必须配置
<service
   android:name="com.heytap.msp.push.service.XXXService"    
  android:permission="com.heytap.mcs.permission.SEND_PUSH_MESSAGE"
 android:exported="true">
    <intent-filter>
     <action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE"/> 
<action android:name="com.heytap.msp.push.RECEIVE_MCS_MESSAGE"/>
    </intent-filter>
</service>(兼容Q版本,继承DataMessageCallbackService)
 
<service
   android:name="com.heytap.msp.push.service.XXXService"     
android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE"
android:exported="true">
    <intent-filter>
     <action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE"/>
    </intent-filter>
</service>(兼容Q以下版本,继承CompatibleDataMessageCallbackService)

注册推送服务

1)应用推荐在Application类主进程中调用HeytapPushManager.init(…)接口,这个方法不是耗时操作,执行之后才能使用推送服务
2)业务需要调用api接口,例如应用内开关开启/关闭,需要调用注册接口之后,才会生效
3)由于不是所有平台都支持MSP PUSH,提供接口HeytapPushManager.isSupportPush()方便应用判断是否支持,支持才能执行后续操作
4)通过调用HeytapPushManager.register(…)进行应用注册,注册成功后,您可以在ICallBackResultService的onRegister回调方法中得到regId,您可以将regId上传到自己的服务器,方便向其发消息。初始化相关参数具体要求参考详细API说明中的初始化部分。
5)为了提高push的注册率,你可以在Application的onCreate中初始化push。你也可以根据需要,在其他地方初始化push。如果第一次注册失败,第二次可以直接调用PushManager.getInstance().getRegister()进行重试,此方法默认会使用第一次传入的参数掉调用注册。

混淆配置

-keep public class * extends android.app.Service
-keep class com.heytap.msp.** { *;}

详细API说明

HeytapPushManager

接口定义

      /**
     *初始化MSP服务,创建默认通道
     *@param context必须传入当前app的context
     *@param needLog是否需要设置log
     */
        1)void init (Context context,bool needLog)
    /**
     *获取Mcs的包名
     */
        2)string getMcsPackageName ()

    /**
     *获取接收消息服务的action
     */
        3)string getReceiveSdkAction ()

    /**
     *判断是否手机平台是否支持PUSH
     @param context传入应用上下文
     *@return true 表示手机平台支持PUSH, false表示不支持
     */
        4)boolean isSupportPush (Context context)
    /**
     * (旧埋点)消息事件统计接口,用于进行额外的Push消息事件统计   *
     * @param context 应用的context
     * @param message 需要上报的消息或消息列表
     */
    //会在以后的版本逐渐废弃
        5)void statisticMessage (Context context, MessageStat message)
        6)void statisticMessage (Context context, List < MessageStat > messages)

    /**
     * (新埋点)消息事件统计接口,用于进行额外的Push消息事件统计,如有需要使用,请开发者提前与OppoPush团队进行充分沟通和确认,为了防止业务方频繁调用上报
     *
     * @param context 应用的context
     * @param eventId 需要上报的eventId事件,上报的eventId在EventConstant类中
     *
        7)void statisticEvent(Context context,String eventId , DataMessage message)

    /**
     *获取registerId
     */
        8)String getRegisterID ()

    /**
     *设置registerId
     */
        9)void setRegisterID (String mRegisterID)

    /**
     * 注册MSP推送服务
     * @param applicatoinContext必须传入当前app的applicationcontet
     * @param appKey 在开发者网站上注册时生成的,与AppKey相对应
     * @param appSecret 与AppSecret相对应
     * @param ICallBackResultService SDK操作的回调
     */
        10)void register (Context applicatoinContext, String appKey, String appSecret, ICallBackResultService
            ICallBackResultService );

    /**
     * 设置appKey等参数,可以覆盖register中的appkey设置
     * @param appKey 在开发者网站上注册时生成的key
     * @param appSecret
     */
        11)void setAppKeySecret (String appKey, String appSecret);

    /**
     *获取pushcall回调
     */
        12)ICallBackResultService getPushCallback ()

    /**
     * 设置sdk操作回调处理,可以覆盖register中的ICallBackResultService设置
     * @param ICallBackResultService sdk操作回调处理
     */
        13)void setPushCallback (ICallBackResultService ICallBackResultService );


    /**
     * 解注册MSP推送服务
     */
        14)void unRegister ();

    /**
     * 获取注册OPush推送服务的注册ID,此方法用于提高注册率,里面调用的是注册的逻辑,引用之前传入的参数
     */
        15)void getRegister ()

    /**
     * 暂停接收MSP服务推送的消息
     */
        16)void pausePush ();

    /**
     * 恢复接收MSP服务推送的消息,这时服务器会把暂停时期的推送消息重新推送过来
     */
        17)void resumePush ();

    /**
     * 清除通知
     */
        18)void clearNotifications ()

    /**
     * 获取MSP推送服务状态
     */
       19)void getPushStatus ();

    /**
     * 获取MSP推送服务SDK版本(例如”2.1.0”)
     *
     * @return SDKVersion
     */
       20)String getSDKVersionCode ();

    /**
     * 获取MSP推送服务SDK名称
     *
     * @return SDKVersionName
     */
        21)String getSDKVersionName ();

    /**
     * 获取MSP推送服务MCS版本(例如“2400”)
     *
     * @return PushVersionCode
     */
        22)String getPushVersionCode ();

    /**
     * 获取MSP推送服务MCS版本(例如“2.4.0”)
     *
     * @return PushVersionName
     */
        23)String getPushVersionName ();

    /**
     * 设置允许推送时间 API
     *
     * @param weekDays 周日为0,周一为1,以此类推
     * @param startHour 开始时间,24小时制
     * @param endHour 结束时间,24小时制
     */
        24)void setPushTime (List< Integer > weekDays, int startHour, int start Min, int endHour, int endMin);

    /**
     * 弹出通知栏权限弹窗(仅一次),OS12.1及之后的ColorOS版本废弃该接口,不生效
     */
        25)void requestNotificationPermission ();

    /**
     * 打开通知栏设置界面
     */
        26)void openNotificationSetting ();

    /**
     * 获取通知栏状态,从callbackresultservice回调结果
     */
        27)void getNotificationStatus ();

    /**
     * 打开应用内通知
     *@see ISetAppNotificationCallBackService
     */
        28)void enableAppNotificationSwitch (ISetAppNotificationCallBackService callBackService);

    /**
     * 关闭应用内通知
     *@see ISetAppNotificationCallBackService
     */
        29)void disableAppNotificationSwitch (ISetAppNotificationCallBackService callBackService);

    /**
     * 获取应用内通知开关
     *@see IGetAppNotificationCallBackService
     */
        30)void getAppNotificationSwitch (IGetAppNotificationCallBackService callBackService);

接口说明

应用在没有获取到registerId时,需要先调用register进行注册,注册成功后才可以进行后续操作。如果调用register注册失败,可以调用getRegister使用上一次传入的参数进行重试。
调用requestNotificationPermission显示通知权限弹窗,用户可通过弹窗自行选择是/否打开应用的通知权限。建议在Activity的onResume方法中调用该接口以避免和其他弹窗重叠。重复调用该接口,弹窗也仅会显示一次。

ICallBackResultService

接口定义

//注册的结果,如果注册成功,registerID就是客户端的唯一身份标识
void onRegister(int responseCode, String registerID);

//反注册的结果
void onUnRegister(int responseCode);
 
//获取当前的push状态返回,根据返回码判断当前的push状态,返回码具体含义可以参考[错误码]
void onGetPushStatus(int responseCode,int status);
public class PushStatus {
    public static final int PUSH_STATUS_START = 0;
    public static final int PUSH_STATUS_PAUSE = 1;
    public static final int PUSH_STATUS_STOP = 2;
}
 
//获取当前通知栏状态,返回码具体含义可以参考[错误码]
void onGetNotificationStatus(int responseCode,int status);
public class NotificatoinStatus {
    public static final int STATUS_OPEN = 0;
    public static final int STATUS_CLOSE = 1;
}
 
//获取设置推送时间的执行结果
void onSetPushTime(int responseCode, String pushTime)
 
//错误码返回的接口(当前主要是用于调用频繁的回调,后续可做拓展)
void onError(int code, String msg)

接口说明

所有回调都需要根据responseCode来判断操作是否成功,0 代表成功,其他代码失败,失败具体原因可以查阅附录中的错误码列表。
onRegister接口返回的registerID是当前客户端的唯一标识,app开发者可以上传保存到应用服务器中,在发送push消息是可以指定registerID发送。

ISetAppNotificationCallBackService

接口定义

//设置应用内通知开关结果,如果成功返回0,失败返回非0,具体指参考错误码
void onSetAppNotificationSwitch(int responseCode);

接口说明

建议复用使用一个callBackService,避免后面对象覆盖调前面一个对象导致前面的callBackService无返回。

IGetAppNotificationCallBackService

接口定义

//获取应用内通知开关结果,如果成功返回0,失败返回非0,具体指参考错误码
//appSwich:0:未定义状态(不校验开关),1:打开状态,2:关闭状态
void onGetAppNotificationSwitch(int responseCode, int appSwitch);

接口说明

建议复用使用一个callBackService,避免后面对象覆盖调前面一个对象导致前面的callBackService无返回。

性能指标和SDK包大小

1)性能指标:响应时间小于500毫秒
2)sdk包大小:500kb以内

OPPO通知运营规范 OPPO推送能力

OPPO通知运营规范 OPPO推送能力

通知说明

通知,指在手机通知栏上展示的消息,通知消息也可展示在锁屏、横幅中。通知主要用于提醒用户,如订阅提醒、活动宣传等。

类别

通知分为OPPO PUSH通知和本地通知。

OPPO PUSH 通知

OPPO PUSH通知指ColorOS向开发者提供的消息推送服务,通过服务端与ColorOS建立的稳定、可靠的长连接通道,无论应用进程是否运行,用户均可正常收到消息。

本地通知

本地通知指安卓原生通知,即当应用在运行时,用户可接收到应用推送的通知。

时间和范围

试运行时间:2021年02月25日-2021年03月24日
正式生效时间:2021年03月25日
运营规范旨在营造一个良好的推送环境,所有在OPPO软件商店上架或对OPPO手机有推送通知行为的应用(含快应用),需遵守本规范。

运营规范

运营规范包含四部分:样式、内容、展示跳转和其它。如应用出现以下行为则视为违规,OPPO公司将视违规影响的严重程度定义违规级别,违规级别分为普通违规和严重违规。

样式

如因使用非标准样式引起投诉,将视为违规。违规事例包含但不限于以下行为:
1.1、通知消息未满足《OPPO通知设计规范》
1.2、应用在未经用户同意情况下使用常驻自定义通知①。
1.3、应用模拟其它应用的通知样式(如模拟其它应用的名称、icon或通知内容),欺骗用户点击。(严重违规)

1.4、除播放器外,单个应用使用多个Group来避免通知折叠。②

1.5、出于商业目的,通知在通知栏强行置顶。

1.6、应用使用非标准通知样式,导致1天内被多个用户投诉。(严重违规)

内容

如通知内容违反法律、法规、社会公序良俗,属于严重违规。严重违规事例包含但不限于以下内容:
2.1、发布反社会、反人类言论;
2.2、发布封建迷信内容(小说等虚构类业务除外);
2.3、宣扬不良、消极颓废的人生观、世界观和价值观的内容;
2.4、侵犯个人隐私,恶意曝光他人身体与疾病、私人住宅、婚姻关系、私人空间、私人活动;
2.5、恶搞灾难事故、特殊人群;
2.6、包括吸毒嫖娼在内的违法犯罪名人相关内容(新闻除外);
2.7、涉及歧视的内容;
2.8、色情内容:包括性行为、性器官、性道具(含药品)、性交易、性场所、性诱惑;
2.9、色情作品:成人电影、情色电影、三级片、色情小说、色情音频等;
2.10、重点表现不健康、不正当、非主流的性关系、婚恋观或婚恋状态;
2.11、色情擦边球,用性相关内容表现别的事物;
2.12、不加处理地展示事故、灾难、恶性事件现场血腥或暴力的场面;(包括新闻报道在内,必须对未获得授权的伤者、逝者进行打码处理。)
2.13、对人造成巨大精神冲击的暴力、血腥、恐怖、惊悚内容;(包括影视作品、图片、小说在内。)
2.14、未成年人裸露;
2.15、教唆青少年儿童犯罪;
2.16、非口语化脏话、谩骂、侮辱性语言;
2.17、模仿系统应用给用户推送系统功能提醒消息; 如:您的手机仅剩5%电量。
2.18、诈骗;
2.19、推送的内容在1天内被多个用户投诉;
2.20、推送新闻信息必须采用规范稿源,禁止PUSH弹窗推送商业网站平台和“自媒体”账号违规采编发布、转载的新闻信息;
2.20、推送采用非规范稿源的新闻信息,或推送商业网站平台和“自媒体”账号违规采编发布、转载的新闻信息;
2.21、渲染炒作舆情热点,断章取义、篡改原意吸引眼球、误导用户;
2.22、推送娱乐八卦、明星绯闻、血腥暴力、奇闻异事、低俗恶俗等有悖社会主义核心价值观内容;
2.23、通过PUSH弹窗渠道放大传播失德艺人、负面争议人物的有关言论;
2.24、未取得互联网新闻信息服务许可的工具类应用,不得PUSH弹窗推送新闻信息。

展示跳转

违规事例包含但不限于以下内容:
3.1、通知内容与标题不相符;
3.2、通知内容和跳转界面不属于同一应用,如点击A应用的通知跳转至B应用;
3.3、推送的消息链接无效,无法调起应用;
3.4、其它在1天内被多个用户投诉的展示跳转异常行为。(严重违规)

其它

出现任何违法违规、损害用户利益、给OPPO公司或其关联公司造成损失的,都视为违规。违规事例包含但不限于以下内容:
4.1、由于非正常使用通知造成大量设备异常,如过量耗电、持续亮屏等现象;(严重违规)
4.2、因错字、漏字等情况,导致内容表达的含义产生严重的误解视为违规。如通知展示用户数大于10万,则属于严重违规;
4.3、被OPPO公司认定为恶意破坏系统规则,如通过非正当手段刷量等;(严重违规)
4.4、在1天内被多个用户投诉的上述未提及行为。(严重违规)

处罚措施

如开发者违反上述条款或存在其它违法、违规行为,OPPO公司将根据影响的严重程度定义违规等级。违规等级分为:普通违规和严重违规。
违规应用需承担如下责任:

普通违规

第1次违规第2次违规第3次违规第4次及以上次数违规
第一阶段7个自然日内需整改完成并全量发布3个自然日内需整改完成并全量发布1个自然日内需整改完成并全量发布视为严重违规
第二阶段第8~14个自然日OPPO PUSH公信消推送量减半,直至整改完成并全量发布第4~6个自然日OPPO PUSH公信消息推送量减半,直至整改完成并全量发布第2个自然日OPPO PUSH公信消息推送量减半,直至整改完成并全量发布
第三阶段超过14个(不含)自然日暂停PUSH推送权限超过6个(不含)自然日暂停PUSH推送权限超过2个(不含)自然日暂停PUSH推送权限

严重违规

违规事件被定级为严重违规后,OPPO公司有权关闭违规应用的OPPO PUSH权限。

备注:
1)累计违规次数按近365天的记录计算;
2)违规整改期结束后,如仍存在违规行为,将视为新一轮违规并执行相应处罚;
3)如处罚涉及暂停OPPO PUSH使用权限,惩罚期结束后需由相关违规方发送《重新开启 OPPO PUSH服务申请》至push@oppo.com申请恢复服务。请务必确保整改完成后再提交申请,OPPO公司收到申请后,将酌情评估是否重新开通OPPO PUSH权限;
4)如因应用的违规行为给OPPO或其关联公司造成损失的, OPPO公司有权对开发者的违规行为采取其它合理措施。

注释

①常驻通知,指无法左右滑动删除及无法自动清理的通知。
②ColorOS 11及ColorOS 11以上系统,单个应用超过一条消息时未折叠为一组;ColorOS 11以下系统,单个应用超过三条(不含)通知时未折叠为一组。

OPPO推送服务开启指南

注册成为开发者

访问OPPO开放平台,注册成为OPPO企业开发者,详情请参考《OPPO企业开发者帐号注册流程》

创建应用

登录OPPO企业开发者帐号,并创建应用,详情请参考《应用接入流程》

开通PUSH服务

1、登录OPPO开放平台,依次选择“产品”–“移动服务”–“推送服务”

2、进入产品介绍页,点击“立即使用”

3、进入推送运营平台,为未开启服务的应用申请推送服务权限


1)已开启服务:已申请PUSH权限并通过的应用
2)未开启服务:可申请PUSH权限的应用

4、点击“申请开通按钮”
在未开启服务中点击需要申请PUSH权限的应用,进入PUSH服务并点击申请开通。

1)通知栏推送:应用需在OPPO软件商店上架。
2)通知栏推送测试权限:每天仅可推送1000条消息,限测试使用。应用上架后需重新申请“通知栏推送”权限,以获得正常消息推送数量。

5、提交申请。

6、等待审核结果

平台将会在1个工作日内返回审核结果,开发者可以在申请页面查看审核结果,其他问题可咨询开放平台客服。