個推后臺工具類(java)

package com.push;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import com.gexin.rp.sdk.base.IIGtPush;

import com.gexin.rp.sdk.base.IPushResult;

import com.gexin.rp.sdk.base.impl.AppMessage;

import com.gexin.rp.sdk.base.impl.ListMessage;

import com.gexin.rp.sdk.base.impl.SingleMessage;

import com.gexin.rp.sdk.base.impl.Target;

import com.gexin.rp.sdk.base.notify.Notify;

import com.gexin.rp.sdk.base.payload.APNPayload;

import com.gexin.rp.sdk.base.payload.APNPayload.DictionaryAlertMsg;

import com.gexin.rp.sdk.base.uitls.AppConditions;

import com.gexin.rp.sdk.exceptions.RequestException;

import com.gexin.rp.sdk.http.IGtPush;

import com.gexin.rp.sdk.template.LinkTemplate;

import com.gexin.rp.sdk.template.NotificationTemplate;

import com.gexin.rp.sdk.template.RevokeTemplate;

import com.gexin.rp.sdk.template.TransmissionTemplate;

import com.gexin.rp.sdk.template.style.Style0;

import cn.hutool.core.bean.BeanUtil;

import cn.hutool.core.util.IdUtil;

import cn.hutool.core.util.StrUtil;

import cn.hutool.json.JSONUtil;

import lombok.extern.slf4j.Slf4j;

@Slf4j

