VIVO离线消息推送厂商应用开通指南
VIVO
1. 创建 VIVO 应用
- 首先,先创建 VIVO 应用,见 Vivo 推送平台开启指南。
- 查看应用信息,获取 VIVO APP ID、VIVO APP keyy、VIVO APP secret
2. 应用配置
- 在个推开发者中心中填写相关厂商信息:
VIVO离线消息推送厂商应用开通指南
如何低价格的开发一款自己的APP?选用一门APP在线开发工具
相信每一种企业都想制作一种专属的移动应用以应对高速发展的移动互联网,不过移动应用制作费高价格是不少企业都要面对的,当然土豪除外,这么影响移动应用制作价格的因素有哪些呢?
首先个肯定是App制作需求(模型与专业定制);第2个便是app制作功能需求(轻松与复杂程度);第3个是App制作人工成本(团队经验与素质),这3点直接影响到我们移动应用制作的成本,这么我们一起来细细分析一下。
一、选用适合自己的产品制作模式,这里要说一下是因为制作模式直接关系到成本问题,模型相对便宜不过功能固定化而定制贵h5app不过能够完全按照自己的需求来做。
假设我们只是想做一种轻松的移动应用的话完全能够用模型来开发。
反之我们需要依据自己的需求来开发APP的话,我们最好选用定制制作移动应用,成本自然会偏高,不过最终的效果是要好过模型移动应用的。
2、对产品制作模式的误解也是控制成本的因素:相信想花最少的钱来完成项目是每个人或者企业希望的事情,移动应用制作也是同样的,有的公司希望用模型化制作的成本,满足定制化制作的需求,在节约成本这块本身没有错,不过也要依据需求来评审,自己是否适合模型化制作移动应用,自己的一些需求模型能否实现等等。
模型移动应用制作企业在选用上一定要结合自身企业的状况,不要贪便宜。
是因为模型移动应用的好多功能与产品逻辑都是固定的,很难在更改,我们只能做一些轻松的调整,因此想要依据公司的需求来确认制作的模式。
3、移动应用定制制作模式,可以依据企业的需求进行深层次定制,比如一门APP的移动应用制作定制服务的优点:从需求梳理开始,定制服务涵盖需求预评审、产品原型设计、UIUX设计、移动应用端制作、后端制作、接口联调、测试验收等完整设计和制作服务,直至你的移动应用最终在各大应用市场上架,能够说我们不用做任意事情;
假设是不懂设计和制作,只有一种想法就想开发APP的,意见还是和一门APP定制官方的专业需求顾问沟通下诉说安卓简易app自己的需求,帮忙助力梳理需求、输出评审方式,把想法落地执行。
4、团队的选用,这也是制作成本关键一环也是成本高低的决定因素。
自己组建制作团队是能够,不过假设经验不足的话产品做不好不说还会浪费大量的时间和金钱;假设找移动应用制作公司又要面临什麽样的公司才是适合自己的vue打包成app,找不到适合自己的又会浪费时间。
不管如何说自己组建团队成本是高于找移动应用制作公司的,小明觉得假设想验证自己的商业模式是否可行还是找专业的移动应用制作公司比较靠谱,时间快成本低快速验证商业模式是否可行。
综
上所述移动应用制作如何经济实惠?相信大家也有一种初步的认识了,这么就想要我们依据自己企业情况来进行选用和控制成本了。
如何低价格的开发一款自己的APP?选用一门APP在线开发工具
更多app信息请关注www.yimenapp.com
点击此处下载 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版本时类的路径错误,重新导入类的路径即可。
将解压后的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")
}
vivo Push集成只需要配置网络权限,请在当前工程AndroidManifest.xml中的manifest节点下添加以下代码:
<!—Vivo Push需要的权限--> <uses-permission android:name="android.permission.INTERNET"/>
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"/>
在当前工程中新建一个类 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>
接入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"/>
通过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代表成功 } });
即获取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。
在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型键值对参数值。
注意:原有通过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); } } }
开发者通过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.配置信息’ 两个步骤再开始统一推送联盟的接入。
这里只是做了相应的初始化操作,建议用户在自己应用的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, "初始化失败"); } } });
注册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文档
点击此处下载PUSH-JAVA-SDK 文档
版本:2.3
升级内容:
1. 新增推必安审核参数auditReview。
2. 取消regId23位校验限制。
点击此处下载push-python3-SDK 文档
版本:2.2
该SDK使用Java编写,接入前请确认是否安装Java环境,并在Java环境下运行。
开发者需要注册登录开发平台网站获取应用的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 | 消息体参数错误类型 |
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(String appSecret),(鉴权时使用)appSecret是在开发者网站上注册时生成的。
sender.setAuthToken(String authToken);,(推送时使用)除鉴权方法外,推送前都需要设置authToken,authToken是在调用鉴权方法后获得。
Sender.initPool(int connection, int route) 设定连接池最大连接数为“connection”,路由最大连接数为“route”,不设定该项则使用默认参数:最大连接数 10,路由最大连接数 5
com.vivo.push.sdk.server.Result
要进行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 } |
接入方携带消息内容以及用户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 } |
同一条信息覆盖多个用户。此方法需与批量推送用户方法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 } |
批量发送给用户。该方法与保存群推消息方法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非测试用户 } |
向所有设备推送某条消息。
使用场景:活动、系统升级提醒等。
接口说明:
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 } |
接入方携带消息内容、标签信息进行通知消息推送。根据标签把消息推送给指定用户
接口说明:
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 } |
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; } |
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; } |
获取批量推送或全量推送返回的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对应的统计数据 } |
为应用方增加标签,用于后续标签推送。
接口说明:
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();//获取服务器返回的调用情况文字描述} |
更新一个标签的信息,更新标签名字、描述、所属分类。
接口说明:
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();//获取服务器返回的调用情况文字描述} |
给标签添加用户设备信息,单次不超过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天未联网} |
移除标签中的用户设备信息,单次不超过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天未联网} |
为应用方增加标签分类,用于后续标签分类管理。
接口说明:
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();//获取服务器返回的调用情况文字描述} |
更新一个标签分类的信息,包括标签分类名称和描述。
接口说明:
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();//获取服务器返回的调用情况文字描述} |
把标签添加进标签分类里面,一次可添加一个或者多个标签,最多不超过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();//获取服务器返回的调用情况文字描述} |
为应用方增加标签组合。 一个标签组合由多个标签组成。
接口说明:
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();//获取服务器返回的调用情况文字描述} |
更新一个标签组合的信息。
接口说明:
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();//获取服务器返回的调用情况文字描述} |
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接口文档
当前版本:2.9.2
修改记录:
(1)/message/auth接口,鉴权码生成方式优化,增加调用频率为10次/s,取消每天10000次数量限制;
(2)各接口请求体,新增appId,用于跟鉴权信息进行比对,确认是否为应用信息一致,不一致返回错误码10094
如果调用接口出现超量限制的返回码,请不要在当天高频次调用服务器相应接口,否则将调低推送量级;
出现“10070:发送总量超出限制”。当天不要调用/message/send 单推接口;
出现“10252:批量发送消息体超出限制”。当天不要调用/message/saveListPayload 保存群推消息公共体接口;
出现“10070:发送总量超出限制”。当天不要调用/message/saveListPayload 保存群推消息公共体接口,以及/message/pushToList 批量推送用户接口;
出现“10254:全量发送超过次数限”。当天不要调用/message/all 全量发送接口;
关于推送量的说明可以参考【vivo推送常见问题汇总】
HTTP Header中(推送鉴权接口除外)。
属性名字 | 类型 | 是否必填Y/N | 描述 |
authToken | string | Y | 当鉴权成功时会返回该字段,推送消息时需要提供authToken,有效期默认为1天,过期后无法使用 |
属性名字 | 类型 | 是否必填Y/N | 描述 |
callback | string | Y | 第三方接收回执的http接口,最大长度128个字符 |
callback.param | string | N | 第三方自定义回执参数,最大长度64个字符 |
接口说明
要想调用PUSH接口,任何接入方都要有个鉴权操作。其他接口header中必须携带该参数。
接口返回的参数authToken,一个appId可对应多个token,24小时过期,业务方做中心缓存,1-2小时更新一次。
限制:频率限制,单个app 10次/s。超频返回错误码10094。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/message/auth | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId |
appKey | string | Y | 用户申请推送业务时获得的appKey |
timestamp | long | Y | Unix时间戳 做签名用,单位:毫秒,且在vivo服务器当前utc时间戳前后十分钟区间内。 |
sign | string | Y | 签名 使用MD5算法,字符串trim后拼接(appId+appKey+timestamp+appSecret),然后通过MD5加密得到的值(字母小写) |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
authToken | string | 当鉴权成功时才会有该字段,推送消息时,需要提供authToken,有效期默认为1天,过期后无法使用。一个appId可对应多个token,24小时过期,业务方做中心缓存,1-2小时更新一次。 |
接口说明
接入方携带消息内容以及用户regId(或alias)进行通知消息推送。针对每个用户发送不同的通知。
使用场景:如物流、订单状态、游戏预约状态、行程状态、聊天(如微信、评论)等。
限制:根据客户端SDK订阅数自动配置,可发送的用户总量可以在开发者后台查看。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/message/send | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
regId | string | N | 应用订阅PUSH服务器得到的id 长度23个字符(regId,alias 两者需一个不为空,当两个不为空时,取regId) |
alias | string | N | 别名 长度不超过40字符(regId,alias两者需一个不为空,当两个不为空时,取regId) |
notifyType | int | Y | 通知类型 1:无,2:响铃,3:振动,4:响铃和振动 |
title | string | Y | 通知标题(用于通知栏消息) 最大20个汉字(一个汉字等于两个英文字符,即最大不超过40个英文字符) |
content | string | Y | 通知内容(用于通知栏消息) 最大50个汉字(一个汉字等于两个英文字符,即最大不超过100个英文字符) |
timeToLive | int | N | 消息保留时长 单位:秒,取值至少60秒,最长7天。当值为空时,默认一天 |
skipType | int | Y | 点击跳转类型 1:打开APP首页 2:打开链接 3:自定义 4:打开app内指定页面 |
skipContent | string | N | 跳转内容 跳转类型为2时,跳转内容最大1000个字符,跳转类型为3或4时,跳转内容最大1024个字符,skipType传3需要在onNotificationMessageClicked回调函数中自己写处理逻辑。关于skipContent的内容可以参考【vivo推送常见问题汇总】 |
networkType | int | N | 网络方式 -1:不限,1:wifi下发送,不填默认为-1 |
classification | int | N | 消息类型 0:运营类消息,1:系统类消息。不填默认为0 |
clientCustomMap | JSON Object | N | 客户端自定义键值对 自定义key和Value键值对个数不能超过10个,且长度不能超过1024字符, key和Value键值对总长度不能超过1024字符。app可以按照客户端SDK接入文档获取该键值对 |
extra | JSON Object | N | 高级特性(详见目录:一.公共——5.高级特性 extra) |
requestId | string | Y | 用户请求唯一标识 最大64字符 |
pushMode | int | N | 推送模式 0:正式推送;1:测试推送,不填默认为0(测试推送,只能给web界面录入的测试用户推送;审核中应用,只能用测试推送) |
auditReview | JSON Array | N | 第三方审核结果,参见:基于第三方审核结果的消息推送 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
taskId | string | 任务编号 |
invalidUser | JSON Object | 非法用户信息,包括status和userid,userid为接入方传的regid或者alias,status有三种情况:1.userId不存在;2.卸载或者关闭了通知;3.七天不在线;4.非测试用户 |
接口说明
同一条信息覆盖多个用户。此接口需与批量推送用户接口3.2配套使用,批量推送接口用此接口生成taskId批量发送用户。
使用场景:活动、系统升级提醒等。
限制:默认根据客户端SDK订阅数自动配置。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/message/saveListPayload | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
notifyType | int | Y | 通知类型 1:无,2:响铃,3:振动,4:响铃和振动 |
title | string | Y | 通知标题(用于通知栏消息) 最大20个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过40个英文字符) |
content | string | Y | 通知内容(用于通知栏消息) 最大50个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过100个英文字符) |
timeToLive | int | N | 消息保留时长 单位:秒,取值至少900秒,最长7天。当值为空时,默认一天。 |
skipType | int | Y | 点击跳转类型 1:打开APP首页 2:打开链接 3:自定义 4:打开app内指定页面 |
skipContent | string | N | 跳转内容 跳转类型为2时,跳转内容最大1000个字符,跳转类型为3或4时,跳转内容最大1024个字符,skipType传3需要在onNotificationMessageClicked回调函数中自己写处理逻辑。关于skipContent的内容可以参考【vivo推送常见问题汇总】 pushSDK版本号:480以上,不在支持skipType=3,自定义跳转统一使用skipType=4,详见【vivo推送常见问题汇总】中API接入问题的Q11中的intent uri示例。 |
networkType | int | N | 网络方式 -1:不限,1:wifi下发送,不填默认为-1 |
classification | int | N | 消息类型 0:运营类消息,1:系统类消息。不填默认为0 |
clientCustomMap | JSON Object | N | 客户端自定义键值对 自定义key和Value键值对个数不能超过10个,且长度不能超过1024字符, key和Value键值对总长度不能超过1024字符。app可以按照客户端SDK接入文档获取该键值对。 |
requestId | string | Y | 用户请求唯一标识 最大64字符 |
auditReview | JSON Array | N | 第三方审核结果,参见:基于第三方审核结果的消息推送 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
taskId | string | 任务编号 |
接口说明
批量发送用户。此接口与群推消息接口3.1配套使用,首先通过群推消息接口3.1返回taskId,然后此接口带上taskId批量发送用户,可以根据regIds或者aliases分批调用。每次调用时,regIds或者aliases的个数必须大于等于2,小于等于1000。
限制:根据客户端SDK订阅数自动配置,可发送的用户总量可以在开发者后台查看。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/message/pushToList | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
regIds | string[] | N | regId列表 个数大于等于2,小于等于1000(regIds,aliases 两者需一个不为空,两个不为空,取regIds) |
aliases | string[] | N | 别名列表个数大于等于2,小于等于1000,长度不超过40字符(regIds,aliases 两者需一个不为空,两个不为空,取regIds) |
taskId | string | Y | 公共消息任务号,取saveListPayload返回的taskId |
requestId | string | Y | 请求唯一标识,最大64字符 |
pushMode | int | N | 推送模式 0:正式推送;1:测试推送,不填默认为0(测试推送,只能给web界面录入的测试用户推送;审核中应用,只能用测试推送) |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
invalidUser | JSON Object | 非法用户信息,包括status和userid,userid为接入方传的regid或者alias,status有三种情况:1.userId不存在;2.卸载或者关闭了通知;3.七天不在线;4.非测试用户 |
接口说明
向所有设备推送某条消息。
使用场景:活动、系统升级提醒等。
限制:默认是每个app每日可发送一条。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/message/all | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
notifyType | int | Y | 通知类型 1:无,2:响铃,3:振动,4:响铃和振动 |
title | string | Y | 通知标题(用于通知栏消息) 最大20个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过40个英文字符) |
content | string | Y | 通知内容(用于通知栏消息) 最大50个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过100个英文字符) |
timeToLive | int | N | 消息保留时长 单位:秒,取值至少900秒,最长7天。当值为空时,默认一天 |
skipType | int | Y | 点击跳转类型 1:打开APP首页 2:打开链接 3:自定义 4:打开app内指定页面 |
skipContent | string | N | 跳转内容 跳转类型为2时,跳转内容最大1000个字符,跳转类型为3或4时,跳转内容最大1024个字符,skipType传3需要在onNotificationMessageClicked回调函数中自己写处理逻辑。关于skipContent的内容可以参考【vivo推送常见问题汇总】 pushSDK版本号:480以上,不在支持skipType=3,自定义跳转统一使用skipType=4,详见【vivo推送常见问题汇总】中API接入问题的Q11中的intent uri示例。 |
networkType | int | N | 网络方式 -1:不限,1:wifi下发送,不填默认为-1 |
classification | int | N | 消息类型 0:运营类消息,1:系统类消息。不填默认为0 |
clientCustomMap | JSON Object | N | 客户端自定义键值对 自定义key和Value键值对个数不能超过10个,且长度不能超过1024字符, key和Value键值对总长度不能超过1024字符。app可以按照客户端SDK接入文档获取该键值对 |
requestId | string | Y | 用户请求唯一标识 最大64字符 |
auditReview | JSON Array | N | 第三方审核结果,参见:基于第三方审核结果的消息推送 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
taskId | string | 任务编号 |
接口说明
获取taskId对应的统计信息,taskIds最多100个。 注意:查询的消息类型 【群推送消息/列表推消息】
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/report/getStatistics | Utf-8 | https | GET | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
taskIds | string | Y | 查询的任务列表taskIds 用,分隔开 e.g.: “234567,234568” |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
taskId | string | 任务号 |
target | long | 目标总数 |
targetInvalid | long | 不存在的用户总数,根据id找不到任何信息 |
targetUnSub | long | 解订阅的用户总数,用户已卸载或者客户端主动调用turnOffPush()解订阅 |
targetInActive | long | 14天不在网的用户数,手机14天没有联网,信息被后台删除 |
valid | long | 有效目标总数 |
covered | long | 被覆盖的用户消息总数,群推、全推、标签推消息属于营销消息,会被覆盖 |
controlled | long | 被管控的用户消息总数,例如接收的群推消息总数一天超过5条 |
targetOffline | long | 推送后不在线的用户数,截止到当前统计时间为止,没有联网的用户数,呈下降趋势 |
send | long | 下发总数 |
receive | long | 到达总数 |
display | long | 展示总数 |
click | long | 点击总数 |
接口说明
vivo推送服务器将已送达或和对应设备的alias或者regId通过调用第三方设置的回调,http接口传给开发者服务器。仅单播支持回执(每次调用后,推送服务器会清空这些数据。)
使用:
① 发送消息接口设置扩展参数extra(详见目录:一.公共——5.高级特性 extra), 包含callback、callback.param。
② vivo推送服务器调用第三方设置的callback url接口。
③ 字段ackType 【达回执类型】目前只有到达回执ackType=0
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
第三方设置的callback url(详见:高级特性 extra) | Utf-8 | https/http | POST | application/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 | 描述 |
taskId | string | Y | 任务编号 |
param | string | Y | 开发者上传的自定义参数值 |
targets | string | Y | 一批alias或者regId列表,之间是用逗号分割 |
ackTime | long | N | 回执到达时间,毫秒时间戳 |
回执流程
设备在线:
设备不在线:
接口说明
为应用方增加标签,用于后续标签推送。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/tag/add | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
name | string | Y | 标签名称 |
desc | string | N | 标签描述 |
group | string | N | 标签分类名 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
接口说明
更新一个标签的信息,更新标签名字、描述、所属分类。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/tag/update | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
oldName | string | Y | 旧标签名称 |
newName | string | Y | 新标签名称 |
desc | string | N | 更新标签描述 |
group | string | N | 更新标签所属分类 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
接口说明
给标签添加用户设备信息,单次不超过1000个设备。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/tag/addMembers | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
name | string | Y | 标签名字 |
type | int | Y | 用户类型:1是regId ,2是别名 |
ids | JSON Array | Y | 用户id |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
data | JSON Array | userid是非法用户id,status有3种状态:1是用户不存在,2是用户push开关关闭,3是用户14天未联网。 |
接口说明
移除标签中的用户设备信息,单次不超过1000个设备。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/tag/removeMembers | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
name | string | Y | 标签名字 |
type | int | Y | 用户类型:1是regId ,2是别名 |
ids | JSON Array | Y | 用户id |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
data | JSON Array | userid是非法用户id,status有3种状态:1是用户不存在,2是用户push开关关闭,3是用户14天未联网。 |
接口说明
为应用方增加标签分类,用于后续标签分类管理。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/tagGroup/add | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
name | string | Y | 标签分类名称 |
type | int | Y | 标签分类类型:1是普通标签,2是互斥标签 |
desc | string | N | 标签分类描述 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
接口说明
更新一个标签分类的信息,包括标签分类名称和描述。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/tagGroup/update | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
oldName | string | Y | 旧标签分类名称 |
newName | string | Y | 新标签分类名称 |
desc | string | N | 新标签分类的描述 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
接口说明
把标签添加进标签分类里面,一次可添加一个或者多个标签,最多不超过100个。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/tagGroup/addToGroup | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
name | string | Y | 标签分类名称 |
tagList | JSON Array | Y | 一个或多个标签 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
接口说明
为应用方增加标签组合。 一个标签组合由多个标签组成。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/tagSegment/add | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
name | string | Y | 标签组合名称 |
expression | JSON Object | Y | 标签组合表达式:包含三种JSON数组:notTags表示非操作、andTags表示与操作,orTags表示或操作,例如:”tagExpression”:{ “notTags”:[“琴”,”棋”,”书”,”画”], “andTags”:[“深圳”,”广东”], “orTags”:[“本科生”,”研究生”] }可以表示为,不会琴、棋、书、画的广东省深圳市的本科生或研究生的所有用户。当然这些标签需要先在平台或者接口创建后再使用。 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
接口说明
更新一个标签组合的信息
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/tagSegment/update | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
oldName | string | Y | 旧标签组合名称 |
newName | string | Y | 新标签组合名称 |
expression | JSON Object | N | 新标签组合表达式:包含三种JSON数组:notTags表示非操作、andTags表示与操作,orTags表示或操作,例如:”tagExpression”:{ “notTags”:[“琴”,”棋”,”书”,”画”], “andTags”:[“深圳”,”广东”], “orTags”:[“本科生”,”研究生”] }可以表示为,不会琴、棋、书、画的广东省深圳市的本科生或研究生的所有用户。当然这些标签需要先在平台或者接口创建后再使用。 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
接口说明
接入方携带消息内容、标签信息进行通知消息推送。
标签个数的限制:20个
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/message/tagPush | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
tagExpression | JSON Object | Y | 标签表达式。包含三种JSON数组:notTags表示非操作、andTags表示与操作,orTags表示或操作,例如:”tagExpression”:{ “notTags”:[“琴”,”棋”,”书”,”画”], “andTags”:[“深圳”,”广东”], “orTags”:[“本科生”,”研究生”] }可以表示为,不会琴、棋、书、画的广东省深圳市的本科生或研究生的所有用户。当然这些标签需要先在平台或者接口创建后再使用。 |
segmentName | string | N | 之前创建好的组合名,如果传递组合名,默认用组合名推送,否则如果传递tagExpression,按照标签表达式推送 |
notifyType | int | Y | 通知类型 1:无,2:响铃,3:振动,4:响铃和振动 |
title | string | Y | 通知标题(用于通知栏消息) 最大20个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过40个英文字符) |
content | string | Y | 通知内容(用于通知栏消息) 最大50个汉字(一个汉字等于两个英文字符,一个表情占一个字符,即最大不超过100个英文字符) |
timeToLive | int | N | 消息保留时长 单位:秒,取值至少60秒,最长7天。当值为空时,默认一天 |
skipType | int | Y | 点击跳转类型 1:打开APP首页 2:打开链接 3:自定义 4:打开app内指定页面 |
skipContent | string | N | 跳转内容 跳转类型为2时,跳转内容最大1000个字符,跳转类型为3或4时,跳转内容最大1024个字符,skipType传3需要在onNotificationMessageClicked回调函数中自己写处理逻辑。pushSDK版本号:480以上,不在支持skipType=3,自定义跳转统一使用skipType=4,详见【vivo推送常见问题汇总】中API接入问题的Q11中的intent uri示例。 |
networkType | int | N | 网络方式 -1:不限,1:wifi下发送,不填默认为-1 |
classification | int | N | 消息类型 0:运营类消息,1:系统类消息。不填默认为0 |
clientCustomMap | JSON Object | N | 客户端自定义键值对 自定义key和Value键值对个数不能超过10个,且长度不能超过1024字符, key和Value键值对总长度不能超过1024字符。 |
requestId | string | Y | 用户请求唯一标识 最大64字符 |
auditReview | JSON Array | N | 第三方审核结果,参见:基于第三方审核结果的消息推送 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
taskId | string | 任务编号 |
接口说明
由于目前只返回审计相关信息,单推没有同步返回消息审计状态,其他类型的推送有同步返回。所以可通过调用此接口传递消息id,查询消息的状态。目前有调用频率限制,单个app 1次/s, 建议一批类似的消息体查询一次。
使用:
① 发送消息后查询消息的状态(延时在一分钟内)。
②‘审计通过’或 ‘审计不通过的状态还未入库’,返回 【消息状态未知】,审计不通过状态已入库,返回【消息包含敏感词】
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
https://api-push.vivo.com.cn/search/msgStatus | Utf-8 | https/http | GET | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
taskIds | string | Y | 由多个taskId组成的字符串,多个taskId之间用逗号分隔,一次最多查询100个 |
接口说明
由于用户卸载、客户端主动调用turnOffPush()解订阅、设备14天不联网还有一部分历史原因,可能造成推送的id无效。开发者可以根据推送时返回的InvalidUser对失效id做标记或者清除处理,或者单独查询本接口,将无效的id过滤,避免占用推送额度。
使用:
① 传递要查询的id,以及id的类型,后台根据保存的id,返回无效的id。
② 建议在推送低峰期,例如晚上或者凌晨调用,将保存的id一批批查询,避免影响应用的推送性能。勿高频调用。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/invalidUser/check | Utf-8 | https/http | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
userIds | string[] | Y | 用户id数组 ,单次最大100个 |
userType | int | Y | userId的类型1:regId,2:alias |
接口说明
此接口用于回收已发送给用户的消息。通过传递推送的消息id和具体的用户id、用户类型进行消息回收,消息回收接口调用量和调用速度会占用推送量级和推送速度。
限制:由我司运营人员配置。
消息撤回功能是平台提供给开发者紧急处理运营事故的工具,切勿日常频繁使用,以免对用户体验不当影响。
对于推送内容、应用行为等存在违规的,平台将按《vivo推送运营规则》进行相应处罚。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/message/recycle | Utf-8 | https | POST | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
taskId | string | Y | 单播或广播返回的taskId |
userIds | string[] | Y | userId列表。个数大于等于1小于等于100 |
userType | int | Y | 用户类型。1:regId;2:alias |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
invalidUsers | JSON Array | 非法用户信息,包括status和userid,userid为接入方传的regid或者alias,status有三种情况:1.userId不存在 2.卸载或者关闭了通知 3.七天不在线 |
接口说明
此接口用于查询应用配置信息,系统消息总量、运营消息总量、群推消息体总量、配置速度等信息、SDK订阅数。此接口限制了调用频率,请勿频繁调用。
访问方式
URL | 编码方式 | 协议 | method | Content-Type |
/report/getAppConfig | Utf-8 | https | GET | application/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 | 描述 |
appId | int | Y | 用户申请推送业务时生成的appId,用于与获取authToken时传递的appId校验,一致才可以推送 |
输出参数:
属性名字 | 类型 | 描述 |
result | int | 接口调用是否成功的状态码 0成功,非0失败 |
desc | string | 文字描述接口调用情况 |
data | json object | 详细内容 |
data:
属性名字 | 类型 | 描述 |
sysMsgCount | long | 系统消息配置量 |
marketMsgCount | long | 运营消息配置量 |
sdkSubCount | long | sdk订阅数 |
speed | long | 速度配置 |
groupMsgBodyCount | long | 群推消息体配置量 |
remainSysMsgCount | long | 剩余可发送系统消息量级 |
remainMarketMsgCount | long | 剩余可发送运营消息量级 |
result | desc |
0 | 请求成功 |
10000 | 权限认证失败 |
10040 | 资源已达上限,稍后重试 |
10044 | 该接口未开放测试模式 |
10045 | 应用审核中不可发送正式消息 |
10050 | alias和regId 不能都为空 |
10051 | 暂不支持该消息类型 |
10054 | notifyType 不合法 |
10055 | title 不能为空 |
10056 | title 长度不能超过40个字符 |
10057 | content 不能为空 |
10058 | content 长度不能超过100个字符 |
10059 | timeToLive 不合法 |
10060 | skipType 不合法 |
10061 | skipType = 2, skipContent 不能为空 |
10062 | skipType = 2, skipContent 不能超过1000个字符 |
10063 | skipType = 3, skipContent 不能为空 |
10064 | skipType = 3, skipContent 不能超过1024个字符 |
10065 | networkType 不合法 |
10066 | 自定义key和Value键值对个数不能超过10个 |
10067 | 自定义key和value键值对不合法 |
10068 | skipType = 4, skipContent 不能为空 |
10069 | skipType = 4, skipContent 不能超过1024个字符 |
10070 | 运营消息发送量总量超出限制 |
10071 | 超出发送时间允许范围 |
10072 | 推送速度过快,请稍后再试 |
10073 | 系统消息发送量总量超出限制。系统消息量级申请,请参见:系统消息量级说明 |
10082 | 系统消息未开通 |
10084 | 查询速度过快,请稍后再试 |
10085 | title 或 content 不能为纯表情 |
10093 | 获取鉴权码速度过快 |
10094 | 鉴权码与请求体对应的appId不一致 |
10101 | 消息内容审核不通过 |
10102 | 服务器端未知异常 |
10103 | 推送内容含敏感信息 |
10104 | 请发送正式信息,请检查title、content,不要发送测试内容 |
10105 | 推必安内容审核不通过 |
10106 | auditReview参数错误 |
10110 | 请配置商业化消息发送频率 |
10111 | 今天已发送商业化消息 |
10112 | 商业化消息发送超出周次数限制 |
10150 | aliases 和 regIds 不能都为空 |
10151 | taskId 不能为空 |
10152 | taskId 不合法 |
10153 | regIds 个数不在指定范围[2-1000] |
10154 | aliases 个数不在指定范围[2-1000] |
10155 | 消息不存在或已过期 |
10200 | appId 不能为空 |
10201 | appKey 不能为空 |
10202 | appKey 不合法 |
10203 | timestamp 不能为空 |
10204 | sign 不能为空 |
10205 | appId 不存在 |
10206 | sign 不正确 |
10207 | timestamp 不合法 |
10250 | 认证接口超过调用次数限制 |
10252 | 批量发送创建消息体超出限制 |
10253 | 批量发送regId或alais超过总量限制 |
10254 | 全量发送超过次数限制 |
10301 | alias 长度不能超过40个字符 |
10302 | regId 不合法, regId为无效的regId, regId可能已经失效 |
10304 | extra 包含不支持的key |
10305 | extra callback长度不能超过128个字符 |
10306 | extra callback.param长度不能超过64个字符 |
10307 | alias 不合法 |
10352 | requestId 不能为空 |
10353 | requestId 长度不能超过64个字符 |
10354 | Internet server error |
10471 | taskIds 数量不能超过100个 |
10472 | taskIds 格式错误 |
10473 | taskIds 为空 |
10600 | name参数不合法,只能使用中文、英文字母、阿拉伯数字和下划线命名,且不能以数字开头,且长度不超过50字符 |
10601 | 标签名字不能为空 |
10602 | 标签描述不能超过300字符 |
10603 | oldName参数不能为空 |
10604 | newName参数不能为空 |
10605 | oldName参数不合法,只能使用中文、英文字母、阿拉伯数字和下划线命名, 且不能以数字开头,且长度不超过50字符 |
10606 | newName参数不合法,只能使用中文、英文字母、阿拉伯数字和下划线命名, 且不能以数字开头,且长度不超过50字符 |
10607 | id参数不能为空 |
10608 | type参数不能为空 |
10609 | ids参数不能为空 |
10610 | 标签名已经存在 |
10611 | 标签分类名已经存在 |
10612 | 标签组合名已经存在 |
10613 | group参数不合法,只能使用中文、英文字母、阿拉伯数字和下划线命名, 且不能以数字开头,且长度不超过50字符 |
10614 | ids数量不能超过1000 |
10615 | tag数量不能超过100 |
10616 | type参数不合法 |
10700 | userids不能为空 |
10701 | userid个数超过限制 |
10702 | optionType错误 |
10703 | register接口调用超频,稍后再试 |
10704 | register调用过快,稍后再试 |
10705 | app不支持 |
10706 | userType错误 |
10800 | registration_tokens个数不在指定范围 |
10801 | notification不能为空 |
10802 | original_source_name不能为空 |
10803 | original_source_name长度非法 |
10804 | original_source_ip不能为空 |
10806 | click_action非法 |
10807 | url长度超过限制 |
10808 | intent长度超过限制 |
10255 | 全量推送接口未开放 |
10901 | dyeKey长度不能超过限制 |
10900 | dye设置个数超过限制 |
10811 | 超出限制 |
10810 | clientId非法 |
10809 | click_action不能为空 |
10805 | notification_channel长度超过限制 |
10617 | 系统msgId生成异常 |
10500 | 订阅标签超出限制 |
10501 | 标签长度超出限制 |
10502 | 标签已经删除完成 |
10503 | 标签不能为空 |
10504 | 订阅标签超出限制 |
10505 | 标签长度超出限制 |
10506 | 标签已经删除完成 |
10507 | 标签不能为空 |
10508 | 标签个数超出限制 |
10550 | 标签操作类型无效 |
10551 | 标签列表不能为空 |
10552 | 标签个数超过限制 |
10553 | 标签组合名不能为空 |
10309 | audienceId不合法,alias长度不超过40 |
VIVO作为世界级的手机品牌,实现VIVO手机离线消息通知是当前APP开发者所必须考虑的一个基础功能或能力,开发者在做好APP之后需要向VIVO厂家申请到APP消息推送权限。
那么怎么申请VIVO消息推送呢?
1.登录VIVO开发平台,http://dev.vivo.com.cn/home
2.点击顶部导航开放能力
3.进入消息推送管理后台,点击第一个推送申请接入
点击推送申请接入按钮之后,页面会自动跳转到应用创建页面流程
如图,在申请页面选择需要申请通知消息推送的应用,可以在应用名称这里下拉选择。
当然,如果您还没有创建应用,您需要先去VIVO开放平台新建应用,提交审核之后,在消息推送列表,可以看到消息推送权限的状态
如果状态为【已通过】那么您的APP就正式获得到了VIVO厂家离线推送的权限了,就可以实现VIVO手机离线状态下依旧可以收到消息通知的能力。
如果是状态为【审核中】您的APP可以获得测试阶段的消息推送能力
应用上架后审核状态自动跳转为“已通过”,此时推送权限为“受限”可进行API接口测试。