極光消息推送工具類



import java.util.Map;


import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;


import cn.jpush.api.push.model.PushPayload.Builder;
import cn.jpush.api.JPushClient;
import cn.jpush.api.common.APIConnectionException;
import cn.jpush.api.common.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;


/**
 * 
 * @ClassName: MessagePushUtil
 * @Description: TODO(消息推送工具類)
 * @author llj
 * @date 2015年12月22日 下午2:36:45
 *
 */
public class MessagePushUtil{
protected static Log LOG = LogFactory.getLog(MessagePushUtil.class);
private static final String MASTER_SECRET = "";
private static final String APP_KEY = "";
private static PushPayload pushPayload ;
private static Builder builder; 
static {
builder = PushPayload.newBuilder();
pushPayload = builder
.setNotification(Notification.alert(""))
.setAudience(Audience.all())
.setPlatform(Platform.all())
.setOptions(Options.newBuilder().setTimeToLive(0L).build())
.build();
}
public static final String BEEN_CONCERNED_ALERT = "您有一個新粉絲";

public static final String SOUND = "default.mp3";

public static final int BADGE = 1;
/**

* @Title: pushMessage 
* @Description: TODO(推送消息) 
* @param @param json
* @param @return    設定文件 
* @return HttpResponse    返回類型 
* @throws
*/
public static PushResult sendPush(PushPayload payload) throws APIConnectionException, APIRequestException{
JPushClient jPushClient = new JPushClient(MASTER_SECRET, APP_KEY);
return jPushClient.sendPush(payload);
}

/** 
* @Title: sendPushTryCatch 
* @Description: try catch 推送
* @param @param payload
* @param @param logger
* @param @return    設定文件 
* @return String    返回類型 
* @throws 
*/
public static void sendPushTryCatch(PushPayload payload, Log logger) {
JPushClient jPushClient = new JPushClient(MASTER_SECRET, APP_KEY);
try {
PushResult pushResult = jPushClient.sendPush(payload);
logger.info("返回結果" + pushResult);
} catch (APIConnectionException e) {
logger.error("連接錯誤,稍後嘗試" + e);
} catch (APIRequestException e) {
logger.error("極光推送內部錯誤", e);
logger.info("網絡請求狀態" + e.getStatus());
logger.info("錯誤狀態碼" + e.getErrorCode());
logger.info("錯誤信息" + e.getErrorMessage());
logger.info("信息ID" + e.getMsgId());
logger.info("極光推送錯誤信息:" + e.getErrorMessage());
}
}

/**

* @Title: buildPushObjectAllAllAlert 
* @Description: TODO(快捷地構建推送對象:所有平臺,所有設備,內容爲 alert 的通知) 
* @param @param alert
* @param @return    設定文件 
* @return PushPayload    返回類型 
* @throws
*/
@SuppressWarnings("static-access")
public static PushPayload buildPushObjectAllAllAlert(String alert) {
   return pushPayload.alertAll(alert);
}

/** 
* @Title: buildPushObjectAliasAlert 
* @Description: TODO(所有平臺,推送目標是別名爲 alias,通知內容爲 alert) 
* @param @param alert
* @param @param alias
* @param @return    設定文件 
* @return PushPayload    返回類型 
* @throws 
*/
public static PushPayload buildPushObjectAliasAlert(String alert, String... alias) {
return builder
.setPlatform(Platform.android_ios())
.setAudience(Audience.alias(alias))
.setNotification(Notification.newBuilder()
.setAlert(alert)
.addPlatformNotification(
AndroidNotification.newBuilder()
.addExtra("sign", "5")
.build())
.addPlatformNotification(IosNotification.newBuilder()
.addExtra("sign", "5")
.build())
.build())
.build();
}
/**

* @Title: buildPushObjectIos 
* @Description: TODO(iOS推送 badge  sound) 
* @param @param alias
* @param @param alert
* @param @param badge
* @param @return    設定文件 
* @return PushPayload    返回類型 
* @throws
*/
public static PushPayload buildPushObjectIosAndroid(Map<String, String> params,
    String[] alias, String alert, int badge, String sound, String msgContent) {
       return builder
               .setPlatform(Platform.android_ios())
               .setAudience(Audience.alias(alias))
               .setNotification(Notification.newBuilder()
               .addPlatformNotification(IosNotification.newBuilder()
               .setAlert(alert)
               .setBadge(badge)
               .addExtras(params)
               .setSound(sound)
               .build())
               .addPlatformNotification(AndroidNotification.newBuilder()
               .setAlert(alert)
               .addExtras(params)
               .build())
               .build())
               .setMessage(Message.newBuilder()
               .setMsgContent(msgContent)
               .build())
               .build();
   }
 
