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个工作日内返回审核结果,开发者可以在申请页面查看审核结果,其他问题可咨询开放平台客服。

oppo推送受限说明

oppo推送受限说明

送达率说明

推送服务致力于提供安全可靠的消息发送通道,保障消息成功送达。此外,以下非通道因素也直接影响消息的送达情况,主要影响因素有:
1)终端设备是否在线
如果设备离线,PUSH平台会缓存消息,待用户上线后,再次将消息投递给用户。PUSH平台只缓存一次用户的消息,如果用户在线后还发不通,PUSH平台不再缓存。
2)用户手机上集成PUSH SDK的应用是否被卸载
3)网络状况是否稳定
4)终端手机的安全控制策略

支持的终端设备

目前支持 ColorOS3.1及以上的系统的OPPO的机型,一加5/5t及以上机型,realme所有机型。

推送消息的及时性

OPPO PUSH尽可能保障消息及时送达,设备网络条件良好且不拥堵情况下时延在1s内,该时延时间仅指PUSH通道推送消息的时延。开发者在运营管理网站的控制台创建基于RegID的推送任务和通过API创建的基于标签等的推送任务,PUSH系统将先进行推送任务的调度,再通过PUSH通道推送消息。

推送消息大小要求

PUSH消息支持的Android App包名称最大为128个字节,消息内容最大支持为4K字节。

支持的地区

除中国以外,还支持印度、印尼、泰国、越南、菲律宾、马来西亚。(海外应用请进入海外开放平台申请

推送数量限制规则

/累计用户数可推送总数量(条/日)
公信可推送数<50000100000
≥50000累计用户数*2
私信可推送数不限量
测试推送数1000(仅供接入测试使用)

1)目前私信处于公测阶段,需要申请才能开启私信通道,私信申请请参考【推送私信通道申请】
2)累计用户数是指从接入推送服务的app客户端,用户安装并激活的累计用户量,去除已卸载用户数;
3)累计用户数在OPPO推送运营平台可查询,每天会刷新。

接收数量限制

通过OPPO推送平台下发的消息(包含公私信),单用户接收上限2000条/日。

QPS限制规则说明

限制规则

OPPO推送对QPS的分配主要依据应用的累计用户数,应用类别权重和平台推送系数三个值进行加权计算,其中累计用户数在OPUSH平台上的查询路径是OPPO PUSH推送运营平台—我要推送消息—应用列表中的累计用户数。

计算公式

应用QPS = 推送QPS参考值 * 应用类别权重 * 平台推送系数
例如:针对应用维度,30000 QPS表示1秒内本应用最多可推送给30000个用户(所有接口共享应用维度限速上限总值)。

QPS超限时会返回什么错误吗?

QPS超限时会返回错误码 55, 原因:APP Call Frequency Limit

返回错误如何处理

请降低您的并发请求数,确保每秒的请求数不高于QPS限制,业务应当设置规则优先发送重要的消息,非热点或时效性要求低消息需按照规定qps以下进行推送。
具体的QPS对应值如下:

序号累计用户数推送QPS参考值应用类别权重平台推送系数(默认 = 1)
1≥10000万3000011
2≥5000万且<10000万2000011
3≥1000万且<5000万1000011
4<1000万500011

备注:QPS(Quantity per second)表示1秒可调用OPPO PUSH的请求数。

RegistartationId是什么?

RegistartationId是什么?

也叫注册ID,PUSH共有概念,用以唯一标识一个APP的设备,即: APP+DeviceId=RegistartationId。开放给开发者,开发者下发推送的时候,需要指定目标,目标即为RegistartationId。RegistartationId在用户第一次打开应用的时候生成,后续可能会发生变化(卸载重装)。

DeviceId是什么?

Push自有私有概念,由于IMEI可能不唯一,当客户端与服务端建立连接的时候,会注册一个DeviceId,用于唯一标示一台手机设备。最新的客户端版本(新手机)的长连接将以DeviceId建立。

OPPO推送功能介绍

OPPO推送功能介绍

消息类型

推送服务目前只支持通知栏信息,同时提供Web平台及API两种推送方式。

通知栏信息

消息通过推送服务系统通道下发,不需要应用驻留后台。 ColorOS3.1至5.0版本的OPPO手机,用户激活了相关应用后,通知栏权限会默认打开。 ColorOS5.1及以后的版本的手机,通知栏权限由系统统一关闭,需用户手动打开。 通知栏消息展示效果如图所示,展示内容涵盖消息标题、内容、应用图标与时间。

推送方式

推送服务支持标签、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可能失效的情况。

推送辅助

定时展示

