极光推送服务端

原创
2017/03/02 10:26
阅读数 222

极光推送的APP_KEY和MASTER_SECRET需要再极光推送官网注册后生成,

1.先生成推送平台

2.推送的内容再生成平台时生成

public static void main(String[] args) {
        PushPayload payload = JpushUtil.buildAndroidAndIOSPayload( "呵呵");
        JpushUtil.pushMsgWithCallback(payload, MASTER_SECRET, APP_KEY);
    }

package com.tempetek.client.common;

import io.netty.handler.codec.http.HttpMethod;

import java.net.URI;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.jiguang.common.ClientConfig;
import cn.jiguang.common.ServiceHelper;
import cn.jiguang.common.connection.NettyHttpClient;
import cn.jiguang.common.resp.ResponseWrapper;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.Notification;

/**
 * 
 * @description 极光推送工具类
 * @author lipinxian
 * @date 2017年2月28日下午7:02:05
 */
public class JpushUtil {
    protected static final Logger LOG = LoggerFactory.getLogger(JpushUtil.class);
//    public final static String APP_KEY = "4f68dced44297cfa85da8b68";
//    public final static String MASTER_SECRET = "035ce832f2ad7fd3a27c5535";
    /**
     * 
     * @description 使用NettyHttpClient异步接口发送请求
     * @author lipinxian
     * @date 2017年3月1日下午1:45:21
     * @param pushPayload 推送对象
     * @param masterSecret Portal上注册时生成的masterSecret
     * @param appKey Portal上注册时生成的appKey
     */
    public static void pushMsgWithCallback(PushPayload pushPayload, String masterSecret, String appKey) {
        ClientConfig clientConfig = ClientConfig.getInstance();
        String host = (String)clientConfig.get(ClientConfig.PUSH_HOST_NAME);
        final NettyHttpClient client = new NettyHttpClient(ServiceHelper.getBasicAuthorization(appKey, masterSecret), null, clientConfig);
        
        try {
            URI uri = new URI(host + clientConfig.get(ClientConfig.PUSH_PATH));
            client.sendRequest(HttpMethod.POST, pushPayload.toString(), uri, new NettyHttpClient.BaseCallback() {
                @Override
                public void onSucceed(ResponseWrapper arg0) {
                    // TODO Auto-generated method stub
                    LOG.info("pushMsgWithCallback的结果:" + arg0.responseContent);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            LOG.info("pushMsgWithCallback失败:" + e.getMessage());
        } finally {
            client.close();
        }
    }
    
    /**
     * 
     * @description 根据别名往IOS和Android上推送消息
     * @author lipinxian
     * @date 2017年3月1日下午3:35:30
     * @param alias 别名
     * @param masterSecret Portal上注册时生成的masterSecret
     * @param appKey Portal上注册时生成的appKey
     * @param alert 推送内容
     */
    public static void pushMsgToAndroidAndIOSAlias(String alias, String masterSecret, String appKey, String alert) {
        PushPayload pushPayload = buildAndroidAndIOSPayloadAlias(alias, alert);
        
        try {
            JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance());
            PushResult result = jpushClient.sendPush(pushPayload);
            LOG.info("pushMsgToAndroidAndIOSAlias的结果:" + result);
        } catch (Exception e) {
            e.printStackTrace();
            LOG.info("pushMsgToAndroidAndIOSAlias失败:" + e.getMessage());
        }
    }
    
    /**
     * 
     * @description 往IOS和Android上推送消息
     * @author lipinxian
     * @date 2017年3月1日下午3:45:20
     * @param masterSecret Portal上注册时生成的masterSecret
     * @param appKey Portal上注册时生成的appKey
     * @param alert 推送内容
     */
    public static void pushMsgToAndroidAndIOS(String masterSecret, String appKey, String alert) {
        PushPayload pushPayload = buildAndroidAndIOSPayload(alert);
        
        try {
            JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance());
            PushResult result = jpushClient.sendPush(pushPayload);
            LOG.info("pushMsgToAndroidAndIOS的结果:" + result);
        } catch (Exception e) {
            e.printStackTrace();
            LOG.info("pushMsgToAndroidAndIOS失败:" + e.getMessage());
        }
    }
    
    /**
     * 
     * @description 根据别名往特定的Android APP上推送消息
     * @author lipinxian
     * @date 2017年2月28日下午7:09:54
     * @param alias 别名
     * @param masterSecret Portal上注册时生成的masterSecret
     * @param appKey Portal上注册时生成的appKey
     * @param alert 推送内容
     */
    public static void pushMsgToAndroidAlias(String alias, String masterSecret, String appKey, String alert) {
        PushPayload pushPayload = buildAndroidWinphonePayloadAlias(alias, alert);
        
        try {
            JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance());
            PushResult result =  jpushClient.sendPush(pushPayload);
            LOG.info("pushMsgToAndroid的结果:" + result);
        } catch (Exception e) {
            e.printStackTrace();
            LOG.info("pushMsgToAndroid失败:" + e.getMessage());
        }
    }
    
