VIVO消息推送 Android PUSH-SDK集成指南

点击此处下载 PUSH SDK接入文档(若公司网络下载压缩包解压异常,建议切换其他网络下载)

版本信息具体说明
版本号:484、版本名:3.0.0.4更新内容:
1.优化代码,去掉非必要逻辑;
版本号:483、版本名:3.0.0.3更新内容:
1.修复了读取外部存储的问题;
版本号:482、版本名:3.0.0.2更新内容:
1.恢复了仅用于兼容v3.0.0.0_480以前点击回调接口:onNotificationMessageClicked;
版本号:481、版本名:3.0.0.1更新内容:
1.修复统一推送联盟接口的已知问题;
版本号:480、版本名:3.0.0.0更新内容:
1.修复安全漏洞:通知不再支持拉起非导出的Activity;
2.优化push通知点击启动慢的问题;
3.移除onNotificationMessageClicked回调,自定义参数需要统一在被拉起的Activity中通过Intent接收;

注意:

1.vivo推送服务SDK支持的最低android版本为Android 6.0。

2.当通过”自定义/打开应用页面”方式启动应用内Activity时,该Activity在AndroidManifest.xml必须配置属性android:exported=”true”。

3.由于项目架构变动,可能会导致您在更新sdk版本时类的路径错误,重新导入类的路径即可。

一、集成sdk

1. 导入aar 包

将解压后的libs文件夹中vivopushsdk-VERSION.aar(vivopushsdk-VERSION.aar为集成的jar包名字,VERSION为版本名称)拷贝到您的工程的libs文件夹中。

在android项目app目录下的build.gradle中添加aar依赖。

dependencies {

  implementation fileTree(include: ['*.jar'],   dir: 'libs')

  implementation   files("libs/vivo_pushSDK_v3.0.0.4_484.aar")

}

2. 添加权限

vivo Push集成只需要配置网络权限,请在当前工程AndroidManifest.xml中的manifest节点下添加以下代码:

<!—Vivo Push需要的权限--> 

<uses-permission  android:name="android.permission.INTERNET"/>

3. 配置appid 、api key等信息

vivo Push集成需要配置对应的appid 、app key信息,其中appid 和app key是在开发者平台中申请的,详见 vivo push 操作手册。

请在当前工程AndroidManifest.xml中的Application节点下添加以下代码(建议复制粘贴防止出错):

<!--Vivo Push开放平台中应用的appid 和api key--> 
<meta-data 
   android:name="api_key" 
   android:value="xxxxxxxx"/> 

<meta-data 
   android:name="app_id" 
   android:value="xxxx"/>

4. 自定义通知回调类

在当前工程中新建一个类 PushMessageReceiverImpl(自定义类名)继承OpenClientPushMessageReceiver 并重载实现相关方法。并在当前工程的AndroidManifest.xml文件中,添加自定义Receiver信息,代码如下:

<!--push应用定义消息receiver声明--> 
<receiver android:name="xxx.xxx.xxx.PushMessageReceiverImpl(自定义类名)" 
   android:exported="false">    
<intent-filter> 
	<!--接收push消息--> 
   <action android:name="com.vivo.pushclient.action.RECEIVE"/> 
</intent-filter>
</receiver>

5. 注册service

接入SDK,需注册相关服务以确保正常。

请在当前工程AndroidManifest.xml中的Application节点下添加以下代码(建议复制粘贴防止出错):

<!--Vivo Push需要配置的service、activity--> 
<service 
   android:name="com.vivo.push.sdk.service.CommandClientService" 
   android:permission="com.push.permission.UPSTAGESERVICE"
   android:exported="true"/>

6. 配置sdk版本信息(仅通过jar包集成方式需要配置,通过aar包集成无需配置)

通过jar包方式接入SDK,需配置SDK版本信息确保正常。

请在当前工程AndroidManifest.xml中的Application节点下添加以下代码(建议复制粘贴防止出错):

<!--Vivo Push SDK的版本信息--> 
<meta-data 
   android:name="sdk_version_vivo" 
   android:value="484"/>

二、启动推送

在工程的Application中,添加以下代码,用来启动打开push开关,成功后即可在通知消息到达时收到通知。

//在当前工程入口函数,建议在Application的onCreate函数中,添加以下代码:

//初始化push
PushClient.getInstance(getApplicationContext()).initialize(); 

// 打开push开关, 关闭为turnOffPush,详见api接入文档
PushClient.getInstance(getApplicationContext()).turnOnPush(new IPushActionListener() { 
    @Override
    public void onStateChanged(int state) { 
       // TODO: 开关状态处理, 0代表成功
    } 
});

三、获取token

即获取regId,使用PushClient.getInstance(context).getRegId() 函数获取;

在 Api 接口 turnOnPush回调成功之后,即可获取到注册id。

四、点击通知消息

当设备接收到通知消息后,查看手机的通知栏,当点击通知时,打开通知动作分为打开App首页、打开特定Uri 网址页面、 打开用户自定义、打开应用指定页面。

注意: Sdk 3.0.0.0 以前版本的页面跳转类型打开自定义、打开指定应用页面,在Sdk 3.0.0.0及以后版本中已统一作为打开自定义页面处理。 服务端Api 字段 skipType 跳转类型分别是: 1 是打开App 首页, 2 是打开特定Url 网址页面, 4 是打开自定义页面。

打开App首页或者打开自定义页面,是通过VIVO手机通知中心跨应用启动Activity来实现,需要App保证被拉起的目标Activity exported属性默认设置为true,无权限配置,可以在点击通知时打开指定的Activity。

1. 打开App 首页

在AndroidManifest.xml文件配置主Activity。

在AndroidManifest.xml文件注册的首页Activity 中,配置
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

在Activity 中接受数据:

开发者在首页的Activity 的onCreate 或者 onNewIntent 中,通过如下方式获取数据。

获取消息id,即messageId:

String messageId = intent.getLongExtra("vivo_push_messageId");

获取透传的自定义键值对值,如下,

遍历所有key(遍历clientCustomMap和skipContent的自定义key-value):

Bundle bundle = intent.getExtras();
if (bundle != null) {
    for (String key : bundle.keySet()) {
        if (!TextUtils.isEmpty(key)) {
            //注意传递的参数类型
            String content = bundle.getString(key);
        }
    }
}

取单个key(取clientCustomMap和skipContent特定key对应的value):

Intent intent = getIntent();
if (intent != null) {
    String key1 = intent.getStringExtra("key1");
    int key2 = intent.getIntExtra("key2", -1);
}
其中key1为用户自定义String型键值对参数值;key2为用户自定义Integer型键值对参数值。

2. 打开自定义页面

注意:原有通过onNotificationMessageClicked回调接收自定义参数的方式已经废弃,自定义参数需要统一在被拉起的Activity中通过Intent接收。

跨应用启动客户端App需要显示启动,通过Intent 携带透传参数到App,生成好对应的 Intent 参数,然后调用服务端Api 指定Intent 参数来打开自定义App页面;

生成 Intent 参数:

在Android 开发工具中,参考如下代码生成 Intent
Intent intent = new Intent(this,CustomActivity.class);
//Scheme协议(vpushscheme://com.vivo.push.notifysdk/detail?)开发者可以自定义
intent.setData(Uri.parse("vpushscheme://com.vivo.push.notifysdk/detail?"));
//intent 中添加自定义键值对,value 为 String 型
intent.putExtra("key1", "xxx"); 
//intent 中添加自定义键值对,value 为 Integer 型
intent.putExtra("key2", xxx);
//得到intent url 值
//示例:intent://com.vivo.pushtest/detail?#Intent;scheme=vpushscheme;component=com.vivo.pushdemo.test/com.vivo.pushsdk.CustomActivity;S.key1=xxx;i.key2=2;end
String intentUri = intent.toUri(Intent.URI_INTENT_SCHEME);
备注 : 开发者以自己实际定义的为准。

注意:在AndroidStudio里生成intentUri后,开发者通过服务端Api或者在管理后台发送通知时,跳转内容(Api 对应字段 为skipContent)透传上例生成的intentUri值,然后在点击通知时打开自定义的 CustomActivity。

在AndroidManifest.xml文件注册被启动的Activity

比如被启动的自定义页面 CustomActivity,其中host、path、scheme 一定要与上面的 Intent 生成参数匹配。

注意:该属性必须设置android:exported=”true”

配置如下:

<activity android:name=".CustomActivity"   
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:host="com.vivo.push.notifysdk"
            android:path="/detail"
            android:scheme="vpushscheme" />
        </intent-filter>
</activity>

注意: activity 名称用户自己定义.

在自定义的 CustomActivity 中接收数据

如下:

public class CustomActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.xxx);
        //获取通知消息的messagId
        String messageId = intent.getStringExtra("vivo_push_messageId");
        //获取自定义透传参数值
        Intent intent = getIntent();
        if (null != intent) {
            String key1 = intent.getStringExtra("key1");
            int kye2 = intent.getIntExtra("key2", -1);
        }
    }
}

3. 打开特定Uri 网址

开发者通过Api(Api 对应字段 为skipContent)或者管理后台传自己要打开的Url 网址地址即可。

4. 恢复了仅用于兼容v3.0.0.0_480以前点击回调接口:onNotificationMessageClicked

注意Push SDKv3.0.0.2_482特性:该接口仅用于解决v3.0.0.0_480之前的版本升级Push SDK过程中发送的老版本打开自定义通知(skiptype=3)需要依赖点击回调完成跳转时使用,
  新版本通知点击该点击回调是不可用的。

五、混淆说明

若需要混淆app,请在混淆文件中添加以下说明,防止SDK内容被二次混淆,自定义回调类切勿混淆。

-dontwarn com.vivo.push.** 

-keep class com.vivo.push.**{*; } 

-keep class com.vivo.vms.**{*; }

-keep class   xxx.xxx.xxx.PushMessageReceiverImpl{*;}

六、统一推送联盟接入

说明:请完成上述 ‘1.集成SDK’ 和 ‘2.配置信息’ 两个步骤再开始统一推送联盟的接入。

1. 打开push开关

这里只是做了相应的初始化操作,建议用户在自己应用的Application中onCreate()方法中调用turnOnPush操作。

示例代码:

VUpsManager.getInstance().turnOnPush(this, new UPSTurnCallback() {
    @Override
    public void onResult(CodeResult codeResult) {
        if(codeResult.getReturnCode()   == 0){
            Log.d(TAG, "初始化成功");
        }else {
            Log.d(TAG, "初始化失败");
        }
    }
});

2. 注册push

注册push,获取申请的regId,即token。

示例代码:

VUpsManager.getInstance().registerToken(this, "XXX", "XXX", "XXX", new UPSRegisterCallback() {
    @Override
    public void onResult(TokenResult tokenResult) {
        if (tokenResult.getReturnCode() == 0) {
            Log.d(TAG, "注册成功 regID = " +   tokenResult.getToken());
        } else {
            Log.d(TAG, "注册失败");
        }
    }
});

VIVO消息推送服务端SDK文档

VIVO消息推送服务端SDK文档

点击此处下载PUSH-JAVA-SDK 文档

版本:2.3 

升级内容:

      1.  新增推必安审核参数auditReview。

      2.  取消regId23位校验限制。

点击此处下载push-python3-SDK 文档

版本:2.2

一、接入SDK

1.运行环境

该SDK使用Java编写,接入前请确认是否安装Java环境,并在Java环境下运行。

2.获取SDK并导入

开发者需要注册登录开发平台网站获取应用的appId,appKey,appSecret;

在开发者网站上,下载并解压vivoPush_sdk_JAVA.zip;

将文件夹下所有jar文件放入项目工程的libs目录;

刷新工程,确保文件出现在libs目录下。如果没有的话请手动添加;

3.示例:给测试手机发送一条单推

集成sdk后运行该main函数,标红部分为需要使用者填写的内容。运行成功后设备会收到推送(需提前确认设备通知栏权限已打开)

