java配合ios和android信鸽消息

jar包

    <dependency>
        <groupId>com.github.xingePush</groupId>
        <artifactId>xinge</artifactId>
        <version>1.1.8</version>
    </dependency>

就一个足够了,当然其他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<String, XingeApp> _XingeApp = new Hashtable<String, XingeApp>();
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<String, Object> custom = new HashMap<String, Object>();
       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<String, Object> custom = new HashMap<String, Object>();
   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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值