极光推送


公司手机项目使用到了极光推送,将代码记录下来,免费的情况下极光推送的消息送达率有8,9成,速度也还可以,对于送达率要求不严格的项目可以应用

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;

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

import cn.jpush.api.JPushClient;
import cn.jpush.api.common.resp.APIConnectionException;
import cn.jpush.api.common.resp.APIRequestException;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
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.audience.AudienceTarget;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import cn.jpush.api.report.MessagesResult;

public class Punish {

    protected static final Logger LOG = LoggerFactory.getLogger(Punish.class);
    public static final String TITLE = "hahaha";
    public static final String ALERT = "推推推推推推送";
    public static final String MSG_CONTENT = "推送";
    public static final String REGISTRATION_ID = "0900e8d85ef";
    public static final String TAG = "tag_api";

    String appKey = "申请的appKey";
    String masterSecret = "安全密匙";
    private String title;
    private String content;
    private String message;
    public static JPushClient jpushClient = null;


    public static void testSendPush(String appKey, String masterSecret) {
        jpushClient = new JPushClient(masterSecret, appKey, 3);
        // 生成推送的内容,这里我们先测试全部推送
        PushPayload payload = buildPushObject_all_alias_alert();

        try {
            System.out.println(payload.toString());
            PushResult result = jpushClient.sendPush(payload);
            System.out.println(result + "................................");

            LOG.info("Got result - " + result);

        } catch (APIConnectionException e) {
            LOG.error("Connection error. Should retry later. ", e);

        } catch (APIRequestException e) {
            LOG.error(
                    "Error response from JPush server. Should review and fix it. ",
                    e);
            LOG.info("HTTP Status: " + e.getStatus());
            LOG.info("Error Code: " + e.getErrorCode());
            LOG.info("Error Message: " + e.getErrorMessage());
            LOG.info("Msg ID: " + e.getMsgId());
        }
    }

    /**
     * 向指定人发送消息 android
     *
     * @param alias
     *            人名称
     * @return 消息id
     */
    public Long sendPushalias(String alias, String message, String title,
            String type,String userNo,String touserNo,String res) {
        PushPayload payloadtag = buildPushObject_android_alias_alertWithTitle(
                alias, message, title, type,userNo,touserNo,res);
        
        PushPayload payloadtagios= buildPushObject_ios_alias_alertWithTitle(alias, message, title, type,userNo,touserNo,res);
        long msgId = 0;
        long msgId2 = 0;
        try {
            jpushClient = new JPushClient(masterSecret, appKey, 3);
            PushResult result = jpushClient.sendPush(payloadtag);
            msgId = result.ERROR_CODE_OK;
            
            //jpushClient = new JPushClient(masterSecret, appKey, 3);
            PushResult resultios = jpushClient.sendPush(payloadtagios);
            msgId2 = resultios.ERROR_CODE_OK;
            
        } catch (APIConnectionException e) {
            msgId = e.getDoneRetriedTimes();
            return msgId;
        } catch (APIRequestException e) {
            msgId = e.getErrorCode();
            return msgId;
        }
        
        return msgId;
    }

    /**
     * 向指定组发送消息 android
     *
     * @param tag
     *            组名称
     * @return 消息id
     */
    public Long sendPushTag(Set<String> tag, String message, String title,
            String type,String userNo) {

        PushPayload payloadtag = buildPushObject_android_tags_alertWithTitle(
                tag, message, title, type,userNo);
        PushPayload payloadtagios = buildPushObject_ios_tags_alertWithTitle(
                tag, message, title, type,userNo);
        long msgId = 0;
        try {
            jpushClient = new JPushClient(masterSecret, appKey, 3);
            PushResult result = jpushClient.sendPush(payloadtag);
            msgId = result.ERROR_CODE_OK;
            
            PushResult resultios = jpushClient.sendPush(payloadtagios);
            msgId = resultios.ERROR_CODE_OK;
            
            System.out.println("msg" + msgId);
        } catch (APIConnectionException e) {
            msgId=e.getDoneRetriedTimes();
            return msgId;
        } catch (APIRequestException e) {
            msgId=e.getErrorCode();
            return msgId;
        }
        return msgId;
    }

    /**
     * 向指定人发送消息 ios
     *
     * @param alias
     *            人名称
     * @return 消息id
     */
    public Long sendPushaliasios(String alias, String message, String title,
            String type,String userNo,String touserNo,String res) {
        PushPayload payloadtag = buildPushObject_android_alias_alertWithTitle(
                alias, message, title, type,userNo,touserNo,res);
        long msgId = 0;
        try {
            jpushClient = new JPushClient(masterSecret, appKey, 3);
            PushResult result = jpushClient.sendPush(payloadtag);
            msgId = result.ERROR_CODE_OK;
        } catch (APIConnectionException e) {
            msgId=e.getDoneRetriedTimes();
            return msgId;
        } catch (APIRequestException e) {

            msgId=e.getErrorCode();
            return msgId;
        }
        return msgId;
    }