public class AppPush {

private static String appId = "";

private static String appkey = "";

private static String masterSecret = "";

private static String host = "http://sdk.open.api.igexin.com/apiex.htm";

// 客服id

public static String CLIENT_ID = "1d1ac8e2517a3883a5433058442feeb8";

// public static String CLIENT_ID = "a719b8df76290b8e61d7aa1900cc32e8";

public void setAppId(String appId) {

AppPush.appId = appId;

}

public void setAppKey(String appKey) {

AppPush.appkey = appKey;

}

public void setMasterSecret(String masterSecret) {

AppPush.masterSecret = masterSecret;

}

//1.點擊通知打開應用模板 在通知欄顯示一條含圖標舞吭、標題等的通知,用戶點擊后激活您的應用-打開應用的首頁 對應接口

public static NotificationTemplate notificationTemplate(TemplateVO vo) {

NotificationTemplate template = new NotificationTemplate();

template.setAppId(appId);

template.setAppkey(appkey);

template.setTransmissionType(vo.getTransmissionType());

template.setTransmissionContent(JSONUtil.toJsonStr(vo.getTransmissionContent()));

// 設置ios通知樣式

template.setAPNInfo(APNPayload(vo));

// 安卓設置

Notify notify = new Notify();

notify.setTitle(vo.getTitle());

notify.setContent(vo.getText());

notify.setPayload(JSONUtil.toJsonStr(vo.getTransmissionContent()));

notify.setUrl(vo.getResUrl());

// 安卓第三方設置

String intent = StrUtil.format(

"intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;"

+ "package=com.tkgm.push;component=com.tkgm.push/io.dcloud.PandoraEntry;"

+ "S.UP-OL-SU=true;S.title={};S.content={};S.payload={};end",

vo.getTitle(), vo.getText(), vo.getTransmissionContent());

notify.setIntent(intent);

template.set3rdNotifyInfo(notify);

// 配置通知欄圖標

Style0 style = new Style0();

style.setLogoUrl(vo.getLogoUrl());

style.setText(vo.getText());

style.setLogo(vo.getLogo());

style.setTitle(vo.getTitle());

// 設置通知是否響鈴惕稻,震動再榄,或者

style.setRing(true);

style.setVibrate(true);

style.setClearable(true);

template.setStyle(style);

return template;

}

//2.點擊通知打開網(wǎng)頁模板 在通知欄顯示一條含圖標、標題等的通知襟诸,用戶點擊可打開您指定的網(wǎng)頁( iOS 不推薦使用該模板瓦堵,詳情請看 iOS 模板說明)

public static LinkTemplate linkTemplate(TemplateVO vo) {

LinkTemplate template = new LinkTemplate();

template.setAppId(appId);

template.setAppkey(appkey);

// 配置通知欄圖標

Style0 style = new Style0();

style.setLogoUrl(vo.getLogoUrl());

style.setText(vo.getText());

style.setLogo(vo.getLogo());

style.setTitle(vo.getTitle());

// 設置通知是否響鈴,震動歌亲,或者

style.setRing(true);

style.setVibrate(true);

style.setClearable(true);

template.setStyle(style);

// 設置打開的路徑

template.setUrl(vo.getLinkUrl());

return template;

}

//透傳消息模版

public static TransmissionTemplate transmissionTemplate(TemplateVO vo) {

// 生成模板

TransmissionTemplate template = new TransmissionTemplate();

template.setAppId(appId);

template.setAppkey(appkey);

// 配置透傳內容

template.setTransmissionType(vo.getTransmissionType());

template.setTransmissionContent(JSONUtil.toJsonStr(vo.getTransmissionContent()));

// 設置ios通知樣式

template.setAPNInfo(APNPayload(vo));

// 安卓設置

Notify notify = new Notify();

notify.setTitle(vo.getTitle());

notify.setContent(vo.getText());

notify.setPayload(JSONUtil.toJsonStr(vo.getTransmissionContent()));

notify.setUrl(vo.getResUrl());

// 安卓第三方設置

String intent = StrUtil.format(

"intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;"

+ "package=com.tkgm.push;component=com.tkgm.push/io.dcloud.PandoraEntry;"

+ "S.UP-OL-SU=true;S.title={};S.content={};S.payload={};end",

vo.getTitle(), vo.getText(), vo.getTransmissionContent());

notify.setIntent(intent);

template.set3rdNotifyInfo(notify);

return template;

}

private static APNPayload APNPayload(TemplateVO vo) {

APNPayload payload = new APNPayload();

// 通知消息

DictionaryAlertMsg alertMsg = new APNPayload.DictionaryAlertMsg();

alertMsg.setTitle(vo.getTitle());

alertMsg.setBody(vo.getText());

payload.setAlertMsg(alertMsg);

// 設置應用右上角數(shù)字菇用,用于提醒用戶未閱讀消息數(shù)量,支持在原有數(shù)字上的+陷揪、-操作

payload.setAutoBadge("+1");

// 推送直接帶有透傳數(shù)據(jù)

payload.setContentAvailable(0);

Map<String, Object> beanToMap = BeanUtil.beanToMap(vo.getTransmissionContent());

beanToMap.forEach((key, value) -> {

payload.addCustomMsg(key, value);

});

// 語音播報0:不 1:播報內容 2:自定義

payload.setVoicePlayType(0);

// 默認聲音

payload.setSound("default");

return payload;

}

public static void main(String[] args) {

String title = "重要提醒";

String text = "提醒信息,999請忽這個消息";

TemplateVO template = new TemplateVO();

template.setTitle(title);

template.setText(text);

TransmissionContent transmissionContent = new TransmissionContent();

// 輪播圖類型0:商品詳情 1:點擊沒有反應 2:首頁推薦 3:外部H5頁面 4.內部瀏覽器 5:許愿池

transmissionContent.setUuid(IdUtil.simpleUUID());

transmissionContent.setJumpType(3);

transmissionContent.setJumpUrl("http://www.baidu.com");

template.setTransmissionContent(transmissionContent);

template.setTransmissionType(2);

// 全部用戶

// pushMessageToApp(template, 1);

// 對單個推送消息

template.setClientId(CLIENT_ID);

pushMessageToSingle(template, 1);

}

//對單個?戶推送消息

public static boolean pushMessageToSingle(TemplateVO vo, int type) {

SingleMessage message = new SingleMessage();

message.setOffline(true);

// 離線有效時間惋鸥,單位為毫秒杂穷,可選

message.setOfflineExpireTime(24 * 3600 * 1000);

// 可選,1為wifi卦绣,0為不限制?絡環(huán)境耐量。根據(jù)?機處于的?絡情況,決定是否下發(fā)

message.setPushNetWorkType(0);

// 模板內容

switch (type) {

case 1:

message.setData(notificationTemplate(vo));

break;

case 2:

message.setData(linkTemplate(vo));

break;

case 4:

message.setData(transmissionTemplate(vo));

break;

}

// 用戶信息

Target target = new Target();

target.setAppId(appId);

target.setClientId(vo.getClientId());

target.setAlias(vo.getAlias());

IGtPush push = new IGtPush(host, appkey, masterSecret);

IPushResult result;

try {

result = push.pushMessageToSingle(message, target);

} catch (RequestException e) {

result = push.pushMessageToSingle(message, target, e.getRequestId());

log.error("單體推送異常", e);

}

log.info("單體推送返回結果:{}", result == null ? "推送無數(shù)據(jù)返回" : result.getResponse().toString());

if (result != null && "ok".equals(result.getResponse().get("")))

return true;

return false;

}

//對指定?戶列表推送消息

public static boolean pushMessageToList(TemplateVO vo, int type) {

ListMessage message = new ListMessage();

// 設置消息離線迎卤,并設置離線時間

message.setOffline(true);

// 離線有效時間拴鸵,單位為毫秒,可選

message.setOfflineExpireTime(24 * 1000 * 3600);

switch (type) {

case 1:

message.setData(notificationTemplate(vo));

break;

case 2:

message.setData(linkTemplate(vo));

break;

case 4:

message.setData(transmissionTemplate(vo));

break;

}

List<Target> targets = new ArrayList<Target>();

if (vo.getAliasList() != null && !vo.getAliasList().isEmpty()) {

vo.getAliasList().forEach(action -> {

Target target = new Target();

target.setAlias(action);

target.setAppId(appId);

targets.add(target);

});

}

if (vo.getClientIdList() != null && !vo.getClientIdList().isEmpty()) {

vo.getClientIdList().forEach(action -> {

Target target = new Target();

target.setClientId(action);

target.setAppId(appId);

targets.add(target);

});

}

IGtPush push = new IGtPush(host, appkey, masterSecret);

String taskId = push.getContentId(message);

IPushResult result = push.pushMessageToList(taskId, targets);

log.info("單體推送返回結果:{}", result == null ? "推送無數(shù)據(jù)返回" : result.getResponse().toString());

if (result != null && "ok".equals(result.getResponse().get("")))

return true;

return false;

}

//對指定應?群推消息

public static boolean pushMessageToApp(TemplateVO vo, int type) {

AppMessage message = new AppMessage();

// 設置消息離線蜗搔,并設置離線時間

message.setOffline(true);

// 離線有效時間劲藐,單位為毫秒,可選

message.setOfflineExpireTime(24 * 1000 * 3600);

switch (type) {

case 1:

message.setData(notificationTemplate(vo));

break;

case 2:

message.setData(linkTemplate(vo));

break;

case 4:

message.setData(transmissionTemplate(vo));

break;

}

// 推送給App的?標?戶需要滿?的條件

AppConditions cdt = new AppConditions();

if (null != vo.getAppIdList() && !vo.getAppIdList().isEmpty()) {

message.setAppIdList(vo.getAliasList());

} else {

List<String> appIdList = new ArrayList<>();

appIdList.add(appId);

message.setAppIdList(appIdList);

}

// 機類型

List<String> phoneTypeList = new ArrayList<String>();

// 省份

List<String> provinceList = new ArrayList<String>();

// 定義tag

List<String> tagList = new ArrayList<String>();

cdt.addCondition(AppConditions.PHONE_TYPE, phoneTypeList);

cdt.addCondition(AppConditions.REGION, provinceList);

cdt.addCondition(AppConditions.TAG, tagList);

message.setConditions(cdt);

IGtPush push = new IGtPush(host, appkey, masterSecret);

IPushResult result = null;

try {

result = push.pushMessageToApp(message);

} catch (Exception e) {

log.error("對指定應?群推消息推送失敗", e);

}

log.info("對指定應?群推消息推送返回結果:{}", result == null ? "推送無數(shù)據(jù)返回" : result.getResponse().toString());

if (result != null && "ok".equals(result.getResponse().get("")))

return true;

return false;

}

//消息撤回模版

public static void revokeToApp(String oldTaskId, boolean force) {

// 推送主類

IIGtPush push = new IGtPush(host, appkey, masterSecret);

AppMessage message = new AppMessage();

// 推送模版

RevokeTemplate template = new RevokeTemplate();

template.setAppId(appId);// 應?appid

template.setAppkey(appkey);// 應?appkey

template.setOldTaskId(oldTaskId);

template.setForce(force);

message.setData(template);

message.setOffline(true);

message.setOfflineExpireTime(1000 * 1000);

List<String> appIdList = new ArrayList<String>();

appIdList.add(appId);

message.setAppIdList(appIdList);

push.pushMessageToApp(message);

}

}