开发者可以根据自己的业务需求设置定时展示,定时展示功能设置成功后消息即时下发,到达用户手机后并不直接展示出来,到了设置的定时展示时间,消息才展示出来。

自定义消息有效期

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

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

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

AB-Test

支持文案对比测试、余量自动&手动推送,协助开发者判定投放策略,有效提升push的CTR。

帐号管理功能

支持应用下多帐号的角色管理,便于团队协作。

数据统计功能

提供多维度数据统计功能,除单条消息的推送基础数据外(包括推送目标数、有效设备、实际下发、到达数/到达率、展示数/展示率、点击数/点击率等),平台还支持应用数据实时统计与分区域统计。对于推送各环节产生的数据流失,平台已上线数据漏斗功能,协助开发者快速定位推送异常。

OPPO推送产品说明

OPPO推送产品说明

产品说明

推送服务(OPPO PUSH)是OPPO公司向开发者提供的消息推送服务,通过服务端与OS端建立的一条稳定、可靠的长连接通道,向OPPO手机系统(ColorOS)上的APP应用客户端实时推送消息的服务。无论应用进程是否存在,均可正常收到消息。
目前OPPO PUSH覆盖广泛,已累计覆盖5亿+的OS活跃设备。

业务逻辑图

产品优势

系统级通道

共享ColorOS系统级长连接,充分保障通知栏消息在Color OS设备上的送达率,不管应用是否在后台存活,通过OPPO PUSH都可以保证消息到达。在设备联网的情况下,有效送达率可达99.99%以上。

安全高效、便捷易用

提供每秒百万级消息推送速率,稳定性强,安全性高;提供Web平台与API两种推送方式,可快速集成SDK,有效提高留存率。

全面的数据统计

OPPO 推送运营平台提供不同维度的推送数据报表,主要包括单条消息推送数据与应用实时推送数据等,助力于开发者制定后续的push投放策略。

消息样式多样化

支持长文字、大图等富文本通知栏消息样式,满足开发者个性化推送需求。

oppo开放平台 安全评估报告合规指引

oppo开放平台 安全评估报告合规指引

背景

依照《具有舆论属性或社会动员能力的互联网信息服务安全评估规定》和《互联网新闻信息服务新技术新应用安全评估管理规定》,具有舆论属性或社会动员能力的互联网信息服务提供者,应当针对信息服务和新技术新应用的合法性、落实安全措施和防控安全风险的有效性等情况,自行或委托第三方开展安全评估。经过安全评估,符合法律、行政法规、部门规章和标准的,应当形成安全评估报告,并通过全国互联网安全管理服务平台提交至网信部门和公安机关。

如何申请“安全评估报告”

登录全国互联网安全服务管理平台,点击“安全评估报告”进行申请。

应用上架时,如何补充提交“安全评估报告”

管理中心→应用服务→应用列表→点击对应APP图标→资料更新→版权证明资料

注意事项

1、除上传安全评估报告副本外,还需提供安全评估报告在全国互联网安全管理服务管理平台的提交结果截图。

2、安全评估报告上的服务名称需与上传的应用名称保持一致,单位名称需与开发者所属名称一致。

3、安全评估报告尾页需申请主体单位及评估单位签字、盖章,并填写日期。

安全评估报告示例:

4、根据规定,互联网信息服务提供者应当依照规定自行开展安全评估,对自身信息服务和新技术新应用的合法性,落实法律、行政法规、部门规章和标准规定的安全措施的有效性,防控安全风险的有效性等情况进行全面评估,对评估结果负责,并及时整改安全隐患。不可以授权给他人进行使用。

相关政策文档

1、具有舆论属性或社会动员能力的互联网信息服务安全评估规定
2、国家互联网信息办公室、公安部加强对语音社交软件和涉深度伪造技术的互联网新技术新应用安全评估

OPPO开放平台 APP常见个人信息保护问题合规指引

OPPO开放平台 APP常见个人信息保护问题合规指引

为帮助APP开发者更好地履行个人信息保护的责任与义务,OPPO软件商店面向开发者整理出以下APP常见个人信息保护问题和改进建议,望携手开发者一起为用户建设健康、安全、可靠的应用生态环境。

一、违规收集个人信息

重点关注APP、SDK未告知用户收集个人信息的目的、方式、范围且未经用户同意,私自收集用户个人信息的行为。

1、合规指引