    /**
     * 向指定组发送消息 ios
     *
     * @param tag
     *            组名称
     * @return 消息id
     */
    public Long sendPushTagios(Set<String> tag, String message,
            String title, String type,String userNo) {

        PushPayload payloadtag = buildPushObject_android_tags_alertWithTitle(
                tag, message, title, type,userNo);
        long msgId = 0;
        try {
            jpushClient = new JPushClient(masterSecret, appKey, 3);
            PushResult result = jpushClient.sendPush(payloadtag);
            msgId = result.ERROR_CODE_OK;
        } catch (APIConnectionException e) {
            msgId=e.getDoneRetriedTimes();
            return msgId;
        } catch (APIRequestException e) {
            msgId=e.getErrorCode();
            
            return msgId;
        }
        return msgId;
    }

    /**
     * 下列封装了三种获得消息推送对象(PushPayload)的方法
     * buildPushObject_android_alias_alertWithTitle、
     * buildPushObject_android_tag_alertWithTitle、 buildPushObject_all_all_alert
     */
    public PushPayload buildPushObject_android_alias_alertWithTitle(
            Set<String> alias) {
        return PushPayload.newBuilder().setPlatform(Platform.android())
                .setAudience(Audience.alias(alias))
                .setNotification(Notification.android(message, title, null))
                .build();
    }

    /**
     *  别名推送 点对点 返回type区分方法  安卓只接受自定义消息
     * @param alias
     * @param message
     * @param title
     * @param type
     * @param userNo
     * @return
     */
    public PushPayload buildPushObject_android_alias_alertWithTitle(
            String alias, String message, String title, String type,String userNo,String touserNo,String res) {

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = format.format(new Timestamp(new Date().getTime()));
        return PushPayload
                .newBuilder()
                .setPlatform(Platform.android())
                .setAudience(Audience.alias(alias))
                .setMessage(
                        Message.newBuilder().setTitle(title)
                                .setMsgContent(message).addExtra("alias", alias).addExtra("title", title).addExtra("type", type)
                                .addExtra("time", time).addExtra("userNo", userNo).addExtra("touserNo", userNo).addExtra("result", res).build()).build();

    }

    /**
     *  别名推送 点对点 返回type区分方法    ios只接受通知
     * @param alias
     * @param message
     * @param title
     * @param type
     * @param userNo
     * @return
     */
    public PushPayload buildPushObject_ios_alias_alertWithTitle(
            String alias, String message, String title, String type,String userNo,String touserNo,String res) {

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = format.format(new Timestamp(new Date().getTime()));
        return PushPayload
                .newBuilder().setOptions(Options.newBuilder().setApnsProduction(true).build())
                .setPlatform(Platform.ios())
                .setAudience(Audience.alias(alias)).setNotification(
                        Notification
                        .newBuilder()
                        .setAlert("收到了一条小纸条").addPlatformNotification(
                                IosNotification
                                .newBuilder()
                                .incrBadge(0)
                                .build())
                        .addPlatformNotification(
                                IosNotification
                                        .newBuilder().addExtra("alias", alias).addExtra("touserNo", touserNo)                                        
                                        .addExtra("type",
                                                type).addExtra("time", time).addExtra("userNo", userNo).addExtra("message", message).addExtra("title", title).addExtra("result", res).build())
                        .build()).build();
        /*.setMessage(
                Message.newBuilder().setTitle(title)
                        .setMsgContent(message).addExtra("type", type)
                        .addExtra("time", time).addExtra("userNo", userNo).build())
                        
                        .incrBadge(1)
*/
    }
   
    
    public PushPayload buildPushObject_all_all_alert() {
        return PushPayload.alertAll(message);
    }

    // //

    public static PushPayload buildPushObject_all_alias_alert() {
        return PushPayload.newBuilder().setPlatform(Platform.all())// 设置接受的平台
                .setAudience(Audience.all())// Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
                .setNotification(Notification.alert(ALERT)).build();
    }

    public PushPayload buildPushObject_android_tag_alertWithTitle(String tag,
            String message, String title) {
        return PushPayload.newBuilder().setPlatform(Platform.android())
                .setAudience(Audience.tag(tag))
                .setNotification(Notification.android(message, title, null))
                .build();
    }

    public static PushPayload buildPushObject_android_and_ios(String tag,
            String content, String title) {
        return PushPayload
                .newBuilder()
                .setPlatform(Platform.android_ios())
                .setAudience(Audience.tag(tag))
                .setNotification(
                        Notification
                                .newBuilder()
                                .setAlert(content)
                                .addPlatformNotification(
                                        AndroidNotification.newBuilder()
                                                .setTitle(title).build())
                                .addPlatformNotification(
                                        IosNotification
                                                .newBuilder()
                                                .incrBadge(1)
                                                .addExtra("extra_key",
                                                        "extra_value").build())
                                .build()).build();
    }

