接收解析处理美洽推送的开发着服务接口:

设置服务器地址,请使用美洽管理员帐号登录 美洽,在「设置」 -> 「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);
}

美洽发送离线消息到开发者服务器相关推荐

  1. 服务器拒绝了您发送离线文件的请求,处理qq发送离线文件被提示“服务器拒绝了您发送离线文件”的方法...

    我们在QQ中传输文件的时候,一旦好友不在就会选择使用离线传输的方法来传送文件,这样当好友上线之后就可以立即下载了!不过想要使用离线传输功能还是有很多的限制的,最近就有用户在使用这个功能的时候被提示:& ...

  2. 服务器拒绝了您发送离线文件的请求,服务器拒绝了您发送离线文件”解决方法...

    因为工作需要,我要将一些文件通过QQ发给客户,凑巧客户不在我就要发送离线文件,可是发送离线文件时却有系统提示"服务器拒绝了您发送离线文件",那么是怎么一回事呢?服务器拒绝了您发送离 ...

  3. 美洽消息推送 php,GitHub - Meiqia/MeiqiaSDK-Push-Signature-Example: 美洽 SDK 3.0 推送的数据结构签名算法,多语言示例。...

    MeiqiaSDK-Push-Signature-Example 美洽 SDK 3.0 推送的数据结构签名算法,多语言示例. 该项目是 美洽 SDK 3.0 推送的数据结构签名的算法,具体推送的数据结 ...

  4. 发送临时文件被服务器拒绝,临时会话说服务器拒绝了您发送离线文件的请求 - 卡饭网...

    qq 服务器拒绝了您发送离线文件请求的解决方法 qq 服务器拒绝了您发送离线文件请求的解决方法 qq服务器拒绝了您发送离线文件的原因?在我们日常工作中,因工作需要会用上qq离线文件接收.发送.而前面小 ...

  5. qq不能发说说显示服务器错误,qq为什么发送不成word服务器拒绝发送离线请求. - 卡饭网...

    qq服务器拒绝发送离线文件怎么办 qq服务器拒绝发送离线文件怎么办 qq服务器拒绝发送离线文件怎么办 服务器拒绝了您发送离线文件的原因: 第一种:传输文件容量超过限制;实际上所有的普通QQ用户都可用使 ...

  6. 韩顺平Java:qq项目离线发送接收消息/文件扩展

    思路:1.在服务端创建一个ConcurrentHashMap线程安全的集合用来存储离线用户的消息和文件,为了实现每个用户可以保存多条离线消息,我们在键值对value中采用ArrayList来保存多条m ...

  7. windows7系统做文件服务器拒绝,Win7提示qq服务器拒绝了您发送离线文件

    腾讯QQ功能强大,语音.视频.传输文件等,很多人都喜欢通过qq给朋友或同事发送文件,即使人不在也可以接收离线文件,随时都可以接收.但是有win7用户发送离线文件时提示"服务器拒绝了您发送离线 ...

  8. 腾讯通服务器删除离线消息,如何撤回RTX离线消息离线文件.docx

    如何撤回RTX离线消息离线文件 如何撤回已经发出的离线消息.文件(包括群文件和群消息) 1 消息撤回1.1 如何撤回离线消息.群离线消息当一个用户向另一个用户发送离线消息后,该消息会存储在服务端Off ...

  9. 韩顺平QQ多用户聊天系统-离线消息发送

    将离线文件,离线消息设计为一个离线消息类,实现Runnable 接口,具体代码如下 package QQServer.Service;import qqcommon.Message;import ja ...

最新文章

  1. Android XML: unbound prefix
  2. 随机算法python_在python中实现随机选择
  3. 5.VMware View 4.6安装与部署-安装view agent与模版
  4. 最短工期 (25 分)【拓扑排序模板】
  5. PowerBI,自定义编辑同一页面中不同图表之间的交互,使页面交互更灵活
  6. 使用face-api和Tensorflow.js进行预训练的AI情绪检测
  7. windows下数据库mysql8.0安装
  8. 2018网易在线笔试题
  9. SQL2005创建快照
  10. 知网caj怎么打开?如何将CAJ转Word?
  11. 【PS | 学习】毛坯乡间图打造复古美式电影海报图
  12. NRF52840 NRF52833 nRF5 SDK 开发
  13. 虚拟机安装与双系统(win10+ubuntu)安装及其他
  14. Python编程通过出生日期判断星座
  15. 用Excel快速新建空白文件夹
  16. 自己做量化交易软件(10)通通量化AI框架的数据获取与格式
  17. redis关于hash的常用命令
  18. 根据运单号查询快递物流详情
  19. Flask 和 Django 的比较和选择
  20. 楼宇控制服务器显示FT,【产品介绍】楼宇智控系统

热门文章

  1. html的图片滤镜效果,使用 CSS 实现图片的滤镜效果
  2. telegram不小心泄露号码
  3. android应用禁止投屏显示
  4. 2019全国计算机专业大专生推荐,2020年最新全国大专排名一览表
  5. VML与SVG 矢量绘图
  6. 让div某一边的border(边框)显示一半
  7. MATLAB小技巧(17)矩阵分析--灰色关联度计算
  8. 最优化方法(运筹学方法)
  9. 用51单片机c语言实现电磁炉功能,电磁炉控制系统单片机模拟
  10. 使用jq实现全选 反选 和全不选-冯浩的博客