    /**
     * 
     * @description 往android APP上推送消息
     * @author lipinxian
     * @date 2017年3月1日下午3:49:10
     * @param masterSecret Portal上注册时生成的masterSecret
     * @param appKey Portal上注册时生成的appKey
     * @param alert 推送内容
     */
    public static void pushMsgToAndroid(String masterSecret, String appKey, String alert) {
        PushPayload pushPayload = buildAndroidWinphonePayload(alert);
        
        try {
            JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance());
            PushResult result =  jpushClient.sendPush(pushPayload);
            LOG.info("pushMsgToAndroid的结果:" + result);
        } catch (Exception e) {
            e.printStackTrace();
            LOG.info("pushMsgToAndroid失败:" + e.getMessage());
        }
    }
    
    /**
     * 
     * @description 根据别名往特定的IOS APP上推送消息
     * @author lipinxian
     * @date 2017年2月28日下午7:18:51
     * @param alias 别名
     * @param masterSecret Portal上注册时生成的masterSecret
     * @param appKey Portal上注册时生成的appKey
     * @param alert 推送内容
     */
    public static void pushMsgToIOSAlias(String alias, String masterSecret, String appKey, String alert) {
        PushPayload pushPayload = buildIOSPayloadAlias(alias, alert);
        
        try {
            JPushClient jpushClient = new JPushClient(masterSecret, appKey);
            jpushClient.sendPush(pushPayload);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 
     * @description 往IOS APP上推送消息
     * @author lipinxian
     * @date 2017年3月1日下午3:50:12
     * @param masterSecret Portal上注册时生成的masterSecret
     * @param appKey Portal上注册时生成的appKey
     * @param alert 推送内容
     */
    public static void pushMsgToIOS(String masterSecret, String appKey, String alert) {
        PushPayload pushPayload = buildIOSPayload(alert);
        
        try {
            JPushClient jpushClient = new JPushClient(masterSecret, appKey);
            jpushClient.sendPush(pushPayload);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 
     * @description 推送消息到所有平台、所有设备
     * @author lipinxian
     * @date 2017年3月1日上午10:36:29
     * @param alert 推送内容
     * @param masterSecret Portal上注册时生成的masterSecret
     * @param appKey Portal上注册时生成的appKey
     */
    public static void pushMsgToAll(String alert, String masterSecret, String appKey) {
        PushPayload pushPayload = buildPushAllPayload(alert);
        
        try {
            JPushClient jpushClient = new JPushClient(masterSecret, appKey);
            PushResult result = jpushClient.sendPush(pushPayload);
            LOG.info("pushMsgToAll的结果:" + result);
        } catch (Exception e) {
            e.printStackTrace();
            LOG.info("pushMsgToAll失败:" + e.getMessage());
        }
    }
    
    /**
     * 
     * @description 推送消息到所有平台,且目标别名为alias的设备
     * @author lipinxian
     * @date 2017年3月1日上午10:54:45
     * @param alias 别名
     * @param alert 推送内容
     * @param masterSecret Portal上注册时生成的masterSecret
     * @param appKey Portal上注册时生成的appKey
     */
    public static void pushMsgToAllAlias(String alias, String alert, String masterSecret, String appKey) {
        PushPayload pushPayload = buildPushAllPayloadAlias(alias, alert);
        
        try {
            JPushClient jpushClient = new JPushClient(masterSecret, appKey);
            PushResult result = jpushClient.sendPush(pushPayload);
            LOG.info("pushMsgToAllAlias的结果:" + result);
        } catch (Exception e) {
            e.printStackTrace();
            LOG.info("pushMsgToAllAlias失败:" + e.getMessage());
        }
    }
    
    
    
    /**
     * 
     * @description 构建一个通知所有平台的,所有设备的推送对象
     * @author lipinxian
     * @date 2017年2月28日下午7:01:29
     * @param alert 推送内容
     * @return
     */
    public static PushPayload buildPushAllPayload(String alert) {
        return PushPayload.alertAll(alert);
    }
    
    /**
     * 
     * @description 构建一个通知所有平台,推送目标别名为alias的推送对象
     * @author youmusen
     * @date 2017年3月1日上午9:22:50
     * @param alias 推送别名
     * @param alert 推送内容
     * @return 
     */
    public static PushPayload buildPushAllPayloadAlias(String alias, String alert) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.all()) //设置接收的平台
                .setAudience(Audience.alias(alias))
                .setNotification(Notification.alert(alert))
                .build();
    }
    
    /**
     * 
     * @description 构建一个推送平台为IOS且推送目标别名为alias的推送对象
     * @author lipinxian
     * @date 2017年2月28日下午6:53:18
     * @param alias 别名
     * @param alert 推送内容
     * @return
     */
    public static PushPayload buildIOSPayloadAlias(String alias, String alert) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.ios())
                .setAudience(Audience.alias(alias))
                .setNotification(Notification.newBuilder()
                        .setAlert(alert)
                        .build())
                .build();            
    }
    
    /**
     * 
     * @description 构建一个推送平台为IOS的推送对象
     * @author youmusen
     * @date 2017年3月1日下午3:48:14
     * @param alert 推送内容
     * @return
     */
    public static PushPayload buildIOSPayload(String alert) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.ios())
                .setAudience(Audience.all())
                .setNotification(Notification.newBuilder()
                        .setAlert(alert)
                        .build())
                .build();            
    }
    
    /**
     * 
     * @description 构建一个推送平台为Android和windows phone且推送目标别名为alias的推送对象
     * @author lipinxian
     * @date 2017年2月28日下午6:58:28
     * @param alias 别名
     * @param alert 推送内容
     * @return
     */
    public static PushPayload buildAndroidWinphonePayloadAlias(String alias, String alert) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.android())
                .setAudience(Audience.alias(alias))
                .setNotification(Notification.newBuilder()
                        .setAlert(alert)
                        .build())
                .build();
    }
    
    /**
     * 
     * @description 构建一个推送平台为Android和windows phone的推送对象
     * @author youmusen
     * @date 2017年3月1日下午3:47:19
     * @param alert 推送内容
     * @return
     */
    public static PushPayload buildAndroidWinphonePayload(String alert) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.android())
                .setAudience(Audience.all())
                .setNotification(Notification.newBuilder()
                        .setAlert(alert)
                        .build())
                .build();
    }
    
    /**
     * 
     * @description 构建一个推送平台为Android和IOS且推送目标别名为alias的推送对象
     * @author lipinxian
     * @date 2017年3月1日下午3:30:52
     * @param alias 别名
     * @param alert 推送内容
     * @return
     */
    public static PushPayload buildAndroidAndIOSPayloadAlias(String alias, String alert) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.android_ios())
                .setAudience(Audience.alias(alias))
                .setNotification(Notification.newBuilder()
                        .setAlert(alert)
                        .build())
                .build();
    }
    
    /**
     * 
     * @description 构建一个推送平台为Android和IOS的推送对象
     * @author lipinxian
     * @date 2017年3月1日下午3:41:12
     * @param alert 推送内容
     * @return
     */
    public static PushPayload buildAndroidAndIOSPayload(String alert) {
        return PushPayload.newBuilder()
                .setPlatform(Platform.android_ios())
                .setAudience(Audience.all())
                .setNotification(Notification.newBuilder()
                        .setAlert(alert)
                        .build())
                .build();
    }
    
    
}

展开阅读全文
打赏
0
0 收藏
分享
加载中
GoEasy 实时推送支持IE6-IE11及大多数主流浏览器的推送,我们项目用的就是GoEasy推送,他们提供的OTP (one-time-password)能有效杜绝他人通过在页面上获取 appkey的方式,进行非法操作,十分安全!此外GoEasy目前除了在中国有服务器外还在美国,新加坡也开了服务器来支持外海推送的需求,据他们客服说接下来还会有更多的机房在世界各地……如果有全球推送需求的项目可以考虑它。
2017/09/26 15:20
回复
举报
更多评论
打赏
1 评论
0 收藏
0
分享
返回顶部
顶部