-APP未以个人信息处理规则弹窗等形式向用户明示个人信息处理的目的、方式和范围,不应收集个人信息。
-APP以个人信息处理规则弹窗等形式向用户明示个人信息处理的目的、方式和范围,未经用户同意,不应收集个人信息。
-APP以个人信息处理规则弹窗等形式向用户明示个人信息处理的目的、方式和范围,未清晰明示处理个人信息的目的、方式和范围,用户同意后,不应收集相应个人信息;未清晰明示在静默状态下或在后台运行时收集个人信息的目的、方式和范围,不应收集相应个人信息。
-APP未以个人信息处理规则弹窗等形式向用户明示第三方SDK处理个人信息的目的、方式和范围,第三方SDK不应收集个人信息。
-APP以个人信息处理规则弹窗等形式向用户明示第三方SDK处理个人信息的目的、方式和范围,未经用户同意,第三方SDK不应收集个人信息。
-APP以个人信息处理规则弹窗等形式向用户明示第三方SDK处理个人信息的目的、方式和范围,未清晰明示第三方SDK处理个人信息的目的、方式和范围,用户同意后,第三方SDK不应收集相应个人信息;未清晰明示在静默状态下或在后台运行时第三方SDK收集个人信息的目的、方式和范围,第三方SDK不应收集相应个人信息。
-APP在征求用户同意环节,应提供明确的同意和拒绝选项。
-APP在征求用户同意环节,不应设置为默认同意。

2、问题案例

情形一: APP首次启动时,未有以弹窗形式明示个人信息保护政策。
改进建议: APP首次启动时,以弹窗等形式向用户明示个人信息保护政策。

情形二: 个人信息保护政策未有说明个人信息处理的目的、方式和范围,如个人信息保护政策为公司官网等与个人信息保护无关的内容。
改进建议: 个人信息保护政策须说明个人信息处理的目的、方式和范围,个人信息保护政策模板可参考GB/T 35273-2020《信息安全技术 个人信息安全规范》附录D。

情形三: 在用户阅读个人信息保护政策前,存在收集个人信息的行为。
改进建议: 建议修改相关代码,停止在用户阅读个人信息保护政策前收集个人信息(个人信息包括不限于IMEI、IMSI、设备MAC地址、软件安装列表、位置、联系人、通话记录、日历、短信、本机电话号码、图片、音视频等)。

二、违规使用个人信息

重点关注APP、SDK未向用户告知且未经用户同意,私自使用个人信息,将用户个人信息用于其提供服务之外的目的,特别是私自向其他应用或服务器发送、共享用户个人信息的行为。

1、合规指引

-APP未向用户明示个人信息处理的目的、方式和范围,不应将个人信息发送给第三方SDK等产品或服务。
-APP以个人信息处理规则弹窗等形式向用户明示共享给第三方的行为,未经用户同意,不应将个人信息发送给第三方SDK等产品或服务。
-APP以个人信息处理规则弹窗等形式向用户明示个人信息处理的目的、方式和范围,未清晰明示共享的第三方身份、目的及个人信息类型,用户同意后,不应将个人信息发送给第三方SDK等产品或服务。
-APP未向用户告知且未经用户同意,不应将设备识别信息、商品浏览记录、搜索使用习惯、软件安装列表等个人信息传输至APP服务器后,向第三方产品或服务提供其收集的个人信息。

2、问题案例

情形一: App未见向用户明示分享的第三方名称、目的及个人信息类型,用户同意个人信息保护政策后,存在将个人信息发送给第三方SDK的行为。
改进建议: 建议修改APP个人信息保护政策,APP须在个人信息保护政策等公示文本中逐一列明App所集成第三方SDK收集使用个人信息的目的、方式和范围,并征得用户同意;建议修改相关代码,在用户同意前,停止将个人信息发送给第三方SDK。

三、强制用户使用定向推送功能

重点关注APP、SDK未以显著方式标示且未经用户同意,将收集到的用户搜索、浏览记录、使用习惯等个人信息,用于定向推送或广告精准营销,且未提供关闭该功能选项的行为。

1、合规指引

-若APP的业务功能存在定向推送功能,应以个人信息处理规则弹窗等形式向用户明示,将收集的用户个人信息用于定向推送、精准营销。
-若APP定向推送功能使用了第三方的个人信息来源,应以个人信息处理规则弹窗等形式向用户明示业务功能使用第三方的个人信息进行定向推送,并向用户明示第三方的个人信息来源。
-APP以个人信息处理规则弹窗等形式明示存在定向推送功能,页面中应显著区分定向推送服务,显著方式包括但不限于:标明“个性化推荐”、“定推”、“猜你喜欢”等其他能显著区分的字样,或通过不同的栏目、版块、页面分别展示等。
-APP以个人信息处理规则弹窗等形式明示存在定向推送功能,应提供便捷有效的退出或关闭个性化展示模式的选项,如拒绝接受定向推送信息,或停止、退出、关闭相应功能的机制。

2、问题案例

