美洽发送离线消息到开发者服务器
接收解析处理美洽推送的开发着服务接口:
设置服务器地址,请使用美洽管理员帐号登录 美洽,在「设置」 -> 「SDK」中设置。
request.header.authorization 为数据签名
request.body 为消息数据
下面代码中,获取消息头的数据签名,和消息数据,把消息数据按照指定方式加密生成签名,再与消息头中的签名进行比对,如果比对成功,就解析body里面的数据(下面代码中str就是解析出来的body),由开发者服务器推送给用户APP;
代码如例:
import com.kojoker.yipinshe.app.service.MeiQiaService; import com.kojoker.yipinshe.app.service.SendCastService; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; /** * 美洽 推送离线消息 接收处理接口 * Created by zhangzc on 2017/12/1. */ @Controller @RequestMapping(value = "/meiqia", produces = "application/json;charset=UTF-8") public class MeiQiaPushController {protected final Logger log = LoggerFactory.getLogger(this.getClass()); @Resource(name = "meiQiaService")MeiQiaService meiQiaService; @Resource(name = "sendCastService")SendCastService sendCastService; @RequestMapping(value = "push", method = {RequestMethod.POST, RequestMethod.GET})public void meiqiaPush(HttpServletRequest request, HttpServletResponse response, BufferedReader br) {// 获取头信息的 Authorization,其中是美洽推送数据的签名 System.out.println("美洽推送接口"); try {String str = meiQiaService.doSign(request, br); if (str != null) {System.out.println("验证成功!!!"); JSONObject jsStrQuery = JSONObject.fromObject(str); // String contentType = jsStrQuery.getString("contentType");//消息内容类型 - text/photo/audio // String customizedData = jsStrQuery.getString("customizedData");//开发者上传的自定义的属性 // String messageId = jsStrQuery.getString("messageId");//消息 id String content = jsStrQuery.getString("content");//消息内容 // String messageTime = jsStrQuery.getString("messageTime");//发送时间 String fromName = jsStrQuery.getString("fromName");//发送人姓名 String deviceToken = jsStrQuery.getString("deviceToken");//发送对象设备的 deviceToken,格式为字符串 // String clientId = jsStrQuery.getString("clientId");//发送对象的顾客 id // String customizedId = jsStrQuery.getString("customizedId");//开发者传的自定义 id String deviceOS = jsStrQuery.getString("deviceOS");//设备系统 // String type = jsStrQuery0.getString("type");//消息类型 - mesage 普通消息 / welcome 欢迎消息 / ending 结束消息 / remark 评价消息 / 留言消息 if ("Android".equals(deviceOS)) {sendCastService.sendAndroidUnicast("1", fromName, content, deviceToken); } else {sendCastService.sendIOSUnicast("1", fromName, content, deviceToken); }}} catch (Exception e) {e.printStackTrace(); }} }
使用到的加密方法:
@Service("meiQiaService") public class MeiQiaServiceImpl implements MeiQiaService {protected final Logger log = LoggerFactory.getLogger(this.getClass()); private String key; @Override public String doSign(HttpServletRequest request, BufferedReader br) throws Exception {String Authorization = request.getHeader("Authorization"); String headerSign = Authorization.replaceAll("meiqia_sign:", ""); System.out.println("headerSign----------"+headerSign); String inputLine; String str = ""; try {while ((inputLine = br.readLine()) != null) {str += inputLine; }br.close(); } catch (IOException e) {System.out.println("IOException: " + e); }System.out.println("str:" + str); String sign = ""; MeiqiaSigner signer = new MeiqiaSigner(key); try {String sign0 = signer.sign(str); sign = sign0.replaceAll("meiqia_sign:",""); System.out.println("sing---------"+sign); } catch (SignatureException e) {e.printStackTrace(); }//对 http-body 进行 HMAC-SHA1 操作,然后就会得到 sign。 //将两个 sign 进行比对,如果一样,就说明该请求合法,可以进行其他操作,如果不对,就舍弃。 if (headerSign.equals(sign)) {System.out.println("对比成功"); return str; } else {return null; }}public String getKey() {return key; }public void setKey(String key) {this.key = key; } }
解析成功后(拿到消息内容,标题,deviceToken(设备唯一标识)):这里是调用友盟的推送接口(单播)进行推送的:
//单播 Android @Override public void sendAndroidUnicast(String messageType, String title, String content, String deviceToken) throws Exception {String str = "{\"messageType\":" + messageType + ",\"messageTime\":" + new Date().getTime() + ",\"messageTitle\":\"" + title + "\",\"messageContent\":\"" + content + "\"}"; AndroidUnicast unicast = new AndroidUnicast(andriodAppkey, andriodAppMasterSecret); unicast.setDeviceToken(deviceToken); unicast.setTicker(title); unicast.setTitle(title); unicast.setText(content); unicast.goAppAfterOpen(); unicast.setPlayLights(true);//消息闪灯 unicast.setPlayVibrate(true);//消息震动 unicast.setPlaySound(true);//消息声音 unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION); unicast.goCustomAfterOpen(str);//后续动作,自定义行为 if (modeType == "test") {unicast.setTestMode();//测试 } else if (modeType == "production") {unicast.setProductionMode();//正式 }unicast.setExtraField("test", "helloworld"); client.send(unicast); System.out.println("Andriod 发送成功"+title); }//单播 iOS @Override public void sendIOSUnicast(String messageType, String title, String content, String deviceToken) throws Exception {String str = "{\"messageType\":" + messageType + ",\"messageTime\":" + new Date().getTime() + ",\"messageTitle\":\"" + title + "\",\"messageContent\":\"" + content + "\"}"; IOSUnicast unicast = new IOSUnicast(iOSAppkey, iOSAppMasterSecret); unicast.setDeviceToken(deviceToken); unicast.setTitle(title);//标题 unicast.setBody(content);//内容 unicast.setDescription(title); unicast.setBadge(0); unicast.setSound("default"); unicast.setTestMode(); unicast.setCustomizedField("test", "helloworld"); unicast.setCustomizedField("key", str); client.send(unicast); System.out.println("iOS 发送成功:"+title); }
美洽发送离线消息到开发者服务器相关推荐
- 服务器拒绝了您发送离线文件的请求,处理qq发送离线文件被提示“服务器拒绝了您发送离线文件”的方法...
我们在QQ中传输文件的时候,一旦好友不在就会选择使用离线传输的方法来传送文件,这样当好友上线之后就可以立即下载了!不过想要使用离线传输功能还是有很多的限制的,最近就有用户在使用这个功能的时候被提示:& ...
- 服务器拒绝了您发送离线文件的请求,服务器拒绝了您发送离线文件”解决方法...
因为工作需要,我要将一些文件通过QQ发给客户,凑巧客户不在我就要发送离线文件,可是发送离线文件时却有系统提示"服务器拒绝了您发送离线文件",那么是怎么一回事呢?服务器拒绝了您发送离 ...
- 美洽消息推送 php,GitHub - Meiqia/MeiqiaSDK-Push-Signature-Example: 美洽 SDK 3.0 推送的数据结构签名算法,多语言示例。...
MeiqiaSDK-Push-Signature-Example 美洽 SDK 3.0 推送的数据结构签名算法,多语言示例. 该项目是 美洽 SDK 3.0 推送的数据结构签名的算法,具体推送的数据结 ...
- 发送临时文件被服务器拒绝,临时会话说服务器拒绝了您发送离线文件的请求 - 卡饭网...
qq 服务器拒绝了您发送离线文件请求的解决方法 qq 服务器拒绝了您发送离线文件请求的解决方法 qq服务器拒绝了您发送离线文件的原因?在我们日常工作中,因工作需要会用上qq离线文件接收.发送.而前面小 ...
- qq不能发说说显示服务器错误,qq为什么发送不成word服务器拒绝发送离线请求. - 卡饭网...
qq服务器拒绝发送离线文件怎么办 qq服务器拒绝发送离线文件怎么办 qq服务器拒绝发送离线文件怎么办 服务器拒绝了您发送离线文件的原因: 第一种:传输文件容量超过限制;实际上所有的普通QQ用户都可用使 ...
- 韩顺平Java:qq项目离线发送接收消息/文件扩展
思路:1.在服务端创建一个ConcurrentHashMap线程安全的集合用来存储离线用户的消息和文件,为了实现每个用户可以保存多条离线消息,我们在键值对value中采用ArrayList来保存多条m ...
- windows7系统做文件服务器拒绝,Win7提示qq服务器拒绝了您发送离线文件
腾讯QQ功能强大,语音.视频.传输文件等,很多人都喜欢通过qq给朋友或同事发送文件,即使人不在也可以接收离线文件,随时都可以接收.但是有win7用户发送离线文件时提示"服务器拒绝了您发送离线 ...
- 腾讯通服务器删除离线消息,如何撤回RTX离线消息离线文件.docx
如何撤回RTX离线消息离线文件 如何撤回已经发出的离线消息.文件(包括群文件和群消息) 1 消息撤回1.1 如何撤回离线消息.群离线消息当一个用户向另一个用户发送离线消息后,该消息会存储在服务端Off ...
- 韩顺平QQ多用户聊天系统-离线消息发送
将离线文件,离线消息设计为一个离线消息类,实现Runnable 接口,具体代码如下 package QQServer.Service;import qqcommon.Message;import ja ...
最新文章
- Android XML: unbound prefix
- 随机算法python_在python中实现随机选择
- 5.VMware View 4.6安装与部署-安装view agent与模版
- 最短工期 (25 分)【拓扑排序模板】
- PowerBI,自定义编辑同一页面中不同图表之间的交互,使页面交互更灵活
- 使用face-api和Tensorflow.js进行预训练的AI情绪检测
- windows下数据库mysql8.0安装
- 2018网易在线笔试题
- SQL2005创建快照
- 知网caj怎么打开?如何将CAJ转Word?
- 【PS | 学习】毛坯乡间图打造复古美式电影海报图
- NRF52840 NRF52833 nRF5 SDK 开发
- 虚拟机安装与双系统(win10+ubuntu)安装及其他
- Python编程通过出生日期判断星座
- 用Excel快速新建空白文件夹
- 自己做量化交易软件(10)通通量化AI框架的数据获取与格式
- redis关于hash的常用命令
- 根据运单号查询快递物流详情
- Flask 和 Django 的比较和选择
- 楼宇控制服务器显示FT,【产品介绍】楼宇智控系统