• 借光推送接口


    1.极光推送接口

    主要类:根类:IPush

    import java.util.List;

    public interface IPush {

        public void pushToUser(String userId, PushEntity pushEntity);

        public void pushToUserList(List<String> userIdList, PushEntity pushEntity);

        public void pushToDevice(List<String> deviceTokenList, PushEntity pushEntity);

        public void pushToApp(PushEntity pushEntity);
    }

    实现类两种,平台不同,实现类也不同

    JPushAndroid  

    import java.util.List;

    import org.apache.commons.lang.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;

    import cn.jpush.api.common.DeviceType;

    @Component
    public class JPushAndroid implements IPush {

        @Autowired
        private JPushService jPushService;

        public void pushToApp(PushEntity pushEntity) {
            jPushService.sendNotification2App(pushEntity, DeviceType.Android);
        }

        public void pushToUser(String userId, PushEntity pushEntity) {

            if (StringUtils.isNotBlank(userId)) {
                jPushService.sendNotification2Alias(userId, pushEntity, DeviceType.Android);
            }
        }

        public void pushToUserList(List<String> userIdList, PushEntity pushEntity) {
            if (userIdList != null && userIdList.size() > 0) {
                for (String userId : userIdList) {
                    if (StringUtils.isNotBlank(userId)) {
                        pushToUser(userId, pushEntity);
                    }
                }
            }
        }

        public void pushToDevice(List<String> deviceTokenList, PushEntity pushEntity) {

            if (deviceTokenList != null && deviceTokenList.size() > 0) {

                for (String deviceToken : deviceTokenList) {
                    if (StringUtils.isNotBlank(deviceToken)) {
                        jPushService.sendNotification2Reg(deviceToken, pushEntity, DeviceType.Android);
                    }
                }
            }
        }

    }

    JPushIos

    import java.util.List;

    import org.apache.commons.lang.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;

    import cn.jpush.api.common.DeviceType;

    @Component
    public class JPushIOS implements IPush {

        @Autowired
        private JPushService jPushService;

        public void pushToApp(PushEntity pushEntity) {
            jPushService.sendNotification2App(pushEntity, DeviceType.IOS);
        }

        public void pushToUser(String userId, PushEntity pushEntity) {

            if (StringUtils.isNotBlank(userId)) {
                jPushService.sendNotification2Alias(userId, pushEntity, DeviceType.IOS);
            }
        }

        public void pushToUserList(List<String> userIdList, PushEntity pushEntity) {
            if (userIdList != null && userIdList.size() > 0) {
                for (String userId : userIdList) {
                    if (StringUtils.isNotBlank(userId)) {
                        pushToUser(userId, pushEntity);
                    }
                }
            }
        }

        /**
         * 根据设备列表推送
         */
        public void pushToDevice(List<String> deviceTokenList, PushEntity pushEntity) {

            if (deviceTokenList != null && deviceTokenList.size() > 0) {

                for (String deviceToken : deviceTokenList) {
                    if (StringUtils.isNotBlank(deviceToken)) {
                        jPushService.sendNotification2Reg(deviceToken, pushEntity, DeviceType.IOS);
                    }
                }
            }
        }

    }

    IPush直接实现类

    JPushService

    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import org.apache.commons.lang.StringUtils;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;

    import cn.jpush.api.JPushClient;
    import cn.jpush.api.common.DeviceType;
    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.AndroidNotification;
    import cn.jpush.api.push.model.notification.IosNotification;
    import cn.jpush.api.push.model.notification.Notification;

    import com.xcecs.wifi.provider.utils.PropertyUtils;
    import com.xcecs.wifi.provider.utils.SpringUtils;
    import com.xcecs.wifi.provider.utils.StringUtilsEx;

    @Component
    public class JPushService {

        private Log logger = LogFactory.getLog(JPushService.class);

        @Autowired
        private MobilePushService mobilePushService;

        public void sendNotification2App(PushEntity pushEntity, DeviceType platform) {

            PushPayload.Builder payloadBuilder = PushPayload.newBuilder();
            payloadBuilder.setAudience(Audience.all());

            send(pushEntity, payloadBuilder, platform);
        }

        public void sendNotification2Tag(String tag, PushEntity pushEntity, DeviceType platform) {

            PushPayload.Builder payloadBuilder = PushPayload.newBuilder();
            payloadBuilder.setAudience(Audience.tag(tag));

            send(pushEntity, payloadBuilder, platform);
        }

        public void sendNotification2Alias(String alias, PushEntity pushEntity, DeviceType platform) {

            PushPayload.Builder payloadBuilder = PushPayload.newBuilder();
            payloadBuilder.setAudience(Audience.alias(alias.replace("-", "")));

            send(pushEntity, payloadBuilder, platform);
        }

        public void sendNotification2Reg(String regId, PushEntity pushEntity, DeviceType platform) {

            PushPayload.Builder payloadBuilder = PushPayload.newBuilder();
            payloadBuilder.setAudience(Audience.registrationId(regId));

            send(pushEntity, payloadBuilder, platform);
        }

        private void send(PushEntity pushEntity, PushPayload.Builder payloadBuilder, DeviceType deviceType) {

            try {
                List<String[]> JpushInfoList = mobilePushService.getJpushKeyInfo(pushEntity.getJpushApiMasterSecret(),
                        pushEntity.getJpushAppKey());

                // 如果配置mobile.notify.ios.production=false,则是开发模式
                boolean iosMode = true;
                if (StringUtils.isNotBlank(PropertyUtils.getProperty("mobile.notify.ios.production"))
                        && "false".equals(PropertyUtils.getProperty("mobile.notify.ios.production").trim())) {
                    iosMode = false;
                }

                // 设置平台
                payloadBuilder.setPlatform(deviceType.equals(DeviceType.IOS) ? Platform.ios() : Platform.android());

                Map<String, Object> extrasMap = new HashMap<String, Object>();

                // 新的模式,只需要传入type与value
                if (StringUtils.isNotBlank(pushEntity.getType())) {
                    extrasMap.put("type", pushEntity.getType());
                }

                if (StringUtils.isNotBlank(pushEntity.getValue())) {
                    extrasMap.put("value", pushEntity.getValue());
                }


                // 如果是IOS,设置平台特性
                if (deviceType.equals(DeviceType.IOS)) {

                    // IOS内容的长度限制
                    String notificationContent = pushEntity.getMsgContent();
                    if (StringUtils.isNotBlank(notificationContent) && notificationContent.getBytes().length > 70) {
                        notificationContent = StringUtilsEx.substringb(notificationContent, 70) + "...";
                    }

                    IosNotification.Builder iosNotificationBuilder = IosNotification.newBuilder().setAlert(notificationContent).setBadge(1)
                            .setSound("default");

                    for (String key : extrasMap.keySet()) {
                        iosNotificationBuilder.addExtra(key, String.valueOf(extrasMap.get(key)));
                    }

                    payloadBuilder.setNotification(Notification.newBuilder().addPlatformNotification(iosNotificationBuilder.build()).build());
                } else {

                    AndroidNotification.Builder androidNotificationBuilder = AndroidNotification.newBuilder()
                            .setAlert(pushEntity.getMsgContent()).setTitle(pushEntity.getMsgTitle());

                    for (String key : extrasMap.keySet()) {
                        androidNotificationBuilder.addExtra(key, String.valueOf(extrasMap.get(key)));
                    }

                    payloadBuilder.setNotification(Notification.newBuilder().addPlatformNotification(androidNotificationBuilder.build())
                            .build());
                }

                PushPayload pushPayload = payloadBuilder.build();

                for (String[] jpushInfo : JpushInfoList) {
                    try {
                        JPushClient jPushClient = new JPushClient(jpushInfo[0], jpushInfo[1], iosMode,
                                (pushEntity.getJpushTimeToLive() == null ? 86400 : pushEntity.getJpushTimeToLive()));
                        jPushClient.sendPush(pushPayload);
                    } catch (Exception e) {

                        // 个推时如果手机端没有注册用户,不打错误日志
                        if (e.getMessage().indexOf(""code": 1011") == -1) {
                            logger.error("JPUSH推送消息时发生异常:[" + e.getMessage() + "]", e);
                        }
                    }
                }
            } catch (Exception e) {
                if (e.getMessage().indexOf(""code": 1011") == -1) {
                    logger.error("JPUSH推送消息时发生异常:[" + e.getMessage() + "]", e);
                }
            }
        }

    }

    读取配置的类MobilePushService

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import org.apache.commons.lang.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Component;

    import com.xcecs.wifi.provider.utils.ServiceException;

    @Component
    public class MobilePushService {

        @Autowired
        private JdbcTemplate jdbcTemplate;

        
        /*********************************** 内部使用接口 ******************************/


        // 0:IOS,1:android
        protected static Integer getPlatformWithDeviceToken(String deviceToken) {
            return (deviceToken.length() == 64) ? 0 : 1;
        }

        /**
         * 返回API MasterSecret,AppKey
         * @param appid
         * @return
         */
        protected List<String[]> getJpushKeyInfo(String apiMasterSecret, String appKey) {

            List<Map<String, Object>> resultList = null;

            List<String[]> resultA = new ArrayList<String[]>();

            try {

                // 如果设定了自定义key,则使用自定义,否则进行数据库查询
                if (StringUtils.isNotBlank(apiMasterSecret) && StringUtils.isNotBlank(appKey)) {
                    resultA.add(new String[] { apiMasterSecret, appKey });
                } else {
                    resultList = jdbcTemplate.queryForList("select * from cpt_notify_jpush where status = 1",
                            new Object[] {});
                    

                    if (resultList != null && resultList.size() > 0) {
                        for (Map<String, Object> result : resultList) {
                            resultA.add(new String[] { (String) result.get("api_master_secret"), (String) result.get("app_key") });
                        }
                    }
                }

            } catch (Exception e) {
            }

            if (resultA.size() == 0) {
                throw new ServiceException("请配置好推送的APPKEY");
            }

            return resultA;
        }

    }

    推送实体 PushEntity

    import java.io.Serializable;
    import java.util.HashMap;
    import java.util.Map;

    public class PushEntity implements Serializable {

        /**
         *
         */
        private static final long serialVersionUID = 1L;

        // jpush apiMasterSecret
        private String jpushApiMasterSecret;

        // jpush appkey
        private String jpushAppKey;

        // jpush timeToLive
        private Long jpushTimeToLive;

        // 消息标题
        private String msgTitle;

        // 消息内容
        private String msgContent;

        // 新消息的类型
        private String type;

        // 新消息的值
        private String value;
        
        private String platform;

        public String getPlatform() {
            return platform;
        }

        public void setPlatform(String platform) {
            this.platform = platform;
        }
        

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public String getMsgTitle() {
            return msgTitle;
        }

        public void setMsgTitle(String msgTitle) {
            this.msgTitle = msgTitle;
        }

        public String getMsgContent() {
            return msgContent;
        }

        public void setMsgContent(String msgContent) {
            this.msgContent = msgContent;
        }

        public String getJpushApiMasterSecret() {
            return jpushApiMasterSecret;
        }

        public void setJpushApiMasterSecret(String jpushApiMasterSecret) {
            this.jpushApiMasterSecret = jpushApiMasterSecret;
        }

        public String getJpushAppKey() {
            return jpushAppKey;
        }

        public void setJpushAppKey(String jpushAppKey) {
            this.jpushAppKey = jpushAppKey;
        }

        public Long getJpushTimeToLive() {
            return jpushTimeToLive;
        }

        public void setJpushTimeToLive(Long jpushTimeToLive) {
            this.jpushTimeToLive = jpushTimeToLive;
        }

    }

    直接d调用JPushService 的方法就行了,appkey,master secret配置好就行了

    我真的很想把我写的代码与你分享
  • 相关阅读:
    python2.7 pip
    opencv
    运维url收集
    转 string和byte[]的转换 (C#)
    Thrift
    Oracle AWR
    并发编程
    LED相关
    java mail 使用 gmail smtp 发送邮件
    jquery动画总结
  • 原文地址:https://www.cnblogs.com/zhazhenyu1992/p/6052198.html
Copyright © 2020-2023  润新知