本文是基于云巴推送的RESTful API实现的,在这之前,我有试过用Socket.io API来实现,也能推送成功,只是它只支持推送到单个频道或别名,而我的项目中会用到同时推送到多个用户或部门。
写这篇文章的初衷是因为云巴官方的文档实在太少了,或许是自己以前没有接触过推送,总之在看着官网文档的情况下去实现,很麻烦,自己在这个过程中走了很多弯路,所以在这里写出来,希望大家能有个借鉴。
如果你也像我一样同时用到了定时推送,可以参考我的另一篇博文:
quartz与spring整合实现动态任务增删改查
1、项目的框架是Spring+SpringMVC+MyBatis;
2、因为要在服务端以POST方式发送数据到云巴服务器,所以用到了httpcomponents-client-4.3.4,可以在Apache的网官去下载,只要下面两个包就可以了。
- 必须的jar包
- httpcore-4.3.2.jar
- httpclient-4.3.4.jar
代码实现
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
public class YunBaTest {
public static void testPost() throws Exception {
String url = "http://rest.yunba.io:8080";
String appkey = ""; //你创建的应用的appkey
String seckey = ""; //应用的Secret Key
HttpClient client = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(url);
post.setHeader("Content-type", "application/json");
//以JSON格式推送
String json = "{'method':'publish', 'appkey':'"+appkey+"', 'seckey':'"+appkey+"', 'topic':'topic1'}";
JSONObject jo = new JSONObject(json);
//要推送的消息
jo.put("msg", "你好吗");
StringEntity params = new StringEntity(jo.toString());
post.setEntity(params);
HttpResponse response = client.execute(post);
String result=null;
if (response.getStatusLine().getStatusCode() == 200) {
result = EntityUtils.toString(response.getEntity(),"UTF-8");
System.out.println("发送成功");
}
//打印返回结果
System.out.println("result:" + result);
}
}
返回结果如果像这样:{“status”:0, “messageId”: 2568857aced},就代表推送成功。
也可以在云巴官网中查看推送是否成功:
1. 登录后打开[我的应用],点击[发布消息];
2. 在频道名称中输入你测试的频道名,我的代码中是”topic1”;
3. 在消息内容中输入消息,点击发送;
4. 然后再运行测试代码,如果消息框中出现了推送的消息,那肯定是推送成功了。