package com.push;

import java.io.Serializable;

import lombok.Data;

@Data

public class TransmissionContent implements Serializable {

private static final long serialVersionUID = 1L;

private String jumpUrl;

private String uuid;

private Integer jumpType;

}






package com.push;

import java.io.Serializable;

import java.util.List;

import com.gexin.rp.sdk.base.payload.MultiMedia.MediaType;

import lombok.Data;

@Data

public class TemplateVO implements Serializable {

private static final long serialVersionUID = 1L;

// 配置通知欄網(wǎng)絡圖標

private String logoUrl = "";

// 配置通知欄圖標

private String logo = "";

// 標題

private String title = "";

// 顯示的內容

private String text = "";

// 別名

private String alias = "";

// clientId

private String clientId = "";

// ios自定義菜單素材類型

private MediaType mediaType;

// ios自定義菜單素材下載地址

private String resUrl = "";

// 別名列表

private List<String> aliasList;

// clientId列表

private List<String> clientIdList;

// appId列表

private List<String> appIdList;

// 透傳消息設置 1:強制啟動應用 2:等待啟動應用

private int transmissionType = 2;

// 透傳消息內容

private TransmissionContent transmissionContent;

// 點擊打開的通知瀏覽器打開的url

private String linkUrl = "";

// 下載參數(shù)

// 通知欄標題

private String notyTitle = "";

// 通知欄內容

private String notyContrent = "";

// 通知欄Icon

private String notyIcon = "";

// 彈框標題

private String popTitle = "";

// 彈框內容

private String popContent = "";

// 彈框Icon

private String popImage = "";

// 彈框右

private String popButton2 = "";

// 彈框左

private String popButton1 = "";

// 下載標題

private String loadTitle = "";

// 下載地址

private String loadUrl = "";

// 下載Icon

private String loadIcon = "";

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末樟凄,一起剝皮案震驚了整個濱河市聘芜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缝龄,老刑警劉巖汰现,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叔壤,居然都是意外死亡瞎饲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門炼绘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗅战,“玉大人,你說我怎么就攤上這事俺亮⊥院矗” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵脚曾,是天一觀的道長东且。 經常有香客問我,道長本讥,這世上最難降的妖魔是什么珊泳? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮拷沸,結果婚禮上旨椒,老公的妹妹穿的比我還像新娘。我一直安慰自己堵漱,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布涣仿。 她就那樣靜靜地躺著勤庐,像睡著了一般示惊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愉镰,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天米罚,我揣著相機與錄音,去河邊找鬼丈探。 笑死录择,一個胖子當著我的面吹牛,可吹牛的內容都是我干的碗降。 我是一名探鬼主播隘竭,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼讼渊!你這毒婦竟也來了动看?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤爪幻,失蹤者是張志新(化名)和其女友劉穎菱皆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挨稿,經...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡仇轻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奶甘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篷店。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖甩十,靈堂內的尸體忽然破棺而出船庇,到底是詐尸還是另有隱情,我是刑警寧澤侣监,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布鸭轮,位于F島的核電站,受9級特大地震影響橄霉,放射性物質發(fā)生泄漏窃爷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一姓蜂、第九天 我趴在偏房一處隱蔽的房頂上張望按厘。 院中可真熱鬧,春花似錦钱慢、人聲如沸逮京。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽懒棉。三九已至草描,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間策严,已是汗流浹背穗慕。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妻导,地道東北人逛绵。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像倔韭,于是被迫代替她去往敵國和親术浪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內容

  • 所選依賴: 工具類:一狐肢、 package com.xxx.core.util.push.enums; /** 配置...
    Y_LY閱讀 1,885評論 0 2
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵勝奧閱讀 4,823評論 0 1
  • 英文文檔添吗,一開始我也是抗拒的,邊翻譯邊看份名,也就花費了1個小時基本就閱讀過了碟联,我的英文基礎其實很差。附上鏈接:鏈接:...
    lonecolonel閱讀 9,909評論 3 1
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,811評論 0 11
  • 彌撒本是天主教徒為祈禱真主而進行的虔誠的僵腺、認真的鲤孵、忠貞不二的祭祀祈禱。是一種美好生活的祝愿辰如、一種內心反省的克己普监。然...
    歲月如許閱讀 408評論 0 0