    public static PushPayload buildPushObject_ios_tagAnd_alertWithExtrasAndMessage() {
        return PushPayload
                .newBuilder()
                .setPlatform(Platform.ios())
                .setAudience(Audience.tag_and("tag1", "tag_all"))
                .setNotification(
                        Notification
                                .newBuilder()
                                .addPlatformNotification(
                                        IosNotification.newBuilder()
                                                .setAlert(ALERT).setBadge(5)
                                                .setSound("happy")
                                                .addExtra("from", "JPush")
                                                .build()).build())
                .setMessage(Message.content(MSG_CONTENT))
                .setOptions(
                        Options.newBuilder().setApnsProduction(true).build())
                .build();
    }

    public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras() {
        return PushPayload
                .newBuilder()
                .setPlatform(Platform.android_ios())
                .setAudience(
                        Audience.newBuilder()
                                .addAudienceTarget(
                                        AudienceTarget.tag("tag1", "tag2"))
                                .addAudienceTarget(
                                        AudienceTarget
                                                .alias("alias1", "alias2"))
                                .build())
                .setMessage(
                        Message.newBuilder().setMsgContent(MSG_CONTENT)
                                .addExtra("from", "JPush").build()).build();
    }

    /**
     * 对安装此应用通过绑定标识符(tag)来发送通知消息
     *
     * @param msgTitle
     *            通知标题
     * @param msgContent
     *            通知内容
     * @param userId
     *            绑定标识符(tag)
     * @param tag
     *            标识是发送通知还是消息(通知是在客户端通知栏弹出通知、消息是直接在页面上更新UI)
     * @return true 成功 false 失败
     */
    /*
     * public static boolean sendTagUserPush(String msgTitle, String msgContent,
     * String userId, int tag) { // 在实际业务中,建议 sendNo 是一个你自己的业务可以处理的一个自增数字。 //
     * 除非需要覆盖,请确保不要重复使用。详情请参考 API 文档相关说明。 int sendNo = getRandomSendNo();
     *
     * // IOS设备扩展参数, 设置badge,设置声音 // Mapextra = new HashMap(); // IOSExtra
     * iosExtra = new IOSExtra(10, "WindowsLogonSound.wav"); // extra.put("ios",
     * iosExtra);
     *
     * MessageResult msgResult = null;
     *
     * switch (tag) { case NOTIFICATION: // 对指定标识(tag)用户发送通知 msgResult =
     * jpush.sendNotificationWithTag(sendNo, userId, msgTitle, msgContent);
     * break; case MESSAGE: // 对指定标识(tag)用户发送消息 msgResult =
     * jpush.sendCustomMessageWithTag(sendNo, userId, msgTitle, msgContent);
     * break; default: break; }
     *
     * if (null != msgResult) { System.out.println("服务器返回数据: " +
     * msgResult.toString()); if (msgResult.getErrcode() ==
     * ErrorCodeEnum.NOERROR.value()) { System.out.println(String.format(
     * "发送成功, sendNo= %s,messageId= %s", msgResult.getSendno(),
     * msgResult.getMsg_id())); return true; } else {
     * System.out.println("发送失败, 错误代码=" + msgResult.getErrcode() + ", 错误消息=" +
     * msgResult.getErrmsg()); switch (msgResult.getErrcode()) { case 10:
     * System.out.println("系统内部错误"); break; case 3001:
     * System.out.println("HTTP Basic authorization 失败"); break; case 3002:
     * System.out.println("msg_ids 参数不存在"); break;
     *
     * default: break; } return false; } } else { System.out.println("无法获取数据");
     * return false; }
     *
     * }
     */
    /**
     * 保持 sendNo 的唯一性是有必要的 It is very important to keep sendNo unique.
     *
     * @return sendNo
     */
    public static int getRandomSendNo() {
        final int MAX = Integer.MAX_VALUE;
        final int MIN = (int) MAX / 2;
        return (int) (MIN + Math.random() * (MAX - MIN));
    }

    /**
     * 向所有人发送消息
     *
     * @return 消息id
     */
    public long sendPushAll() {
        PushPayload payload = buildPushObject_all_all_alert();
        long msgId = 0;
        try {
            PushResult result = jpushClient.sendPush(payload);
            msgId = result.msg_id;
        } catch (APIConnectionException e) {
            // TODO Auto-generated catch block
            // LOG.error("Connection error. Should retry later. ", e);
        } catch (APIRequestException e) {
            // LOG.info("HTTP Status: " + e.getStatus());
            msgId = e.getMsgId();
        }
        return msgId;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值