情形一: APP个人信息保护政策中存在“向您提供更加个性的内容”等内容,明示存在定向推送功能,但未见提供退出或关闭个性化展示模式的选项。
改进建议: 若APP存在定向推送功能,应提供应提供便捷有效的退出或关闭个性化展示模式的选项,如拒绝接受定向推送信息,或停止、退出、关闭相应功能的机制。

四、APP强制、频繁、过度索取权限

重点关注APP安装、运行和使用相关功能时,非服务所必需或无合理应用场景下,用户拒绝相关授权申请后,应用自动退出或关闭的行为;短时长、高频次,在用户明确拒绝权限申请后,频繁弹窗、反复申请与当前服务场景无关权限的行为;未及时明确告知用户索取权限的目的和用途,提前申请超出其业务功能等权限的行为。

1、合规指引

-APP 运行时,向用户索取电话、通讯录、定位、短信、录音、相机、存储、日历等权限,用户拒绝授权后,APP 不应退出或关闭,不应拒绝注册或登录,或拒绝提供与申请权限无关的功能服务。
-APP 运行时,向用户索取电话、通讯录、定位、短信、录音、相机、存储、日历等权限,用户拒绝授权后,APP 不应循环弹窗申请权限,使用户无法继续使用。
-APP 未提供相关业务功能或服务,不应申请通讯录、定位、短信、录音、相机、日历、电话、存储等权限。
-APP 首次打开或运行中,未见使用权限对应的相关功能或服务时,不应提前向用户弹窗申请开启通讯录、定位、短信、录音、相机、日历、电话、存储等权限。
-APP不应频繁申请权限,具体场景包括但不限于以下方式:APP运行时,在用户明确拒绝通讯录、定位、短信、录音、相机、日历、电话、存储、通知等权限申请后,不应向用户频繁弹窗申请与当前服务场景无关的权限,影响用户正常使用。APP在用户明确拒绝通讯录、定位、短信、录音、相机、日历、电话、存储、通知等权限申请后,重新运行时,APP不应向用户频繁弹窗申请开启与当前服务场景无关的权限,影响用户正常使用。

2、问题案例

情形一: APP首次启动或用户使用期间,向用户索取权限,用户拒绝授权后,APP强制退出、关闭、白屏、或者循环弹窗,使用户无法继续使用。
改进建议: APP运行时,向用户索取电话、通讯录、定位、短信、录音、相机、存储、日历等权限,用户拒绝授权后,APP应至少保证正常浏览,而不应退出、关闭、白屏、或者循环弹窗,影响用户正常使用。

情形二: 用户注册登录时,向用户索取权限,用户拒绝授权后,无法注册或登录。
改进建议: 用户注册登录时,向用户索取电话、通讯录、定位、短信、录音、相机、存储、日历等权限,用户拒绝授权后,APP应依然提供注册或登录服务。

情形三: APP首次启动或用户使用期间,在用户明确拒绝权限申请后,用户仅浏览或前后台切换等未有主动触发权限所涉及的业务场景,再次弹窗申请权限。
改进建议: APP运行时,在用户明确拒绝通讯录、定位、短信、录音、相机、日历、电话、存储、通知等权限申请后,应不再向用户频繁弹窗申请与当前服务场景无关的权限,并保证用户正常使用。

情形四: 在用户明确拒绝权限申请后,退出APP后再重新启动后,立刻弹窗申请权限。
改进建议: 在用户明确拒绝通讯录、定位、短信、录音、相机、日历、电话、存储、通知等权限申请后,重新运行时,非用户主动触发权限所涉及的业务场景,应不再向用户弹窗申请与当前服务场景无关的权限,并保证用户正常使用APP。

注:
1)个人信息包含但不限于:IMEI、IMSI、设备MAC地址、软件安装列表、位置、联系人、通话记录、日历、短信、本机电话号码、图片、音视频,具体请参阅GB/T 35273-2020《信息安全技术 个人信息安全规范》

2)个人信息保护政策(又称隐私政策)模板,具体请参阅GB/T 35273-2020《信息安全技术 个人信息安全规范》附录D

3)GB/T 35273-2020《信息安全技术 个人信息安全规范》

4)《App违法违规收集使用个人信息行为认定方法》

5)工业和信息化部关于开展APP侵害用户权益专项整治工作的通知【工信部信管函[2019]337号】

6)工业和信息化部关于开展纵深推进APP侵害用户权益专项整治行动的通知【工信部信管函〔2020〕164号】

7)《APP用户权益保护测评规范》

8)《常见类型移动互联网应用程序必要个人信息范围规定》

9)《中华人民共和国网络安全法》

10)《中华人民共和国个人信息保护法》