jar包
就一个足够了,当然其他json的依赖包就不列举了
写个推送类,这里只列举账号推送
package com.travelpay.provider;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import org.json.JSONObject;
import com.tencent.xinge.Message;
import com.tencent.xinge.MessageIOS;
import com.tencent.xinge.TimeInterval;
import com.tencent.xinge.XingeApp;
/***
* qq信鸽 - 消息推送
* @author Administrator
*
*/
public class XingeManager {
private static Hashtable
private static XingeManager instance = null;
public static XingeManager getInstance() {
if (instance == null) {
synchronized(XingeManager.class){
if(instance == null)
instance = new XingeManager();
}
}
return instance;
}
private XingeManager(){
}
/***
* 获取 XingeApp
* @param appType
* @return
*/
private XingeApp getXingeApp(String appType){
XingeApp xingeApp = _XingeApp.get(appType);
if(xingeApp == null){
synchronized(_XingeApp){
XingeApp xinge = null;
if( appType.toLowerCase().contains("ios") ){
xinge = new XingeApp(2200258953L, "f6842cb76e7f6bb126676cd72f219ecd");
}else if( appType.toLowerCase().contains("android") ){
xinge = new XingeApp(2100259470, "c91007520ef0d8912ce276ab2c9b9e06");
}
_XingeApp.put(appType, xinge);
return xinge ;
}
}
return xingeApp;
}
}
/***
* 单用户推送
* @param appType 客户端类型:android,ios
* @param alert 消息内容
* @param clickAction 点击传值
* @param account 账号
*/
private void pushSingleAccount(String appType, String alert, Integer clickAction, String account) {
if( appType!=null&&appType.indexOf("ios") != -1 ){
pushSingleAccountIOS(alert, clickAction, account);
}else if(appType!=null&& appType.indexOf("android") != -1 ){
pushSingleAccountAndroid(alert, clickAction, account);
}
}
因为一个手机绑定一个账号,所以项目中,多次推送没必要多次实例化信鸽对象,只需要一个实例就够了。接下里就是发出推送消息了
信鸽实例化需要android和ios提供在腾讯信鸽创建的项目应用accessId和 secretKey
在此类加如下方法
/***
* ios 单用户推送
* @param alert 消息内容
* @param clickAction 点击传值
* @param account 账号
*/
private void pushSingleAccountIOS(final String alert, final Integer clickAction, final String account) {
new Thread(){
public void run() {
MessageIOS message = new MessageIOS();
message.setExpireTime(86400);
message.setAlert(alert);
message.setBadge(1);
message.setSound("beep.wav");
TimeInterval acceptTime1 = new TimeInterval(0, 0, 23, 59);
message.addAcceptTime(acceptTime1);
Map
custom.put("clickAction", clickAction);
message.setCustom(custom);
message.setType(MessageIOS.TYPE_APNS_NOTIFICATION);
message.setExpireTime(86400);
message.setCategory("INVITE_CATEGORY");
JSONObject ret = getXingeApp("ios").pushSingleAccount(0, account, message, XingeApp.IOSENV_DEV);
System.out.println(ret);
}
}.start();
}
解释一下,用户点击某个按钮,触发了推送,我们没有必要等待推送的结果返回,我们要做异步调用,ios获取到了clickAction值,可以做相应跳转的页面,如我传一个1,代表跳转登录页面,key 是clickAction,iso获取key的值1,就知道要跳转哪个页面,alert是推送内容,如:您有一条新的订单,请注意查看,点击【卖出订单】中待接单完成操作,account,是ios绑定推送的账号(简单的纯数字不能作为账号)返回0代表成功
下面是android的
/***
* 单用户推送
* @param alert 消息内容
* @param clickAction 点击传值
* @param account 账号
*/
private void pushSingleAccountAndroid(final String content, final Integer clickAction, final String account) {
new Thread(){
public void run() {
Message message = new Message();
message.setExpireTime(86400);
message.setContent(content);
message.setType(Message.TYPE_NOTIFICATION);
Map
custom.put("clickAction", clickAction);
message.setCustom(custom);
TimeInterval acceptTime1 = new TimeInterval(0, 0, 23, 59);
message.addAcceptTime(acceptTime1);
JSONObject ret = getXingeApp("android").pushSingleAccount(0, account, message);
System.out.println(ret);
}
}.start();
}
写个main方法测试一下
/***
*
* @param args
*/
public static void main(String[] args) {
XingeManager.getInstance().pushSingleAccount("ios", "主人缺货款已经到账啦,快看看吧!",1, "buyerId_70");
}