public   static void main(String[] args) throws Exception {
      Sender sender = new Sender(“appSecret”);//注册登录开发平台网站获取到的appSecret
      Result result = sender.getToken(appId ,   “appKey”);//注册登录开发平台网站获取到的appId和appKey
      sender.setAuthToken(result. getAuthToken());
      Message singleMessage = new Message.Builder()
              //该测试手机设备订阅推送所得的regid,且已添加为测试设备.regId(“regId”)              .notifyType(3)
                .title(“try_title”)
                .content(“try-content”)
              .timeToLive(1000)
                .skipType(2)
                .skipContent(“http://www.vivo.com”)
                .networkType(-1)
                .requestId(“1234567890123456”)              .pushMode(1)              .build();
      Result resultMessage = sender.sendSingle(singleMessage);
      System.out.println(resultMessage);
  }

4.SDK类定义说明

类名使用说明
Message消息对象
Builder构建要发送的Message对象
TargetMessage构建批量推送的发送目标
TagMessage标签相关的消息体
TagGroupMessage标签分类的消息体
TagSegMessage标签组合相关的消息体
Sender发送消息工具类,可以发送鉴权、单推、批量推、全推、标签推消息
TagManage创建标签工具类,用于创建,更新标签
TagGroup标签分类管理工具类,用于创建,更新标签分类
TagSegment标签组合管理工具类,用于创建,更新标签组合
Result服务器返回的结果
Validation对构建的消息体进行基本参数校验
ExceptionStatusEnum消息体参数错误类型

二、发送消息

①发送消息依赖Sender类

com.vivo.push.sdk.server.Sender

标签相关的设置依赖以下三个类

com.vivo.push.sdk.server.TagManage

com.vivo.push.sdk.server.TagGroup

com.vivo.push.sdk.server.TagSegment

②实例化Sender

Sender(String appSecret),(鉴权时使用)appSecret是在开发者网站上注册时生成的。

sender.setAuthToken(String authToken);,(推送时使用)除鉴权方法外,推送前都需要设置authToken,authToken是在调用鉴权方法后获得。

③设定连接池参数(可选项)

Sender.initPool(int connection, int route) 设定连接池最大连接数为“connection”,路由最大连接数为“route”,不设定该项则使用默认参数:最大连接数 10,路由最大连接数 5

④返回结果Result

com.vivo.push.sdk.server.Result

1.鉴权

要进行PUSH推送,任何接入方都要有个鉴权操作。获得authToken用于各类推送。

限制:一天限制调用不超过10000次。

接口说明:

com.vivo.push.sdk.server.Sender

方法说明
getToken(int   appId,String appKey)根据appId,appKey(用户申请推送业务时生成)进行鉴权操作。

Demo

public void testGetToken() throws Exception   {          Sender sender = new     Sender(APP_SECRET);//实例化Sender              sender.initPool(20,10);//设置连接池参数,可选项          Result result =   sender.getToken(APP_ID,APP_KEY);//发送鉴权请求            result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述              result.getAuthToken();//如鉴权请求发送成功,获得authToken    }

2.单推

接入方携带消息内容以及用户regId(或alias:别名)进行通知消息推送。针对每个用户发送不同的通知。

使用场景:如物流、订单状态、游戏预约状态、行程状态、聊天(如微信、评论)等。

接口说明:

com.vivo.push.sdk.server.Sender

方法说明
sendSingle(Message   singleMessage)根据消息体singleMessage中设定的regId或alias发送消息到指定设备上。

Demo

public   void singeSend() throws Exception {          Sender sender = new     Sender(APP_SECRET);sender.initPool(20,10);//设置连接池参数,可选项sender.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          Message singleMessage     = new Message.Builder().~.build();//构建单推消息体          Result result =     sender.sendSingle(singleMessage);//发送单推请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述          result.getTaskId();//如单推请求发送成功,将获得该条单推消息的任务编号,即taskId          result. getInvalidUser();//非法用户信息,包括status和userid          result.   getInvalidUser().getStatus();//非法用户信息状态,包括四种情况, 1 userId不存在。 2卸载或者关闭了通知。 3 14天不在线。4 非测试用户          result.   getInvalidUser().getUserid();//非法的用户信息,即接入方传的regid或者alias      }

3.批量推送

3.1保存群推消息

同一条信息覆盖多个用户。此方法需与批量推送用户方法2.3.2配套使用,批量推送用此方法返回的taskId批量发送用户。

使用场景:活动、系统升级提醒等。

接口说明:

com.vivo.push.sdk.server.Sender

方法说明
saveListPayLoad(Message   listPayLoad)把构建的消息体listPayLoad发送保存至服务器上,返回该消息的taskId

Demo

public void saveListPayload()   throws   Exception {          Sender sender = new   Sender(APP_SECRET);sender.initPool(20,10);//设置连接池参数,可选项sender.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          Message saveList =   new   Message.Builder().~.build();//构建要保存的批量推送消息体          Result result =     sender. saveListPayLoad(saveList);//发送保存群推消息请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述          result.getTaskId();//如请求发送成功,将获得该条消息的任务编号,即taskId    }

3.2批量推送用户

批量发送给用户。该方法与保存群推消息方法2.3.1配套使用,首先通过2.3.1获得taskId,然后使用该taskId,根据regIds或者aliases进行批量推送。

接口说明:

com.vivo.push.sdk.server.Sender

方法说明
sendToList(TargetMessage   targetMessage)把某条消息批量发送给多个用户

Demo

public   void listSend() throws Exception {          Sender sender = new     Sender(APP_SECRET);              sender.initPool(20,10);//设置连接池参数,可选项sender.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          Set<String>     regid = new HashSet<>();//构建批量推送用户群          regid.add(taskId1);          regid.add(taskId2);          …          TargetMessage     targetMessage = new   TargetMessage.Builder().~.build();//构建批量推送的消息体          Result result =     sender.sendToList(targetMessage);//批量推送给用户result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述          result. getInvalidUsers();//非法用户信息列表,其中每个非法用户信息包括status和userid两个属性,userid为接入方传的regid或者alias,status有四种情况:1 userId不存在 2卸载或者关闭了通知 3 14天不在线 4非测试用户      }

4.全量推送

向所有设备推送某条消息。

使用场景:活动、系统升级提醒等。

接口说明:

com.vivo.push.sdk.server.Sender

方法说明
sendToAll(Message   allMessage)把构建的消息allMessage发送给所有设备

Demo

public void allSend() throws     Exception {          Sender sender = new     Sender(APP_SECRET);              sender.initPool(20,10);//设置连接池参数,可选项sender.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          Message allSendMessage     = new Message.Builder().~.build();//构建要全量推送的消息体          Result result =     sender. sendToAll(allSendMessage);//发送全量推送消息请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述          result.getTaskId();//如请求发送成功,将获得该条消息的任务编号,即taskId    }

5.标签推

接入方携带消息内容、标签信息进行通知消息推送。根据标签把消息推送给指定用户

接口说明:

com.vivo.push.sdk.server.Sender

方法说明
sendToTag(Message   tagMessage)把构建的消息发送给标签圈定的用户

Demo

public void tagSend() throws Exception     {          Sender sender = new   Sender(APP_SECRET);              sender.initPool(20,10);//设置连接池参数,可选项sender.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          Message   tagSendMessage   = new Message.Builder().~.build();//构建要全量推送的消息体          Result result =     sender. sendToTag(tagSendMessage);//发送标签推送消息请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述          result.getTaskId();//如请求发送成功,将获得该条消息的任务编号,即taskId    }

6.消息体创建

6.1通知栏消息体

com.vivo.push.sdk.server.Message.Builder

Builder方法列表

方法说明
Builder()构造方法
regId(String value)仅单推时需设定(其它推送无需设定该项),单推可通过regId推送给指定用户。应用订阅PUSH服务器得到的id ,长度23个字符(regId,alias 两者需一个不为空,当两个不为空时,取regId)
alias(String value)仅单推时需设定(其它推送无需设定该项),单推可通过alias推送给指定用户。应用订阅PUSH服务器别名,长度不超过40字符(regId,alias 两者需一个不为空,当两个不为空时,取regId)
orTagss(List<String> valus)仅标签推送时需设定(其他推送无需设定该项),标签表达式包含三种数组: notTags表示非操作、andTags表示与操作,orTagss表示或操作,例如:                     “notTags”:[“琴”,”棋”,”书”,”画”],                      “andTags”:[“深圳”,”广东”],                      “orTagss”:[“本科生”,”研究生”]可以表示为,不会琴、棋、书、画的广东省深圳市的本科生或研究生的所有用户。这些标签需要先在平台,接口,或调用该说明文档3部分的方法,创建相应标签后再使用。具体使用方式可参考下面的DEMO和文档5.3部分
andTags(List<String> valus)
notTags(List<String> valus)
title(String value)必填项,设置通知标题(用于通知栏消息),最大20个汉字(一个汉字等于两个英文字符,即最大不超过40个英文字符)
content(String value)必填项,设置通知内容(用于通知栏消息)   最大50个汉字(一个汉字等于两个英文字符,即最大不超过100个英文字符)
notifyType(int value)必填项,设置通知类型,value类型支持以下值:1:无2:响铃3:振动4:响铃和振动
timeToLive(int value)可选项, 消息的生命周期, 若用户离线, 设置消息在服务器保存的时间, 单位: 秒默认时间:1天最长时间:7天最少时间:单推,60秒         其它,900秒
skipType(int value)必填项,设置点击跳转类型,value类型支持以下值:1:打开APP首页2:打开链接3:自定义4:打开app内指定页面
skipContent(String value)可选项,跳转内容跳转类型为2时,跳转内容最大1000个字符,跳转类型为3或4时,跳转内容最大1024个字符
networkType(int value)可选项,发送推送使用的网络方式,value支持以下值:-1:方式不限1:仅在wifi下发送不填默认为-1
clientCustomMap(String key, String         value)可选项,客户端自定义键值对,自定义key和value键值对个数不能超过10个,且长度不能超过1024字符,   key和value键值对总长度不能超过1024字符。
extra(String callback, String param)可选项,仅单推中使用,提供了高级特性(消息送达回执)。callback参数:不能为null,是第三方接收回执的http接口,最大长度128个字符,vivo推送服务器将已送达或和设备对应的alias或者regId通过调用第三方设置的回调http接口传给开发者服务器。param参数:可以为null,第三方自定义回执参数,最大长度64个字符
requestId(String value)必填项,用户请求唯一标识 最大64字符
classification(int value)消息类型 0:运营类消息,1:系统类消息
pushMode(int   value)推送模式 0:正式推送;1:测试推送,不填默认为0(测试推送,只能给web界面录入的测试用户推送;审核中应用,只能用测试推送)
build()根据设置的属性, 生成Message对象

Demo

public Message buildMessage() throws     Exception {            List<String> andTags = new ArrayList<>();            andTags.add(“TAG1”);            List<String> orTagss = new ArrayList<>();            orTags.add(“TAG2”);            List<String> notTags = new ArrayList<>();            notTags.add(“TAG3”);            Message message = new Message.Builder()                    .regId(“12345678901234567890123”)//仅构建单推消息体需要                  .alias(ALIAS) //仅构建单推消息体需要                  .orTagss(orTagss)     //仅构建标签推消息体需要                  .andTags(andTags)//仅构建标签推消息体需要                  .notTags(notTags) //仅构建标签推消息体需要                  .notifyType(1)                    .title(“YOUR_TITLE”)                    .content(“YOUR_CONTENT”)                  .timeToLive(1000)                  .skipType(2)                    .skipContent(“http://www.vivo.com”)                  .networkType(-1)                    .clientCustomMap(“key1”, “value1”)                    .extra(“http://www.vivo.com”, “vivo”)                    .requestId(“1234567890123456”)                  .classification(1).build();          Return message;    }
6.2批量推送用户消息体

com.vivo.push.sdk.server.TargetMessage.Builder

Builder方法列表

方法说明
Builder()构造方法
regIds(Set<String> regIds)regId列表,个数大于等于2,小于等于1000,regId长度23个字符(regIds,aliases 两者需一个不为空,两个都不为空时,取regIds)
aliases(Set<String> aliases)别名列表,个数大于等于2,小于等于1000,长度不超过40字符(regIds,aliases 两者需一个不为空,两个都不为空时,取regIds)
taskId(String taskId)必填项,公共消息任务号,即调用com.vivo.push.sdk.server.Sender.saveListPayLoad返回的taskId
requestId(String requestId)必填项,用户请求唯一标识   最大64字符
build()根据设置的属性, 生成TargetMessage对象

Demo

public TargetMessage buildTargetMessage()     throws Exception {          Set<String>     regids = new HashSet<>();              regids.add(“12345678901234567890123”);            regids.add(“12345678901234567890321”);          Set<String>     aliases = new HashSet<>();              aliases.add(“ALIAS1”);              aliases.add(“ALIAS2”);          TargetMessage     targetMessage = new TargetMessage.Builder()                      .regIds(regids)                      .aliases(aliases)                      .requestId(“1234567890123456”)                      .taskId(“123456789012345678”).build();          Return targetMessage;    }

7.获取消息推送的统计值

获取批量推送或全量推送返回的taskId对应的统计信息,单次查询的taskIds最多100个。

接口说明:

com.vivo.push.sdk.server.Sender

方法说明
getStatistics(Set<String>     taskIds)查询taskIds里面所有taskId对应的统计信息,taskIds里最多存放100个taskId

Demo

public void testGetStatistics() throws   IOException {          Sender sender = new     Sender(APP_SECRET,authToken);              sender.initPool(20,10);//设置连接池参数,可选项          Set<String>     taskIds = new HashSet<>();              taskIds.add(“123456789012345678”);              taskIds.add(“123456789087654321”);          Result result =     sender.getStatistics(taskIds);result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述          result. getStatistics     ();//如请求发送成功,将获得各个taskId对应的统计数据    }

三、标签管理

1.新增标签

为应用方增加标签,用于后续标签推送。

接口说明:

com.vivo.push.sdk.server.TagMange

方法说明
addTag(TagMessage   tagMessage)根据消息体tagMessage中设定的相关信息创建新标签。

Demo

public void tagAdd() throws Exception {        TagManage   tagManage   =   new TagManage (APP_SECRET);tagManage.initPool(20,10);//设置连接池参数,可选项tagManage.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          TagMessage tagMessage = new     TagMessage.Builder()                      .name(“TAG_NAME”) //必填项,标签名称                      .desc(“TAG_DESCRIPTION”)//可选项,标签描述                    .group(“GROUP_NAME”)//可选项,标签分类名称(参考4部分)                    .build(); //构建创建标签的消息体          Result result =   tagManage.addTag(tagMessage);//发送创建标签请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述}

2.更新单个标签

更新一个标签的信息,更新标签名字、描述、所属分类。

接口说明:

com.vivo.push.sdk.server.TagMange

方法说明
updateTag (TagMessage   tagMessage)根据消息体tagMessage中设定的相关信息更新已存在的标签信息。

Demo

public void tagUpdate() throws Exception {          TagManage tagManage   =   new TagManage (APP_SECRET);tagManage.initPool(20,10);//设置连接池参数,可选项tagManage.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          TagMessage tagMessage = new     TagMessage.Builder()                      .oldName(“OLD_NAME”)//必填项,旧的标签名称                      .newName(“NEW_NAME”)//必填项,新的标签名称                      .desc(“TAG_DESCRIPTION”)//可选项,更新标签描述                    .group(“GROUP_NAME”)//可选项,更新标签分类(参考4部分)                    .build(); //构建更新标签的消息体        Result   result =   tagManage.updateTag(tagMessage);//发送更新标签请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述}

3.给标签添加用户设备

给标签添加用户设备信息,单次不超过1000个设备。

接口说明:

com.vivo.push.sdk.server.TagMange

方法说明
addMembers(TagMessage   tagMessage)把tagMessage中指定的用户设备添加到指定的标签中。

Demo

public void tagAddMembers () throws   Exception {          TagManage tagManage   =   new TagManage (APP_SECRET);tagManage.initPool(20,10);//设置连接池参数,可选项tagManage.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)Set<String>   ids = new   HashSet<>();ids.add(“REGID1”);ids.add(“REGID2”);          TagMessage tagMessage     = new TagMessage.Builder()                      .name(“TAG_NAME”)//必填项,要添加用户设备的标签名称                    .type(1)// 必填项,用户类型:1是regId ,2是别名                    .ids(ids)//必填项,用户id                    .build();//构建给标签添加用户设备的消息体          Result result =   tagManage.addMembers   (tagMessage);//发送给标签添加用户设备的请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述        result.getData();//非法用户信息列表,其中每个非法用户信息包括status和userid两个属性,userid为接入方传的regid或者alias,status有三种情况:1是用户不存在,2是用户push开关关闭,3是用户14天未联网}

4.移除标签中的用户设备

移除标签中的用户设备信息,单次不超过1000个设备。

接口说明:

com.vivo.push.sdk.server.TagMange

方法说明
removeMembers(TagMessage   tagMessage)把tagMessage中指定的用户设备从指定标签中移除。

Demo

public void tagRemoveMembers () throws   Exception {          TagManage tagManage   =   new TagManage (APP_SECRET);tagManage.initPool(20,10);//设置连接池参数,可选项tagManage.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)Set<String>   ids = new   HashSet<>();ids.add(“REGID1”);ids.add(“REGID2”);          TagMessage   tagMessage   = new TagMessage.Builder()                    .name(“TAG_NAME”)//必填项,要移除用户设备的标签名称                    .type(1)// 必填项,用户类型:1是regId ,2是别名                    .ids(ids)//必填项,用户id                    .build();//构建移除标签用户设备的消息体          Result result = tagManage.     addMembers (tagMessage);//发送移除标签中的指定用户设备的请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述          result.getData();//非法用户信息列表,其中每个非法用户信息包括status和userid两个属性,userid为接入方传的regid或者alias,status有三种情况:1是用户不存在,2是用户push开关关闭,3是用户14天未联网}

四、标签分类管理

1.新增标签分类

为应用方增加标签分类,用于后续标签分类管理。

接口说明:

com.vivo.push.sdk.server.TagGroup

方法说明
addTagGroup(TagGroupMessage     groupMessage)根据消息体groupMessage中设定的相关信息创建新标签分类。

Demo

public void addGroup() throws Exception {          TagGroup tagGroup =     new TagGroup (APP_SECRET);tagGroup.initPool(20,10);//设置连接池参数,可选项tagGroup.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          TagGroupMessage   groupMessage   = new TagGroupMessage.Builder()                      .name(“GROUP_NAME”)//必填项,标签分类名称                    .type(1)//必填项,标签分类类型:1是普通标签,2是互斥标签                      .desc(“one group”)//可选项,标签分类的描述信息                    .build();//构建新增标签分类的消息体       Result result   = tagGroup.addTagGroup   (groupMessage);//发送创建标签分类的请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述}

2.更新单个标签分类

更新一个标签分类的信息,包括标签分类名称和描述。

接口说明:

com.vivo.push.sdk.server.TagGroup

方法说明
updateTag(TagGroupMessage     groupMessage)根据消息体groupMessag中设定的相关信息更新已存在的标签分类信息。

Demo

public void updateGroup() throws Exception {          TagGroup tagGroup =     new TagGroup (APP_SECRET);tagGroup.initPool(20,10);//设置连接池参数,可选项tagGroup.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          TagGroupMessage     groupMessage = new TagGroupMessage.Builder()                      .oldName(“OLD_NAME”)//必填项,旧的标签分类名称                      .newName(“NEW_NAME”)//必填项,新的标签分类名称                      .desc(“TAG_DESCRIPTION”)//可选项,更新标签分类的描述                    .build(); //构建更新标签分类的消息体          Result result =   tagGroup.updateTagGroup   (groupMessage);//发送更新标签分类的请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述}

3.添加标签到标签分类中

把标签添加进标签分类里面,一次可添加一个或者多个标签,最多不超过100个。

接口说明:

com.vivo.push.sdk.server.TagGroup

方法说明
addTagToGroup(TagGroupMessage groupMessage)把groupMessag中指定的标签添加到指定的标签分类中。

Demo

public void tagsToGroup() throws Exception {          TagGroup tagGroup =     new TagGroup (APP_SECRET);tagGroup.initPool(20,10);//设置连接池参数,可选项tagGroup.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)List<String>   tagList = new   ArrayList<>();tagList.add(“TAG1”);tagList.add(“TAG2”);          TagGroupMessage     groupMessage = new TagGroupMessage.Builder()                    .name(“TAG_GROUP_NAME”)//必填项,需添加标签的标签分类名称                    .tagList(tagList)//必填项,标签列表                    .build(); //构建添加标签到标签分类的消息体          Result result =   tagGroup.addTagToGroup   (groupMessage);//发送添加标签到标签分类的请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述}

五、标签组合管理

1.新增标签组合

为应用方增加标签组合。 一个标签组合由多个标签组成。

接口说明:

com.vivo.push.sdk.server.TagSegment

方法说明
addTagSegment(TagSegMessage segMessage)根据消息体segMessage中设定的相关信息创建新标签组合。

Demo

public void addSegment() throws Exception {          TagSegment   tagSegment   = new TagSegment (APP_SECRET);tagSegment.initPool(20,10);//设置连接池参数,可选项tagSegment.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          List<String> andTags     = new ArrayList<>();            andTags.add(“TAG1”);          List<String> orTagss     = new ArrayList<>();          orTags.add(“TAG2”);          List<String> notTags     = new ArrayList<>();            notTags.add(“TAG3”);          TagSegMessage     segMessage = new TagSegMessage.Builder()                    .name(“SEGMENT_NAME”)//必填项,标签组合的名称                    .andTags(andTags)//与操作                    .orTagss(orTags)//或操作                    .notTags(notTags)//非操作(具体与,或,非含义,操作参考5.3)                    .build();//构建新增标签组合的消息体      Result result   =   tagSegment.addTagSegment (segMessage);//发送创建标签组合的请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述}

2.更新标签组合

更新一个标签组合的信息。

接口说明:

com.vivo.push.sdk.server.TagSegment

方法说明
addTagSegment(TagSegMessage     segMessage)根据消息体segMessage中设定的相关信息创建新标签组合。

Demo

public void updateSegment() throws Exception   {          TagSegment   tagSegment   = new TagSegment (APP_SECRET);tagSegment.initPool(20,10);//设置连接池参数,可选项tagSegment.setAuthToken(authToken);//设置推送的必要参数authToken(调用鉴权方法获得)          List<String> andTags     = new ArrayList<>();            andTags.add(“TAG1”);          List<String> orTagss     = new ArrayList<>();            orTagss.add(“TAG2”);          List<String> notTags     = new ArrayList<>();            notTags.add(“TAG3”);          TagSegMessage     segMessage = new TagSegMessage.Builder()                      .oldName(“OLD_NAME”)//必填项,旧的标签组合名称                    .newName(“NEW_NAME”)//必填项,新的标签组合名称                    .andTags(andTags)//与操作                    .orTagss(orTags)//或操作                    .notTags(notTags)//非操作(具体与,或,非含义,操作参考5.3)                    .build();//构建新增标签组合的消息体      Result result   =   tagSegment.updateTagSegment (segMessage);//发送更新标签组合的请求result.getResult();//获取服务器返回的状态码,0成功,非0失败          result.getDesc();//获取服务器返回的调用情况文字描述}

3.标签组合表达式

List<String> andTags = new   ArrayList<>();andTags.add(“深圳”,”广东”);List<String> orTagss = new   ArrayList<>();orTagss.add(“本科生”,”研究生”);List<String> notTags = new   ArrayList<>();notTags.add(“琴”,”棋”,”书”,”画”);TagSegMessage segMessage = new   TagSegMessage.Builder()                      .name(“SEGMENT_NAME”)//必填项,标签组合的名称                    .andTags(andTags)//与操作                    .orTagss(orTags)//或操作                    .notTags(notTags)//非操作                    .build();
标签表达式包含三种数组: notTags表示非操作、andTags表示与操作,orTagss表示或操作,例如如上面所示创建标签表达式,即代表:                 “notTags”:[“琴”,”棋”,”书”,”画”],                  “andTags”:[“深圳”,”广东”],                  “orTagss”:[“本科生”,”研究生”]可以表示为,不会琴、棋、书、画的广东省深圳市的本科生或研究生的所有用户。这些标签需要先在平台,接口,或调用该说明文档3部分的方法,创建相应标签后再使用。

VIVO消息推送服务端API接口文档

VIVO消息推送服务端API接口文档

当前版本:2.9.2

修改记录:

(1)/message/auth接口,鉴权码生成方式优化,增加调用频率为10次/s,取消每天10000次数量限制;

(2)各接口请求体,新增appId,用于跟鉴权信息进行比对,确认是否为应用信息一致,不一致返回错误码10094

一.公共

1.推送超量说明

如果调用接口出现超量限制的返回码,请不要在当天高频次调用服务器相应接口,否则将调低推送量级;

出现“10070:发送总量超出限制”。当天不要调用/message/send 单推接口;

出现“10252:批量发送消息体超出限制”。当天不要调用/message/saveListPayload 保存群推消息公共体接口;

出现“10070:发送总量超出限制”。当天不要调用/message/saveListPayload 保存群推消息公共体接口,以及/message/pushToList 批量推送用户接口;

出现“10254:全量发送超过次数限”。当天不要调用/message/all 全量发送接口;

关于推送量的说明可以参考【vivo推送常见问题汇总】

2.vivo服务器地址

https://api-push.vivo.com.cn

3.公共传入参数

HTTP Header中(推送鉴权接口除外)。

属性名字类型是否必填Y/N描述
authTokenstringY当鉴权成功时会返回该字段,推送消息时需要提供authToken,有效期默认为1天,过期后无法使用

4.高级特性extra

注意:回执目前仅支持单推接口且是正式消息 

属性名字类型是否必填Y/N描述
callbackstringY第三方接收回执的http接口,最大长度128个字符
callback.paramstringN第三方自定义回执参数,最大长度64个字符

二.接口定义

1.鉴权

1.1推送鉴权接口

接口说明

要想调用PUSH接口,任何接入方都要有个鉴权操作。其他接口header中必须携带该参数。

接口返回的参数authToken,一个appId可对应多个token,24小时过期,业务方做中心缓存,1-2小时更新一次。

限制:频率限制,单个app 10次/s。超频返回错误码10094。

访问方式

URL编码方式协议methodContent-Type
/message/authUtf-8httpsPOSTapplication/json
Curl e.g.:curl -X POST -H     ‘Content-Type:application/json’ -d   ‘${your_request_body}’     https://api-push.vivo.com.cn/message/authRequest body e.g.:{        “appId”:10004,          “appKey”:”25509283-3767-4b9e-83fe-b6e55ac6243e”,        “timestamp”:1501484120000,          “sign”:”8424f52fd5eaedc16474e4f702d230d2″}Response body e.g.:http status 200:业务成功:{         “result”:   0,         “desc”:   “请求成功”,        “authToken”:     “24ojds98fu3jqrioeu982134jieds9fq43u09uaf”}业务异常:{         “result”:   xxx,         “desc”:   “xxx不合法”}http status 500:Internet server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId
appKeystringY用户申请推送业务时获得的appKey
timestamplongYUnix时间戳 做签名用,单位:毫秒,且在vivo服务器当前utc时间戳前后十分钟区间内。
signstringY签名 使用MD5算法,字符串trim后拼接(appId+appKey+timestamp+appSecret),然后通过MD5加密得到的值(字母小写)

 输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况
authTokenstring当鉴权成功时才会有该字段,推送消息时,需要提供authToken,有效期默认为1天,过期后无法使用。一个appId可对应多个token,24小时过期,业务方做中心缓存,1-2小时更新一次。

2.单播

2.1单推接口

接口说明

接入方携带消息内容以及用户regId(或alias)进行通知消息推送。针对每个用户发送不同的通知。

使用场景:如物流、订单状态、游戏预约状态、行程状态、聊天(如微信、评论)等。

限制:根据客户端SDK订阅数自动配置,可发送的用户总量可以在开发者后台查看。

访问方式

URL编码方式协议methodContent-Type
/message/sendUtf-8httpsPOSTapplication/json
Curl e.g.:curl -X POST -H ‘authToken:${your_auth_token}’   -H     ‘Content-Type:application/json’  -d     ‘${your_request_body}’   https://api-push.vivo.com.cn/message/sendRequest body e.g.:{      “appId”:10004,      “regId”:”12345678901234567890123″,      “notifyType”:1,      “title”:”标题1″,      “content”:”内容1″,      “timeToLive”:86400,      “skipType”:2,          “skipContent”:”http://www.vivo.com”,        “networkType”:”1″,      “clientCustomMap”:{              “key1″:”vlaue1”,              “key2″:”vlaue2”    },    “extra”:{              “callback”:”http://www.vivo.com”,              “callback.param”:”vivo”    },          “requestId”:”25509283-3767-4b9e-83fe-b6e55ac6b123″}Response body e.g.:http status 200:业务成功:{         “result”:   0,         “desc”:   “请求成功”,”taskId”:   “121397329”}推送使用的regid或alias不合法,无法送达:{        “result”: 10302,        “desc”: “regId 不合法”,        “invalidUser”: {            “status”: 1,            “userid”:   “15638535410301000000001”      }}业务异常:{         “result”:   xxx,”desc”: “xxx不合法”} http status 500:Internet server error!

接口定义

输入参数:

intent uri

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
regIdstringN应用订阅PUSH服务器得到的id   长度23个字符(regId,alias 两者需一个不为空,当两个不为空时,取regId)
aliasstringN别名 长度不超过40字符(regId,alias两者需一个不为空,当两个不为空时,取regId)
notifyTypeintY通知类型 1:无,2:响铃,3:振动,4:响铃和振动
titlestringY通知标题(用于通知栏消息) 最大20个汉字(一个汉字等于两个英文字符,即最大不超过40个英文字符)
contentstringY通知内容(用于通知栏消息) 最大50个汉字(一个汉字等于两个英文字符,即最大不超过100个英文字符)
timeToLiveintN消息保留时长 单位:秒,取值至少60秒,最长7天。当值为空时,默认一天
skipTypeintY点击跳转类型 1:打开APP首页 2:打开链接 3:自定义 4:打开app内指定页面
skipContentstringN跳转内容 跳转类型为2时,跳转内容最大1000个字符,跳转类型为3或4时,跳转内容最大1024个字符,skipType传3需要在onNotificationMessageClicked回调函数中自己写处理逻辑。关于skipContent的内容可以参考【vivo推送常见问题汇总】
networkTypeintN网络方式 -1:不限,1:wifi下发送,不填默认为-1
classificationintN消息类型 0:运营类消息,1:系统类消息。不填默认为0
clientCustomMapJSON ObjectN客户端自定义键值对 自定义key和Value键值对个数不能超过10个,且长度不能超过1024字符, key和Value键值对总长度不能超过1024字符。app可以按照客户端SDK接入文档获取该键值对
extraJSON ObjectN高级特性(详见目录:一.公共——5.高级特性 extra)
requestIdstringY用户请求唯一标识 最大64字符
pushModeintN推送模式 0:正式推送;1:测试推送,不填默认为0(测试推送,只能给web界面录入的测试用户推送;审核中应用,只能用测试推送)
auditReviewJSON ArrayN第三方审核结果,参见:基于第三方审核结果的消息推送

 输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况
taskIdstring任务编号
 invalidUserJSON Object非法用户信息,包括status和userid,userid为接入方传的regid或者alias,status有三种情况:1.userId不存在;2.卸载或者关闭了通知;3.七天不在线;4.非测试用户

3.广播

3.1保存群推消息公共体接口

接口说明

同一条信息覆盖多个用户。此接口需与批量推送用户接口3.2配套使用,批量推送接口用此接口生成taskId批量发送用户。

使用场景:活动、系统升级提醒等。

限制:默认根据客户端SDK订阅数自动配置。

访问方式

URL编码方式协议methodContent-Type
/message/saveListPayloadUtf-8httpsPOSTapplication/json
Curl e.g.:curl -X POST  -H   ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’    -d   ‘${your_request_body}’   https://api-push.vivo.com.cn/message/saveListPayloadRequest body e.g.:{        “appId”:10004,        “title”:”标题1″,        “content”:”内容1″,        “notifyType”:1,        “timeToLive”:86400,        “skipType”:2,          “skipContent”:”http://www.vivo.com”,        “networkType”:”1″,        “clientCustomMap”:{              “key1″:”vlaue1”,              “key2″:”vlaue2”},          “requestId”:”25509283-3767-4b9e-83fe-b6e55ac6b123″}Response body e.g.:http status 200:业务成功:{         “result”:   0,         “desc”:   “请求成功”,”taskId”:   “342982232646905856”}业务异常:{         “result”:   xxx,”desc”: “xxx不合法”}http status 500:Internet server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
notifyTypeintY通知类型 1:无,2:响铃,3:振动,4:响铃和振动
titlestringY通知标题(用于通知栏消息) 最大20个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过40个英文字符)
contentstringY通知内容(用于通知栏消息) 最大50个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过100个英文字符)
timeToLiveintN消息保留时长 单位:秒,取值至少900秒,最长7天。当值为空时,默认一天。
skipTypeintY点击跳转类型 1:打开APP首页 2:打开链接 3:自定义 4:打开app内指定页面
skipContentstringN跳转内容 跳转类型为2时,跳转内容最大1000个字符,跳转类型为3或4时,跳转内容最大1024个字符,skipType传3需要在onNotificationMessageClicked回调函数中自己写处理逻辑。关于skipContent的内容可以参考【vivo推送常见问题汇总】 pushSDK版本号:480以上,不在支持skipType=3,自定义跳转统一使用skipType=4,详见【vivo推送常见问题汇总】中API接入问题的Q11中的intent uri示例。
networkTypeintN网络方式 -1:不限,1:wifi下发送,不填默认为-1
classificationintN消息类型 0:运营类消息,1:系统类消息。不填默认为0
clientCustomMapJSON ObjectN客户端自定义键值对 自定义key和Value键值对个数不能超过10个,且长度不能超过1024字符, key和Value键值对总长度不能超过1024字符。app可以按照客户端SDK接入文档获取该键值对。
requestIdstringY用户请求唯一标识 最大64字符
auditReviewJSON ArrayN第三方审核结果,参见:基于第三方审核结果的消息推送

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况
taskIdstring任务编号

3.2批量推送用户接口

接口说明

批量发送用户。此接口与群推消息接口3.1配套使用,首先通过群推消息接口3.1返回taskId,然后此接口带上taskId批量发送用户,可以根据regIds或者aliases分批调用。每次调用时,regIds或者aliases的个数必须大于等于2,小于等于1000。

限制:根据客户端SDK订阅数自动配置,可发送的用户总量可以在开发者后台查看。

访问方式

URL编码方式协议methodContent-Type
/message/pushToListUtf-8httpsPOSTapplication/json
Curl e.g.:   curl -X POST -H   ‘authToken:${your_auth_token}’ -H       ‘Content-Type:application/json’  -d   ‘${your_request_body}’   https://api-push.vivo.com.cn/message/pushToListRequest body e.g.:{      “appId”:10004,      “regIds”:[              “12345678901234567890121”,              “12345678901234567890122”        ],          “taskId”:”342982232646905856″,          “requestId”:”25509283-3767-4b9e-83fe-b6e55ac6b123″}Response body e.g.:http status 200:业务成功:{    “requestId”: “25509283-3767-4b9e-83fe-b6e55ac6b123”,    “result”: 0,    “desc”: “请求成功”,    “invalidUsers”: [{        “status”: 1,        “userid”: “12345678901234567890121”    }]}
业务异常:{         “result”:   xxx,         “desc”:   “xxx不合法”}http status 500:Internet server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
regIdsstring[]NregId列表 个数大于等于2,小于等于1000(regIds,aliases   两者需一个不为空,两个不为空,取regIds)
aliasesstring[]N别名列表个数大于等于2,小于等于1000,长度不超过40字符(regIds,aliases 两者需一个不为空,两个不为空,取regIds)
taskIdstringY公共消息任务号,取saveListPayload返回的taskId
requestIdstringY请求唯一标识,最大64字符
pushModeintN推送模式 0:正式推送;1:测试推送,不填默认为0(测试推送,只能给web界面录入的测试用户推送;审核中应用,只能用测试推送)

输出参数:

  属性名字  类型  描述
  result  int  接口调用是否成功的状态码 0成功,非0失败
  desc  string  文字描述接口调用情况
  invalidUser  JSON Object  非法用户信息,包括status和userid,userid为接入方传的regid或者alias,status有三种情况:1.userId不存在;2.卸载或者关闭了通知;3.七天不在线;4.非测试用户

3.3全量发送接口

接口说明

向所有设备推送某条消息。

使用场景:活动、系统升级提醒等。

限制:默认是每个app每日可发送一条。

访问方式

URL编码方式协议methodContent-Type
/message/allUtf-8httpsPOSTapplication/json
Curl e.g.:curl -X POST -H     ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’  -d ‘${your_request_body}’     https://api-push.vivo.com.cn/message/allRequest body e.g.:{        “appId”:10004,        “notifyType”:1,        “title”:”标题1″,        “content”:”内容1″,        “timeToLive”:86400,        “skipType”:2,          “skipContent”:”http://www.vivo.com”,        “networkType”:”1″,      “clientCustomMap”:{              “key1″:”vlaue1”,              “key2″:”vlaue2”      },          “requestId”:”25509283-3767-4b9e-83fe-b6e55ac6b123″}Response body e.g.:http status 200:业务成功:{         “result”:   0,         “desc”:   “请求成功”,”taskId”:     “12139732”}业务异常:{         “result”:   xxx,”desc”: “xxx不合法”}http status 500:Internet server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
notifyTypeintY通知类型 1:无,2:响铃,3:振动,4:响铃和振动
titlestringY通知标题(用于通知栏消息) 最大20个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过40个英文字符)
contentstringY通知内容(用于通知栏消息) 最大50个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过100个英文字符)
timeToLiveintN消息保留时长 单位:秒,取值至少900秒,最长7天。当值为空时,默认一天
skipTypeintY点击跳转类型 1:打开APP首页 2:打开链接 3:自定义 4:打开app内指定页面
skipContentstringN跳转内容 跳转类型为2时,跳转内容最大1000个字符,跳转类型为3或4时,跳转内容最大1024个字符,skipType传3需要在onNotificationMessageClicked回调函数中自己写处理逻辑。关于skipContent的内容可以参考【vivo推送常见问题汇总】 pushSDK版本号:480以上,不在支持skipType=3,自定义跳转统一使用skipType=4,详见【vivo推送常见问题汇总】中API接入问题的Q11中的intent uri示例。
networkTypeintN网络方式 -1:不限,1:wifi下发送,不填默认为-1
classificationintN消息类型 0:运营类消息,1:系统类消息。不填默认为0
clientCustomMapJSON ObjectN客户端自定义键值对 自定义key和Value键值对个数不能超过10个,且长度不能超过1024字符, key和Value键值对总长度不能超过1024字符。app可以按照客户端SDK接入文档获取该键值对
requestIdstringY用户请求唯一标识 最大64字符
auditReviewJSON ArrayN第三方审核结果,参见:基于第三方审核结果的消息推送

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况
taskIdstring任务编号

3.4获取消息推送的统计值接口

接口说明

获取taskId对应的统计信息,taskIds最多100个。 注意:查询的消息类型 【群推送消息/列表推消息】

访问方式

URL编码方式协议methodContent-Type
/report/getStatisticsUtf-8httpsGETapplication/json
Curl e.g.:   curl -X GET  -H   ‘authToken:${your_auth_token}’ -H       ‘Content-Type:application/json’     https://api-push.vivo.com.cn/report/getStatistics?appId=10004&taskIds=123138209,23498102,3240910940,109283018Request body e.g.:Response body e.g.:http status 200:业务成功:{        “result”:0,        “desc”:”请求成功”,      “statistics”:[    {          “taskId”:   “298475091219”,          “target”: 10000,          “valid”: 9500,          “send”: 9000,          “receive”: 9000,          “display”: 8000,          “click”: 200,          “targetInvalid”:   200,          “targetUnSub”:   200,          “targetInActive”: 100,          “covered”: 200,          “controlled”:   200,          “targetOffline”:   100    },    {          “taskId”:   “298475091220”,          “target”: 10000,          “valid”: 9500,          “send”: 9000,          “receive”: 9000,          “display”: 8000,          “click”: 200,          “targetInvalid”:   200,          “targetUnSub”:   200,            “targetInActive”: 100,          “covered”: 200,          “controlled”:   200,          “targetOffline”:   100    }]}业务异常:{         “result”:   xxx,         “desc”:   “xxx不合法”}http status 500:Internet server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
taskIdsstringY查询的任务列表taskIds 用,分隔开 e.g.:   “234567,234568”

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况
taskIdstring任务号
targetlong目标总数
targetInvalidlong不存在的用户总数,根据id找不到任何信息
targetUnSublong解订阅的用户总数,用户已卸载或者客户端主动调用turnOffPush()解订阅
targetInActivelong14天不在网的用户数,手机14天没有联网,信息被后台删除
validlong有效目标总数
coveredlong被覆盖的用户消息总数,群推、全推、标签推消息属于营销消息,会被覆盖
controlledlong被管控的用户消息总数,例如接收的群推消息总数一天超过5条
targetOfflinelong推送后不在线的用户数,截止到当前统计时间为止,没有联网的用户数,呈下降趋势
sendlong下发总数
receivelong到达总数
displaylong展示总数
clicklong点击总数

4.回执

4.1消息送达回执

接口说明

vivo推送服务器将已送达或和对应设备的alias或者regId通过调用第三方设置的回调,http接口传给开发者服务器。仅单播支持回执(每次调用后,推送服务器会清空这些数据。)

使用:

① 发送消息接口设置扩展参数extra(详见目录:一.公共——5.高级特性 extra), 包含callback、callback.param。

② vivo推送服务器调用第三方设置的callback url接口。 

③ 字段ackType  【达回执类型】目前只有到达回执ackType=0

访问方式

URL编码方式协议methodContent-Type
第三方设置的callback url(详见:高级特性 extra)Utf-8https/httpPOSTapplication/json
Curl e.g.:   curl -X POST -H   ‘Content-Type:application/json’ -d     ‘${your_request_body}’   https://callbackurlRequest body e.g.:{      “taskId1”:{              “param”:”param1″,              “targets”:”alias1,alias2,alias3″,              “ackTime”:1612776166257    },      “taskId2”:{              “param”:”param2″,              “targets”:”regId1,regId2,regId3″,              “ackTime”:1612776166258    }}Response body e.g.:http status 200:http status 500:Internet server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
taskIdstringY任务编号
paramstringY开发者上传的自定义参数值
targetsstringY一批alias或者regId列表,之间是用逗号分割
ackTimelongN回执到达时间,毫秒时间戳

 回执流程

设备在线:

设备不在线:

5.标签管理

5.1 新增标签接口

接口说明

为应用方增加标签,用于后续标签推送。

访问方式

URL编码方式协议methodContent-Type
/tag/addUtf-8httpsPOSTapplication/json
Curl e.g.:   curl -X POST   -H   ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’  -d     ‘${your_request_body}’ https://host:port/tag/addRequest   body e.g.:{          “appId”:10004,          “name”:   “shenzhen”,          “desc”:”深圳用户标签”,       “group”:”city”}Response body   e.g.:http status   200:{         “result”: 0,         “desc”: “成功”,}业务异常:{         “result”: xxx,”desc”:     “xxx”}http status   500:Internet   server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
namestringY标签名称
descstringN标签描述
groupstringN标签分类名

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况

5.2 更新单个标签接口

接口说明

更新一个标签的信息,更新标签名字、描述、所属分类。

访问方式

URL编码方式协议methodContent-Type
/tag/updateUtf-8httpsPOSTapplication/json
Curl e.g.:   curl -X POST   -H   ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’  -d ‘${your_request_body}’       https://host:port/tag/updateRequest   body e.g.:{           “appId”:10004,           “oldName”:”shenzhen”,           “newName”:”shenzhenbaoan”}Response body   e.g.:http status   200:{    “result”:   0,    “desc”:   “成功”}业务异常:{         “result”: xxx,”desc”:     “xxx”}http status   500:Internet   server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
oldNamestringY旧标签名称
newNamestringY新标签名称
descstringN更新标签描述
groupstringN更新标签所属分类

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况

5.3 给标签添加用户设备接口

接口说明

给标签添加用户设备信息,单次不超过1000个设备。

访问方式

URL编码方式协议methodContent-Type
/tag/addMembersUtf-8httpsPOSTapplication/json
Curl e.g.:   curl -X POST   -H   ‘authToken:${your_auth_token}’ -H ‘Content-Type:application/json’      -d ‘${your_request_body}’   https://host:port/tag/addMembersRequest   body e.g.:{         “appId”:10004,         “name”:”shenzhen”,         “type”:1,             “ids”:[“15549635570031000000216″,”15549635980031000001086”]}Response body   e.g.:http status   200:{    “result”:   0,    “desc”:   “success”,    “data”: [          {                “status”: 1,                “userid”:   “00000000000000000000004”          },          {                “status”: 1,                “userid”:   “00000000000000000000005”          }    ]}业务异常:{         “result”: xxx,”desc”:     “xxx”}http status   500:Internet   server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
namestringY标签名字
typeintY用户类型:1是regId   ,2是别名
idsJSON ArrayY用户id

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况
dataJSON Arrayuserid是非法用户id,status有3种状态:1是用户不存在,2是用户push开关关闭,3是用户14天未联网。

5.4 移除标签中的用户设备接口

接口说明

移除标签中的用户设备信息,单次不超过1000个设备。

访问方式

URL编码方式协议methodContent-Type
/tag/removeMembersUtf-8httpsPOSTapplication/json
Curl e.g.:   curl -X POST   -H   ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’  -d ‘${your_request_body}’       https://host:port/tag/removeMembersRequest   body e.g.:{         “appId”:10004,         “name”:”shenzhen”,         “type”:1,         “ids”:[“15554239157791000000009″,”15554239157791000000008”]}Response body   e.g.:http status   200:{    “result”:   0,    “desc”:   “success”,    “data”: [          {                “status”: 1,                “userid”:   “15554239157791000000008”          },          {                “status”: 1,                “userid”:   “15554239157791000000009”          }    ]}业务异常:{         “result”: xxx,         “desc”:     “xxx”}http status   500:Internet   server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
namestringY标签名字
typeintY用户类型:1是regId   ,2是别名
idsJSON ArrayY用户id

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况
dataJSON Arrayuserid是非法用户id,status有3种状态:1是用户不存在,2是用户push开关关闭,3是用户14天未联网。

6.标签分类管理

6.1 新增标签分类接口

接口说明

为应用方增加标签分类,用于后续标签分类管理。

访问方式

URL编码方式协议methodContent-Type
/tagGroup/addUtf-8httpsPOSTapplication/json
Curl e.g.:   curl -X POST   -H   ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’  -d   ‘${your_request_body}’ https://host:port/tagGroup/addRequest body e.g.:{    “appId”:10004,    “name”:   “guangzhou”,     “type”:”city”}Response body   e.g.:http status   200:{         “result”: 0,         “desc”: “成功”,}业务异常:{         “result”: xxx,         “desc”:     “xxx”}http status   500:Internet   server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
namestringY标签分类名称
typeintY标签分类类型:1是普通标签,2是互斥标签
descstringN标签分类描述

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况

6.2 更新单个标签分类接口

接口说明

更新一个标签分类的信息,包括标签分类名称和描述。

访问方式

URL编码方式协议methodContent-Type
/tagGroup/updateUtf-8httpsPOSTapplication/json
Curl e.g.:   curl -X POST   -H   ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’  -d ‘${your_request_body}’       https://host:port/tagGroup/updateRequest   body e.g.:{      “appId”:10004,      “oldName”: “city”,      “newName”:   “province”,      “desc”:   “这是更新后的描述”}Response body   e.g.:http status   200:{    “result”:   0,    “desc”:   “成功”}业务异常:{         “result”: xxx,         “desc”:     “xxx”}http status   500:Internet   server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
oldNamestringY旧标签分类名称
newNamestringY新标签分类名称
descstringN新标签分类的描述

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况

6.3 添加标签到标签分类接口

接口说明

把标签添加进标签分类里面,一次可添加一个或者多个标签,最多不超过100个。

访问方式

URL编码方式协议methodContent-Type
/tagGroup/addToGroupUtf-8httpsPOSTapplication/json
Curl e.g.:   curl -X POST   -H   ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’  -d ‘${your_request_body}’       https://host:port/tagGroup/addToGroupRequest   body e.g.:{         “appId”:10004,         “name”:”city”,         “tagList”:[“shenzhen”,”guangzhou”]}Response body   e.g.:http status   200:{    “result”:   0,    “desc”:   “成功”}业务异常:{         “result”: xxx,”desc”:     “xxx”}http status   500:Internet   server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
namestringY标签分类名称
tagListJSON ArrayY一个或多个标签

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况

7.标签组合管理

7.1 新增标签组合接口

接口说明

为应用方增加标签组合。 一个标签组合由多个标签组成。

访问方式

URL编码方式协议methodContent-Type
/tagSegment/addUtf-8httpsPOSTapplication/json
Curl e.g.:   curl -X POST   -H   ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’  -d     ‘${your_request_body}’ https://host:port/tagSegment/addRequest   body e.g.:{    “appId”:10004,    “name”:   “segment1”,          “expression”:{                   “notTags”:[“shenzhen”],                  “andTags”:[],                  “orTags”:[]          }}Response body   e.g.:http status   200:{         “result”: 0,         “desc”: “成功”,}业务异常:{         “result”: xxx,”desc”:     “xxx”}http status   500:Internet   server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
namestringY标签组合名称
expressionJSON ObjectY标签组合表达式:包含三种JSON数组:notTags表示非操作、andTags表示与操作,orTags表示或操作,例如:”tagExpression”:{                 “notTags”:[“琴”,”棋”,”书”,”画”],                  “andTags”:[“深圳”,”广东”],                  “orTags”:[“本科生”,”研究生”]          }可以表示为,不会琴、棋、书、画的广东省深圳市的本科生或研究生的所有用户。当然这些标签需要先在平台或者接口创建后再使用。

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况

7.2 更新单个标签组合接口

接口说明

更新一个标签组合的信息

访问方式

URL编码方式协议methodContent-Type
/tagSegment/updateUtf-8httpsPOSTapplication/json
Curl e.g.:   curl -X POST   -H   ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’  -d ‘${your_request_body}’       https://host:port/tagSegment/updateRequest   body e.g.:{            “appId”:10004,           “oldName”:”segment1″,           “newName”:”segment2″,”expression”:   {                    “orTags”: [“shenzhen”],                    “andTags”:     [],                    “notTags”: []    }}Response body   e.g.:http status   200:{    “result”:   0,    “desc”:   “成功”}业务异常:{         “result”: xxx,”desc”:     “xxx”}http status   500:Internet   server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
oldNamestringY旧标签组合名称
newNamestringY新标签组合名称
expressionJSON ObjectN新标签组合表达式:包含三种JSON数组:notTags表示非操作、andTags表示与操作,orTags表示或操作,例如:”tagExpression”:{                 “notTags”:[“琴”,”棋”,”书”,”画”],                  “andTags”:[“深圳”,”广东”],                  “orTags”:[“本科生”,”研究生”]          }可以表示为,不会琴、棋、书、画的广东省深圳市的本科生或研究生的所有用户。当然这些标签需要先在平台或者接口创建后再使用。

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况

8.标签推

8.1标签推接口

接口说明

接入方携带消息内容、标签信息进行通知消息推送。

  标签个数的限制:20个

访问方式

URL编码方式协议methodContent-Type
/message/tagPushUtf-8httpsPOSTapplication/json
Curl e.g.:curl -X POST   -H   ‘authToken:${your_auth_token}’ -H     ‘Content-Type:application/json’  -d ‘${your_request_body}’       https://host:port/message/tagPushRequest   body e.g.:{          “appId”:10004,          “tagExpression”:{                   “notTags”:[“tag1″,”       tag2″,”tag3″,” tag4″],                  “andTags”:[“tag5″,”   tag6″],                  “orTags”:[“tag7″,”tag8”]          },  “segmentName”:   “组合名”,      “notifyType”: 4,    “title”:   “123”,      “content”: “456”,      “timeToLive”: 86400,      “skipType”: 1,      “skipContent”:   “assda”,      “networkType”: -1,      “requestId” :       “25509283-3767-4b9e-83fe-b6e55ac6b123”}Response body   e.g.:http status   200:业务成功:{    “result”:   0,    “desc”:   “请求成功”,    “taskId”:     “2199912448”}业务异常:{         “result”: xxx,”desc”:   “xxx不合法”}http status   500:Internet   server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
tagExpressionJSON ObjectY标签表达式。包含三种JSON数组:notTags表示非操作、andTags表示与操作,orTags表示或操作,例如:”tagExpression”:{                 “notTags”:[“琴”,”棋”,”书”,”画”],                  “andTags”:[“深圳”,”广东”],                  “orTags”:[“本科生”,”研究生”]          }可以表示为,不会琴、棋、书、画的广东省深圳市的本科生或研究生的所有用户。当然这些标签需要先在平台或者接口创建后再使用。
segmentNamestringN之前创建好的组合名,如果传递组合名,默认用组合名推送,否则如果传递tagExpression,按照标签表达式推送
notifyTypeintY通知类型 1:无,2:响铃,3:振动,4:响铃和振动
titlestringY通知标题(用于通知栏消息) 最大20个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过40个英文字符)
contentstringY通知内容(用于通知栏消息) 最大50个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过100个英文字符)
timeToLiveintN消息保留时长 单位:秒,取值至少60秒,最长7天。当值为空时,默认一天
skipTypeintY点击跳转类型 1:打开APP首页 2:打开链接 3:自定义 4:打开app内指定页面
skipContentstringN跳转内容 跳转类型为2时,跳转内容最大1000个字符,跳转类型为3或4时,跳转内容最大1024个字符,skipType传3需要在onNotificationMessageClicked回调函数中自己写处理逻辑。pushSDK版本号:480以上,不在支持skipType=3,自定义跳转统一使用skipType=4,详见【vivo推送常见问题汇总】中API接入问题的Q11中的intent uri示例。
networkTypeintN网络方式 -1:不限,1:wifi下发送,不填默认为-1
classificationintN消息类型 0:运营类消息,1:系统类消息。不填默认为0
clientCustomMapJSON ObjectN客户端自定义键值对 自定义key和Value键值对个数不能超过10个,且长度不能超过1024字符, key和Value键值对总长度不能超过1024字符。
requestIdstringY用户请求唯一标识 最大64字符
auditReviewJSON ArrayN第三方审核结果,参见:基于第三方审核结果的消息推送

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况
taskIdstring任务编号

9.消息状态查询

9.1消息状态查询

接口说明

由于目前只返回审计相关信息,单推没有同步返回消息审计状态,其他类型的推送有同步返回。所以可通过调用此接口传递消息id,查询消息的状态。目前有调用频率限制,单个app 1次/s, 建议一批类似的消息体查询一次。

使用:

① 发送消息后查询消息的状态(延时在一分钟内)。

②‘审计通过’或 ‘审计不通过的状态还未入库’,返回 【消息状态未知】,审计不通过状态已入库,返回【消息包含敏感词】

访问方式

URL编码方式协议methodContent-Type
https://api-push.vivo.com.cn/search/msgStatusUtf-8https/httpGETapplication/json
Curl e.g.:   curl -X GET -H   ‘authToken:${your_auth_token}’ -H   ‘Content-Type:application/json’   -d     ‘${your_request_body}’ https://api-push.vivo.com.cn/search/msgStatus?appId=10004&taskIds=taskId1,taskId2Request body e.g.:{    “result”:   0,    “desc”:   “success”,    “data”: [          {                “taskId”: taskId1,                “desc”: “消息包含敏感词”          },          {                ” taskId “: taskId2,                “desc”: “消息状态未知”          }    ]}Response body e.g.:http status 200:http status 500:Internet server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
taskIdsstringY由多个taskId组成的字符串,多个taskId之间用逗号分隔,一次最多查询100个

10.查询失效id

10.1失效id查询

接口说明

由于用户卸载、客户端主动调用turnOffPush()解订阅、设备14天不联网还有一部分历史原因,可能造成推送的id无效。开发者可以根据推送时返回的InvalidUser对失效id做标记或者清除处理,或者单独查询本接口,将无效的id过滤,避免占用推送额度。

使用:

① 传递要查询的id,以及id的类型,后台根据保存的id,返回无效的id。

② 建议在推送低峰期,例如晚上或者凌晨调用,将保存的id一批批查询,避免影响应用的推送性能。勿高频调用。

访问方式

URL编码方式协议methodContent-Type
/invalidUser/checkUtf-8https/httpPOSTapplication/json
Curl e.g.:   curl -X GET -H   ‘authToken:${your_auth_token}’ -H   ‘Content-Type:application/json’   -d     ‘${your_request_body}’ https://api-push.vivo.com.cn/invalidUser/check    Request body e.g.:{      “appId”:10004,      “userType”: 1,      “userIds”: [            “15547801220021000000000”,            “15547801220021000000001”    ]}Response body e.g.:http status 200:{      “invalidUsers”: [            “15547801220021000000000”,            “15547801220021000000001”    ]}http status 500:Internet server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
userIdsstring[]Y用户id数组 ,单次最大100个
userTypeintYuserId的类型1:regId,2:alias

11.消息回收

11.1 消息回收接口

接口说明

此接口用于回收已发送给用户的消息。通过传递推送的消息id和具体的用户id、用户类型进行消息回收,消息回收接口调用量和调用速度会占用推送量级和推送速度。

限制:由我司运营人员配置。

消息撤回功能是平台提供给开发者紧急处理运营事故的工具,切勿日常频繁使用,以免对用户体验不当影响。

对于推送内容、应用行为等存在违规的,平台将按《vivo推送运营规则》进行相应处罚。

访问方式

URL编码方式协议methodContent-Type
/message/recycleUtf-8httpsPOSTapplication/json
Curl e.g.:curl -X POST -H ‘   authToken:${your_auth_token}’ -H ‘Content-Type:application/json’  -d ‘${your_request_body}’   https://host:port/message/recycleRequest body e.g.:{         “appId”:10004,         “taskId”:656079923690082304,         “userIds”:[“15762048080021000000007″,”15762048080021000000008″,”15762048080021000000009”],         “userType”:1}Response body e.g.:http status 200:业务成功:{         “result”:   0,         “desc”:   “请求成功”,”invalidUsers”: [         {            “status”: 1,            “userid”:   “15762048080021000000008”         },         {            “status”: 1,            “userid”:   “15762048080021000000008”         }      ]}业务异常:{         “result”:   xxx,”desc”: “xxx不合法”} http status 500:Internet server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送
taskIdstringY单播或广播返回的taskId
userIdsstring[]YuserId列表。个数大于等于1小于等于100
userTypeintY用户类型。1:regId;2:alias

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况
invalidUsersJSON Array非法用户信息,包括status和userid,userid为接入方传的regid或者alias,status有三种情况:1.userId不存在 2.卸载或者关闭了通知 3.七天不在线

12.应用配置信息查询 

12.1 应用配置信息查询接口

接口说明

此接口用于查询应用配置信息,系统消息总量、运营消息总量、群推消息体总量、配置速度等信息、SDK订阅数。此接口限制了调用频率,请勿频繁调用。

访问方式

URL编码方式协议methodContent-Type
/report/getAppConfigUtf-8httpsGETapplication/json
Curl e.g.:curl -X GET -H ‘authToken:${your_auth_token}’   -H ‘Content-Type:application/json’  -d ‘${your_request_body}’     https://host:port/report/getAppConfig?appId=10004Response body e.g.:http status 200:业务成功:{      “result”: 0,      “desc”: “请求成功”,      “data”: {          “sysMsgCount”: 10000,          “marketMsgCount”: 100000,          “sdkSubCount”: 124,          “speed”: 3000,          “groupMsgBodyCount”: 12000,       “remainSysMsgCount”:1200,       “remainMarketMsgCount”:1300
      }}业务异常:{           “result”:   xxx,”desc”:   “xxx不合法”} http status 500:Internet server error!

接口定义

输入参数:

属性名字类型是否必填Y/N描述
appIdintY用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送

输出参数:

属性名字类型描述
resultint接口调用是否成功的状态码 0成功,非0失败
descstring文字描述接口调用情况
datajson object详细内容

data:

属性名字类型描述
sysMsgCountlong系统消息配置量
marketMsgCountlong运营消息配置量
sdkSubCountlongsdk订阅数
speedlong速度配置
groupMsgBodyCountlong群推消息体配置量
remainSysMsgCountlong剩余可发送系统消息量级
remainMarketMsgCountlong剩余可发送运营消息量级


全局公共返回码详解

resultdesc
0请求成功
10000权限认证失败
10040资源已达上限,稍后重试
10044该接口未开放测试模式
10045应用审核中不可发送正式消息
10050alias和regId 不能都为空
10051暂不支持该消息类型
10054notifyType 不合法
10055title 不能为空
10056title 长度不能超过40个字符
10057content 不能为空
10058content 长度不能超过100个字符
10059timeToLive 不合法
10060skipType 不合法
10061skipType = 2, skipContent 不能为空
10062skipType = 2, skipContent 不能超过1000个字符
10063skipType = 3, skipContent 不能为空
10064skipType = 3, skipContent 不能超过1024个字符
10065networkType 不合法
10066自定义key和Value键值对个数不能超过10个
10067自定义key和value键值对不合法
10068skipType = 4, skipContent 不能为空
10069skipType = 4, skipContent 不能超过1024个字符
10070运营消息发送量总量超出限制
10071超出发送时间允许范围
10072推送速度过快,请稍后再试
10073系统消息发送量总量超出限制。系统消息量级申请,请参见:系统消息量级说明
10082系统消息未开通
10084查询速度过快,请稍后再试
10085title 或 content 不能为纯表情
10093获取鉴权码速度过快
10094鉴权码与请求体对应的appId不一致
10101消息内容审核不通过
10102服务器端未知异常
10103推送内容含敏感信息
10104请发送正式信息,请检查title、content,不要发送测试内容
10105推必安内容审核不通过
10106auditReview参数错误
10110请配置商业化消息发送频率
10111今天已发送商业化消息
10112商业化消息发送超出周次数限制
10150aliases 和 regIds 不能都为空
10151taskId 不能为空
10152taskId 不合法
10153regIds 个数不在指定范围[2-1000]
10154aliases 个数不在指定范围[2-1000]
10155消息不存在或已过期
10200appId 不能为空
10201appKey 不能为空
10202appKey 不合法
10203timestamp 不能为空
10204sign 不能为空
10205appId 不存在
10206sign 不正确
10207timestamp 不合法
10250认证接口超过调用次数限制
10252批量发送创建消息体超出限制
10253批量发送regId或alais超过总量限制
10254全量发送超过次数限制
10301alias 长度不能超过40个字符
10302regId 不合法, regId为无效的regId, regId可能已经失效
10304extra 包含不支持的key
10305extra callback长度不能超过128个字符
10306extra callback.param长度不能超过64个字符
10307alias 不合法
10352requestId 不能为空
10353requestId 长度不能超过64个字符
10354Internet server error
10471taskIds 数量不能超过100个
10472taskIds 格式错误
10473taskIds 为空
10600name参数不合法,只能使用中文、英文字母、阿拉伯数字和下划线命名,且不能以数字开头,且长度不超过50字符
10601标签名字不能为空
10602标签描述不能超过300字符
10603oldName参数不能为空
10604newName参数不能为空
10605oldName参数不合法,只能使用中文、英文字母、阿拉伯数字和下划线命名, 且不能以数字开头,且长度不超过50字符
10606newName参数不合法,只能使用中文、英文字母、阿拉伯数字和下划线命名, 且不能以数字开头,且长度不超过50字符
10607id参数不能为空
10608type参数不能为空
10609ids参数不能为空
10610标签名已经存在
10611标签分类名已经存在
10612标签组合名已经存在
10613group参数不合法,只能使用中文、英文字母、阿拉伯数字和下划线命名, 且不能以数字开头,且长度不超过50字符
10614ids数量不能超过1000
10615tag数量不能超过100
10616type参数不合法
10700userids不能为空
10701userid个数超过限制
10702optionType错误
10703register接口调用超频,稍后再试
10704register调用过快,稍后再试
10705app不支持
10706userType错误
10800registration_tokens个数不在指定范围
10801notification不能为空
10802original_source_name不能为空
10803original_source_name长度非法
10804original_source_ip不能为空
10806click_action非法
10807url长度超过限制
10808intent长度超过限制
10255全量推送接口未开放
10901dyeKey长度不能超过限制
10900dye设置个数超过限制
10811超出限制
10810clientId非法
10809click_action不能为空
10805notification_channel长度超过限制
10617系统msgId生成异常
10500订阅标签超出限制
10501标签长度超出限制
10502标签已经删除完成
10503标签不能为空
10504订阅标签超出限制
10505标签长度超出限制
10506标签已经删除完成
10507标签不能为空
10508标签个数超出限制
10550标签操作类型无效
10551标签列表不能为空
10552标签个数超过限制
10553标签组合名不能为空
10309audienceId不合法,alias长度不超过40

vivo推送使用指南

本文档主要介绍使用vivo推送的方法,以帮助开发者更快速便捷的使用vivo推送。

一、测试推送

1.推送方式

在开放平台创建应用及申请推送服务后,无论应用是否上架,开发者都可以通过API发送测试推送进行调试。

2. 展示内容及各操作详情

① 进入发送推送环节,展示下图应用层面界面,点击首行文字旁图标可进行各栏目条件筛选。

▶应用类别:现支持“移动应用”和“快应用”

▶推送权限:现支持正式权限、受限权限和无权限

正式权限:可在Web界面和API后台发送正式消息,也可在API后台向设置的测试设备发送测试消息进行测试

受限权限:不可在Web界面和API后台发送正式消息,可在API后台向设置的测试设备发送测试消息进行测试

无权限:因违反运营规则被处罚不可发送任何类型的消息

▶审核状态:

审核状态为未通过、审核中,推送权限为受限的应用不能通过vivo推送平台发送正式推送消息,可在API向测试设备发送测试消息

审核状态为已通过、推送权限为正式的应用可通过vivo推送平台发送正式推送消息,也可在API向测试设备发送测试消息

② 推送权限为受限时 ,审核状态为审核中或未通过,“操作”栏目下包含三种操作

▶应用信息:点击后进入应用的详细信息页面

▶测试设备:点击后进入测试设备管理页面

▶删除:删除该应用(无法恢复),快应用不可删除

3. 测试设备

新增测试设备管理页面,在申请推送服务后即可对测试设备进行管理,推送权限为“受限”的应用只能通过API向在Web页面中添加的测试设备发送测试消息。

测试推送仅支持对后台录入的测试设备发送消息,测试设备数量上限为20个,测试消息不受量级和频控限制。

发送测试消息时注意填写pushMode=1。(pushMode字段:0:正式推送;1:测试推送,不填默认为0)

备注:

1.测试推送,只能给web界面录入的测试用户推送;审核中应用,只能用测试推送

2.若未设置pushMode=1进行测试,文案相同时,将被当做重复推送的运营消息被去重

二、新建推送

1.推送方式

在应用及推送服务申请审核通过后,开发者可以通过两种方式:

① 调用API接口单发

② 审核通过后,即可在应用详情列表进行消息推送和管理

2. 展示内容及各操作详情

① 进入发送推送环节,展示下图应用层面界面,点击首行文字旁图标可进行各栏目条件筛选

▶应用类别:现支持“移动应用”和“快应用”

▶推送权限:现只支持正式推送,测试应用推送已关闭

▶审核状态:申请未通过、审核中的应用不能通过vivo推送平台发送推送消息

② “操作”栏目下包含四种操作

▶新建推送:指的是新建该应用的一条消息

▶应用信息:点击后显示该应用的详细信息,如下图所示

正式权限的应用支持“重置secret和恢复上一次secret”按自然日计算每天只可重置一次

▶删除:删除该应用(无法恢复),快应用不可删除

3. 推送消息创建

新建推送界面下,包含消息编辑以及人群目标,其余设置可点击“可选设置”进行设置,并且右侧会在模拟机上显示推送实际效果参考,功能详细说明和注意事项如下:

① 推送页面

② 可选设置

③ 在“推送工具-通知栏消息-新建推送”页面,您填写推送消息的标题、内容(标题和内容均可插入emoji表情)、用户群设置、推送时间、选择时间是否显示等推送内容和高级设置,并且右侧会在模拟机上显示推送实际效果参考。功能详细说明和注意事项如下:

④ 确认推送内容后,点击确认推送发送推送内容

4. AB test分组对比测试推送

在创建AB test栏目中,可将用户分为AB两组,在小范围内进行区别推送(例如相同用户推送不同内容、不同用户推送相同内容)测试,根据数据反馈结果,选择最优推送方案。在填写测试名称、选择测试模式、测试人群、完善内容设置、选择发送形式和填写高级设置后,可点击测试预览向测试设备发送所有的测试组观察效果。

① 测试名称:不会展示给用户,只在消息记录中显示便于分辨各个测试。

② 测试模式:分为对比通知文案和对比用户群体两种。

③ 测试人群:按条件筛选,在进行测试组人群筛选时可选择输入参与用户人数或滑动选择用户比例两种方式之一;按条件筛选支持文件上传功能,最大10M,无需压缩 ,TXT格式。

④ 发送形式:分为自动发送和手动发送两种。

⑤ “文案选择指标”和“判定文案时间”:在自动发送时,选择判定最优文案(人群)的指标和判别时间。文案选择指标为“到达率”“展示率”“点击率”(默认点击率)。三者单选,判定文案时间设置下拉栏,内容为1h/5/10/15/20h。

三、消息记录

创建消息提交后,将进入“消息记录”列表。

1. 通知栏消息消息记录

① 消息记录列表中可通过关键字、ID 、推送时间、创建方式(包含开放平台和API调用)和推送状态来搜索定位推送消息。其中审核中是因超过一定量级的消息需要进行人工审核,目前审核量级为10w以上,同时消息已停止是因终止发送,详情请见“终止发送”功能详解。

② 消息记录信息栏目下,包含“浏览栏”与“操作栏”。

浏览栏包含:消息ID、标题、内容、推送时间、推送状态及发送量、到达量、展示量和点击量的数据展示;

操作栏包含:详情、实时统计、终止发送、消息撤回。

▶详情:点击详情展示创建推送消息时填写的内容。

▶实时统计:点击“实时统计”进入消息统计页面, 可以看到该消息的基本信息和查看不同维度的统计趋势,包含推送基本信息、推送内容、推送下发进度、设置、整体数据、推送转化分析、推送时效分析、数据详情。

▶终止发送: 当任务处于「发送中」时,您可以点击「终止发送」来终止推送。但已经收到推送的用户无法进行终止,点击终止发送弹出提示框进行提示。

▶消息撤回:平台与API均支持消息撤回功能。且Web端消息记录不展示API创建的群推消息,则此类消息在web端将无法进行撤回。

① 通知栏消息与AB test消息均具备此功能,此功能是指消息下发到达到客户端并展示未点击可将消息进行回收,用于消息发生重大事故时使用,对已下发并到达客户端的消息进行撤回,消息撤回后将变为 “已撤回”状态;

② 单个应用每天(0:00-24:00)仅可操作一次,且在48小时内支持消息回收(API无时间限制);

③ 消息撤回不会返还已消耗的额度,请谨慎操作!

在使用此功能时请注意,消息撤回功能是平台提供给开发者紧急处理运营事故的工具,切勿日常频繁使用,以免对用户体验不当影响。对于推送内容、应用行为等存在违规的,平台将按《vivo推送运营规则》进行相应处罚。

2. AB test消息记录

① 新增AB test消息选择框体,展示AB test消息记录,消息记录列表中可通过关键字、推送时间检索。

② 消息记录分为两个框体:对比通知文案和对比用户群体,点击不同按钮会显示不同的消息记录。

2.1 对比通知文案和对比用户群体

对比通知文案消息记录,内包括测试名称、推送时间(AB test开始发送的时间)、推送状态、发送模式、测试人群、标题、内容、到达数|率、展示数|率、点击数|率、操作;对比用户群体同理。在对比通知文案和对比用户群体测试中,分条数显示各测试组数据,并将正式组数据加在对应测试组上,用底色标注正式组发送的是哪条测试组的内容

Ø根据测试组数量增加标题、内容、到达量/率、展示量/率、点击量/率的行数

2.2 操作栏

共计有四个选项:详情、实时统计、终止发送、手动发送,根据不同的推送状态出现不同的选项。

Ø手动发送:手动发送中,在AB test测试组后台判断发送完成后,才会出现,点击手动发送后显示可选文案如图:

Ø 详情页:点击详情按钮,弹出详情消息框。如图所示

Ø 实时统计:推送文案+基本信息+ 推送下发进度+整体数据+推送转化分析+推送折损漏斗+推送时效分析+数据详情

ü 推送文案:推送文案中包含标题、内容、跳转方式、跳转内容、测试人群、用户比例或用户数量

ü 基本信息:基本信息中包含应用名称、推送时间、测试模式、发送形式、文案选择指标+判定文案时间、键值对、联网方式、时间显示、提示音、消息有效期及推送下发进度。

ü 整体数据如图所示,分为各个测试组及正式组显示,更加详尽的展示各组数据,点击右上角不同组可显示不同组数据(包含正式组)。

ü 推送转化分析:柱状图形式,同时展示各测试组及正式组的推送转化情况,正式组叠加在所选测试组的数据上。

ü 推送折损漏斗:推送折损漏斗显示因什么原因折损的消息,叠加柱状图显示

ü 推送时效分析:推送时效分析同上上方展示各测试组可选,并且右上角可选发送量,到达量、展示量、点击量。最右上角显示1小时和24小时,如图:可分别点选某个数据来看各个测试组和正式组的数据对比

ü 数据详情:可分别观察各个测试组和正式组的实时数据详情。

Ø 终止发送:点击终止发送按钮,实时统计数据截止到终止发送为止

四、推送数据

在“推送统计-推送数据”可查看该应用下数据统计总览以及详细数据列表。上表中可查询“全部统计”和“单推统计”

1. 全部统计

实时数据(包含当日消息总量、用户订阅数、运营消息总量、系统消息总量)、实时数据趋势图、数据趋势、折损统计分析、数据详情展示。

如有疑问可移至气泡弹窗或进入文档中心,内有各个名词的详细解释。《名词/指标解释》

2. 单推统计

① “全部统计”较“单推统计”在实时数据中增加当日消息总量、用户订阅数、运营消息总量和系统消息总量数据统计。

② 可将数据详情以表格形式导出

五、标签管理

1. “创建标签”及“添加用户”

第一步:“标签管理”创建好标签; 第二步:在对应的标签里 “添加用户”

注:API添加的用户在push开放平台不可见用户详情,只显示用户数

2. 标签分类

① 点击“创建分类”输入名称,描述,选择“是否互斥关系”标签组内设置为互斥时,组内标签之间为互斥关系,即一个用户最多只能有该组内一个标签。设置确定后,将不可以更改互斥关系,请谨慎操作。

② 创建好分类后,在对应的分类里“添加标签”

③ 当单个标签不满足业务场景推送时,可以在“标签组合里”对标签进行“并交差”组合

▶点击“创建组合”输入名称

▶勾选多标签组合,在对应的并交差集里添加标签并保存

六、在线诊断

推送后台提供一站式服务能力,从消息推送到消息数据分析的呈现来排查推送中出现的问题。

点击“在线诊断”功能模块,可进行自助查询设备与消息的送达、在线情况,包括

l  设备是否收到指定消息:可以根据“regid”、“alias”+消息id,查询消息是否送达

l  设备最近是否在线:可以根据“regid”、“alias”,查询设备是否在线。

查询结果覆盖以下场景:

诊断结果详细说明
消息被管控提示单设备单应用每日有5条运营消息频控,系统消息不受限制请参考推送消息分类说明:推送消息分类说明
被拉起activity未找到配置的跳转参数不正确,请检查skipcontent参数的配置参考客户端SDK集成指南第四点的打开自定义页面进行配置参数
用户不存在提示检查输入的regid是否正确
用户解订阅提示用户没有订阅push,检查调用turnOnPush是否成功
未查到结果提示只能查询最近两天的消息,超过两天查询不到消息日志更新可能有延迟,请稍后再查
内容审核拦截提示消息内容审核不通过
消息被覆盖提示离线的运营消息被新的运营消息覆盖
用户未联网提示用户没有连接网络
消息已送达并展示提示消息已经到达设备并且展示在通知栏
消息已送达未展示提示消息已经到达设备,但是没有展示在通知栏,一般提示里面都会带上未展示原因,可以根据原因进行排查
消息id格式错误提示查看输入的消息ID是否有误,消息ID是一串纯数字,对应服务器接口回调的taskid
设备在线不在线提示设备不在线,查一下设备的联网状态
90天不在线提示用户长时间没有联网

结果示例:

七、顶部导航栏

1. 消息中心

点击顶部导航栏“消息中心”进入消息中心页面,查看平台消息通知及重要公告。

2. 联系信息

点击顶部导航栏“下拉箭头-联系信息”进入联系信息管理页

3. 文档中心

点击顶部导航栏“文档中心”,进入文档中心页面,页面首页为“push推送—vivo推送产品说明”

4. 平台首页

点击顶部导航栏“推送运营平台”可回到推送运营平台首页

八、联系我们

客服咨询:开放平台首页-客服咨询

邮箱:push@vivo.com

参考文档:

《名词/指标解释》

《服务端API接口文档》

《客户端API接口文档》

《FAQ》

《vivo推送平台服务协议》

VIVI消息推送OriginOS通知渠道 (Channel)规范

1.1  什么是通知渠道?

通知渠道 (Channel) 是 Android O 引入的新功能,旨在解决以下问题:

  • 应用的通知越来越多,给用户造成明显打扰。
  • 在用户有屏蔽应用的部分通知需求时,只能全局屏蔽这个应用的全部通知,不能屏蔽部分,然后留下对自己有用的。

从 Android8.0(API ≥ 26)开始,Android要求开发者必须为所有的通知分配渠道,不同类的消息走不同的渠道发送。用户可关闭单个渠道的消息通知,不会影响其它渠道的消息推送。以原子笔记(v1.0.3.02) 为例,通知分成了5种渠道,1个渠道分组(Channel Group),如下图:

  • 渠道:实际的通知类别,原子笔记分成了5类通知。
  • 渠道分组:一组渠道,仅用于做分组区分,没有更多的逻辑。
  • 每个通知渠道的权限互相独立,互不影响。例如,原子笔记的“录音”类通知为关闭,“提醒”类通知为优先显示。

1.2  如何适配通知渠道?

1. 在产品发布之前,需由产品和运营提前规划好该应用的通知渠道,如“订单通知”、“评论回复提醒”、“新资讯提醒”等,不同类别的消息走不同渠道发送。规划好的渠道不应该在不同版本频繁变更,以免用户设置发生变化。

2. 合理控制渠道数量,建议在2~7个之间;根据需要可以使用渠道分组来对渠道进行分组归类,方便用户区分识别;避免使用1个渠道发送多种类型的通知。

3. 渠道名称是对用户可见的,因此需要使用方便用户理解的文本,因此,渠道命名应符合通知内容特征,例如,发送快递接收信息的专用渠道,命名为“快递信息”,便于用户理解,同时避免名字重复。

4. 渠道名称需要做多语言适配(默认直接显示名称,如果要跟随系统语言的变化而变化,要提翻译),手机重启后才会切换其他语言。

1.3  通知渠道的优先级如何定义

渠道的优先级会影响通知的悬浮、响铃和振动。为了平衡业务发展的需求和通知栏的整体体验,通知栏对渠道优先级的定义做出如下规范:

优先级铃声振动在通知栏显示悬浮显示锁屏显示使用原则
max(以下简称“5”)允许允许允许允许允许(上线中)(用户设置不了)关系到用户生命和财产安全、需要用户立即作出反应否则会造成设备不可用或个人生命/财产受到威胁的通知,如台风预警、暴雨预告、流量预警等,通知栏会视应用使用情况决定是否收紧该能力
high(以下简称“4”)允许允许允许允许允许(上线中)用户短时间内必须了解或采取行动的通知,如信息、电话、账户变动等
default(以下简称“3”)允许允许允许用户在方便时需要尽早查看的通知,如好友申请等;
low(以下简称“2”)允许跟用户相关但可以等待的,或无需用户处理的通知,如关注的作者更新、有更新的内容等;
min(以下简称“1”)允许与用户完全无关的非必要信息,如促销内容、活动信息等;

具体到业务场景,本规范根据消息的类型,给出了每种消息优先级的可设置范围,不在以下范围内的,由各项目组与通知规范小组共同决策:

分类优先级上限类别举例
系统消息系统通知验证码4验证码信息
软件更新3APP版本更新提示信息
邮件3邮件的发送、接收状态信息
短信4短信,彩信等信息
语音通话4语音通话相关的信息
软件状态5与应用的运行、性能、权限、流量等通知信息
常驻信息4音乐类、工具类、天气类等常驻通知栏信息
用户订阅社交动态2用户之间的社交互动提醒,如:被赞、被@、评论、留言、关注、转发
非社交动态2非社交属性的且与用户相关的实时信息更新
订阅4用户主动订阅关注的内容更新提醒,如:你关注的xxxx更新
日程4用户设置的行程通知,提醒
物流4物流节点信息,包括收发货,派送,签收,取件通知等
订单4生成订单相关信息  如:下单成功  卖家收到新订单 订单详情
特殊关注4基于普通的动态、订阅消息之上的特别关注内容
待办4用户在app内设置的提醒信息
财务4包括收付款,红包,涉及金额、账单、交易等信息
出行4用户使用相关app时的导航、路线相关提醒
营销消息新闻资讯阅读推荐2非用户主动订阅,APP向用户推送的文字内容。如:微博、资讯、新闻、点评、小说、公告
音频推荐2非用户主动订阅,APP向用户推送的视频、音频、直播、
陌生人推荐2大V、主播、异性、可能认识的人等
理财2金融理财产品推荐,如:投资、贷款、股票、基金、贵金属。
天气2天气相关的推送
产品推荐广告促销2商品推广、宣传,或者折扣、红包、领劵优惠信息
产品推荐2所有商品、商家、店铺推荐
活动推送运营活动2各类APP内的活动、小游戏提醒,如:抽奖、积分、签到、任务、分享、偷菜、领金币、限时折扣、红包、返现、优惠卷
邀请2APP基于自身产品功能对用户发起的各类邀请,如:邀请用户点评、答题、发布视频、撰文等
IM消息即时聊天信息即时消息4用户与用户或商家进行交流时产生的文字推送
消息提醒4不展示具体消息内容的IM消息提醒,如:你收到一条新消息(伪装成消息提醒的内容推荐类不算)
其他消息/不在以上分类的,由各业务方与SQA共同决策

“社交动态”类需满足“交互要求”:1. 弹窗说明将收到该类别的PUSH通知。2. 用户可选择“同意”或“取消”,用户同意后可加入“系统消息”分类。

“订阅更新”类需满足“交互要求”:1. 弹窗说明将收到该类别的PUSH通知。2. 告知用户关闭通知的完整路径,可加入“系统消息”分类。

FAQ

1、一定要适配通知渠道吗?

取决于你的应用的API:

  • API ≥ 26(Android 8.0):必须适配,而且必须给每条通知指定一个渠道,否则无法发出通知
  • API ≤ 25(Android 7.1):可以不适配。在8.0及以上的设备,通知也能正常发出

2、一定要有渠道分组吗?

不是必须的。没必要强行设置渠道分组,应该视自己的业务需求而定。

3、我的通知是通过Vpush发的,我也能自己设置渠道吗?

目前,Vpush只有固定的渠道,不支持应用自定义Vpush渠道哦~

4、适配渠道后,在 Android 8.0 以前的设备会怎么表现

Android 8.0 以前的设备,会完全无视这个功能,因此不会带来任何兼容性问题。

影视作品移动应用制作该如何做

在享受电影作品的过程中,我们能够让自己的心情得到放松或者是拓展自己的视野范围以及体会到别具一番风味的视觉体验,这么为了让用户能够更多的体会影视作品的快乐,影视作品移动应用制作也应运而生。

一、影视作品移动应用制作具有什麽意义?
影视作品在用户的心目中的地位正在不断提高,是因为这些作品不论是从质量上看来,还是从内容上看,都是很符合大众的一些形式体现,其类型的多样性让不同的用户能够找到自己喜欢的影视作品内并进行观看。并且,现在移动浏览模式正在影响着大众的观看行为习惯,伴随着影视作品移动应用制作的火热趋势,大众能够通过线上的官方来获取关于影视作品方面的相关服务,具有更高的便捷性。
2、影视作品移动应用制作该如何做?
1、影视作品资讯推送
影视作品移动应用制作可以对市面上相关的资讯内容进行管理归纳,而且还能够通过移动端设备展示给用户进行预览查看,这些资讯能够起到吸引用户的作用,让用户查看到近期电影的预告片或者是影评介绍等等。
二、影视作品细分化功能
现在的影视作品种类的多样化我们是知道的,不过对于服务用户方面,实现作品的细分化一样是比较关键的,影视作品移动应用制作可以针对不同影视作品的寓意以及大致的内容走向等等进行划分,方便用户找到自己喜欢的电影种类,例如喜剧电影、科幻电影、言情电影等等。
三、在线观看模式
多种影视作品的观看模式供用户开放选用,这即是提升用户观影体验的一个方案,也是提升用户粘性的方法。
四、线上购票渠道
影视作品移动应用制作能够为大众提供一个线上购票的渠道,包括了解当前不同电影院的电影票价,并实目前移动端设备上的购买渠道。

以上便是影视作品移动应用制作的相关信息内容介绍,假设有系统制作、移动应用制作或者是小程序制作需求,欢迎咨询我们。

VIVO开放平台获取VIVO AppSecret

在做VIVO消息推送时刻,需要和到VIVO开放平台获取VIVO AppSecret,之后我们才能为APP实现VIVO厂家离线推送消息的能力。

首先,登录VIVO开放平台http://dev.vivo.com.cn/

VIVO开放平台获取VIVO AppSecret

点击登录,之后进入管理中心

VIVO开放平台获取VIVO AppSecret

在VIVO管理中心里面找到 开放能力

之后在开放能力 下方 找到消息推送

点击进入 消息推送运营中心

VIVO开放平台获取VIVO AppSecret

在运营中心后台,找到自己需要配置的应用名称,点击右侧的应用信息

VIVO开放平台获取VIVO AppSecret

如图,在应用信息详情页面,我们可以看到AppSecret,我们直接复制,这样就拿到了VIVO的AppSecret了。

vivo开放平台获取VIVO消息推送AppKey

开发者在做VIVO消息推送时候需要输入AppID、AppKey和AppSecret,VIVO那边也会对APP发起的推送请求进行验证,如果接口信息不对,是无法完成vivo消息推送的离线到达能力的。

那么怎么获取VIVO的APPKEY呢

首先登录VIVO开放平台http://dev.vivo.com.cn/

VIVO消息推送AppKey

登录后进入管理中心

VIVO消息推送AppKey

如图,点击开放能力,的消息推送,进入消息推送管理后台

VIVO消息推送AppKey

进入消息推送运营平台之后,在应用列表里面找到自己需要获取APPKEY的应用名称

点击右侧的应用信息进入

VIVO消息推送AppKey

进入应用信息之后,我们就可以在页面上看到VIVO应用APPKEY

可以直接进行复制,这样就获取到的VIVO开放平台应用的VIVOAPPKEY

VIVO厂家离线消息推送申请通知接口

VIVO作为世界级的手机品牌,实现VIVO手机离线消息通知是当前APP开发者所必须考虑的一个基础功能或能力,开发者在做好APP之后需要向VIVO厂家申请到APP消息推送权限。

那么怎么申请VIVO消息推送呢?

1.登录VIVO开发平台,http://dev.vivo.com.cn/home

(图:VIVO厂家离线消息推送)

2.点击顶部导航开放能力

(图:VIVO厂家离线消息推送)

3.进入消息推送管理后台,点击第一个推送申请接入

(图:VIVO厂家离线消息推送)

点击推送申请接入按钮之后,页面会自动跳转到应用创建页面流程

(图:VIVO厂家离线消息推送)

如图,在申请页面选择需要申请通知消息推送的应用,可以在应用名称这里下拉选择。

当然,如果您还没有创建应用,您需要先去VIVO开放平台新建应用,提交审核之后,在消息推送列表,可以看到消息推送权限的状态

(图:VIVO厂家离线消息推送)

如果状态为【已通过】那么您的APP就正式获得到了VIVO厂家离线推送的权限了,就可以实现VIVO手机离线状态下依旧可以收到消息通知的能力。

如果是状态为【审核中】您的APP可以获得测试阶段的消息推送能力

(图:VIVO厂家离线消息推送)

应用上架后审核状态自动跳转为“已通过”,此时推送权限为“受限”可进行API接口测试。