    /** 
    * @Title: buildPushObjectAllAliasAlert 
    * @Description: TODO(所有平臺,推送目標是別名爲 alias,通知標題爲 title,通知內容爲 alert) 
    * @param @param params
    * @param @param alias
    * @param @return    設定文件 
    * @return PushPayload    返回類型 
    * @throws 
    */
public static PushPayload buildPushObjectAllAliasAlert(Map<String, String> params, String alert, String title, String... alias) {
    return builder
                .setPlatform(Platform.android_ios()) 
                .setAudience(Audience.alias(alias))  
                .setNotification(Notification.newBuilder()  
                        .setAlert(alert)
                        .addPlatformNotification(AndroidNotification.newBuilder()  
                                .setTitle(title)
                                .addExtras(params)
                                .build())  
                        .addPlatformNotification(IosNotification.newBuilder()
                        .addExtras(params)
                                .build())  
                        .build())  
                .build();  
    }


    /** 
    * @Title: buildPushObjectAndroidTagAlertWithTitle 
    * @Description: TODO(平臺是 Android,目標是 tag 爲 tag 的設備,內容是 Android 通知 alert,並且標題爲 title) 
    * @param @param tag
    * @param @param alert
    * @param @param title
    * @param @return    設定文件 
    * @return PushPayload    返回類型 
    * @throws 
    */
public static PushPayload buildPushObjectAndroidTagAlertWithTitle(String tag, String alert, String title) {
        return builder
                .setPlatform(Platform.android())
                .setAudience(Audience.tag(tag))
                .setNotification(Notification.android(alert, title, null))
                .build();
    }
    
    /** 
    * @Title: buildPushObjectIosTagAndAlertWithExtrasAndMessage 
    * @Description: TODO(
    * 構建推送對象:平臺是 iOS,推送目標是 tag, tagAll 的交集,
    * 推送內容同時包括通知與消息 - 通知信息是 alert,角標數字爲 number,
    * 消息內容是 msgContent。
    * 通知是 APNs 推送通道的,消息是 JPush 應用內消息通道的。
    * APNs 的推送環境是“開發”(如果不顯式設置的話,Library 會默認指定爲開發)
    * True 表示推送生產環境,False 表示要推送開發環境
    *  )
    * @param @param tag
    * @param @param tagAll
    * @param @param number
    * @param @param alert
    * @param @param msgContent
    * @param @return    設定文件 
    * @return PushPayload    返回類型 
    * @throws 
    */
    public static PushPayload buildPushObjectIosTagAndAlertWithExtrasAndMessage(
    String tag, String tagAll, int number, String alert, String msgContent) {
        return builder
        .setPlatform(Platform.ios())
                .setAudience(Audience.tag_and(tag, tagAll))
                .setNotification(Notification.newBuilder()
                        .addPlatformNotification(IosNotification.newBuilder()
                                .setAlert(alert)
                                .setBadge(number)
                                .build())
                        .build())
                 .setMessage(Message.content(msgContent))
                 .setOptions(Options.newBuilder()
                         .setApnsProduction(false)
                         .build())
                 .build();
    }
    
    /** 
     * 構建推送對象:平臺是 Andorid 與 iOS,
    * 推送目標是 (tag1 與 tag2 的並集),
    * 推送內容是 - 內容爲 msgContent 的消息
    * @Title: buildPushObjectIosAudienceMoreMessageWithExtras 
    * @Description: TODO() 
    * @param @param tag1
    * @param @param tag2
    * @param @param msgContent
    * @param @return    設定文件 
    * @return PushPayload    返回類型 
    * @throws 
    */
    public static PushPayload buildPushObjectIosAudienceMoreMessageWithExtras(
    String tag1, String tag2, String msgContent) {
        return builder
                .setPlatform(Platform.android_ios())
                .setAudience(Audience.newBuilder()
                        .addAudienceTarget(AudienceTarget.tag(tag1, tag2))
                        .build())
                .setMessage(Message.newBuilder()
                        .setMsgContent(msgContent)
                        .build())
                .build();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章