import cn.hutool.core.util.StrUtil; import com.mianze.cms.haoxuan.constant.Constants; import com.tencent.xinge.XingeApp; import com.tencent.xinge.bean.*; import com.tencent.xinge.push.app.PushAppRequest; import io.netty.util.internal.StringUtil; import lombok.extern.slf4j.Slf4j; import org.json.JSONObject; import java.net.URLEncoder; import java.text.Annotation; import java.text.SimpleDateFormat; import java.util.ArrayList; @Slf4j public class XingeAppUtil { private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static Environment env; /** * 构造android消息 * @param title * @param content * @return */ public static Message buildAndMessge(String title , String content, Integer code, String url)throws Exception{ if(code == null){ code = 0; } MessageAndroid messageAndroid = new MessageAndroid(); ClickAction action = new ClickAction(); action.setAction_type(ClickAction.TYPE_INTENT); String paramUrl; if(code == 1){ String uri = URLEncoder.encode(url, "utf-8"); paramUrl = "code=" + code + "&url=" + uri; }else{ paramUrl = "code=" + code; } action.setIntent(StrUtil.format("
xgscheme://com.xg.push/notify_detail?{}
",paramUrl)); messageAndroid.setAction(action); Message message = new Message(); message.setTitle(title); message.setContent(content); message.setAndroid(messageAndroid); return message; } /** * 构造ios消息 * @param title * @param content * @return */ public static Message buildIosMessge(String title , String content, int code, String url)throws Exception{ MessageIOS messageIOS = new MessageIOS(); Aps aps = new Aps(); Alert alert = new Alert(); alert.setTitle(title); alert.setBody(content); aps.setAlert(alert); aps.setBadge_type(1); messageIOS.setAps(aps); JSONObject custom = new JSONObject(); custom.put("code",String.valueOf(code)); custom.put("url",url); messageIOS.setCustom(custom.toString()); Message msg = new Message(); msg.setTitle(title); msg.setContent(content); msg.setIos(messageIOS); return msg; } /** * 发送ios推送(全量) * @param title * @param content */ public static void sendIosByAll(String title,String content,int code,String url,int appId,String time){ try { XingeApp app = buildIosApp(appId); Message msg = buildIosMessge(title,content,code,url); PushAppRequest request = buildRequestByAll(msg, Platform.ios,time); if(env != null){ request.setEnvironment(env); } log.info("request =" + request.toString() ); JSONObject response = app.pushApp(request.toString()); log.info("response = [" + response + "]"); } catch (Exception ex) { ex.printStackTrace(); } } /** * 发送ios推送 * @param title * @param content */ public static void sendIos(String title,String content,int code,String url,int appId,ArrayList list){ //没有参数不执行推送 if(list == null || list.size() <= 0){ return ; } try { XingeApp app = buildIosApp(appId); Message msg = buildIosMessge(title,content,code,url); AudienceType type ; if(list.size() <= 1){ type = AudienceType.account; }else { type = AudienceType.account_list; } PushAppRequest request = buildRequest(msg, Platform.ios,type,list,null); if(env != null){ request.setEnvironment(env); } log.info("request = [" + request + "]"); JSONObject response = app.pushApp(request.toString()); log.info("response = [" + response + "]"); } catch (Exception ex) { ex.printStackTrace(); } } /** * 发送android推送 * @param title * @param content */ public static void sendAnd(String title,String content,String url,int code,int appId,ArrayList list){ //没有参数不执行推送 if(list == null || list.size() <= 0){ return ; } try { XingeApp app = buildAndroidApp(appId); Message msg = buildAndMessge(title,content,code,url) ; AudienceType type; if(list.size() == 1){ type = AudienceType.account; }else { type = AudienceType.account_list; } PushAppRequest request = buildRequest(msg, Platform.android,type,list,null); System.out.println("request:"+request.toString()); JSONObject response = app.pushApp(request); System.out.println("response = [" + response + "]"); } catch (Exception ex) { ex.printStackTrace(); } } /** * 发送(全量) * @param title * @param content * @param url * @param code * @param appId * @param time */ public static void sendAll(String title,String content,String url,int code,int appId,String time){ sendAndByAll(title,content,url,code,appId,time); sendIosByAll(title,content,code,url,appId,time); } /** * 发送(多用户) * @param title * @param content * @param url * @param code * @param appId * @param andlist * @param iosList */ public static void send(String title,String content,String url,int code,int appId,ArrayList andlist,ArrayList iosList){ sendAnd(title,content,url,code,appId,andlist); sendIos(title,content,code,url,appId,iosList); } /** * 发送android推送(全量) * @param title * @param content */ public static void sendAndByAll(String title,String content,String url,int code,int appId,String time){ try { XingeApp app = buildAndroidApp(appId); Message msg = buildAndMessge(title,content,code,url) ; PushAppRequest request = buildRequestByAll(msg, Platform.android,time); System.out.println("request =" + request.toString() ); JSONObject response = app.pushApp(request.toString()); System.out.println("response = [" + response + "]"); } catch (Exception ex) { ex.printStackTrace(); } } /** * 构造request对象 * @param msg * @param platform * @param type * @param list * @param time * @return * @throws Exception */ private static PushAppRequest buildRequest(Message msg, Platform platform, AudienceType type, ArrayList list, String time)throws Exception{ PushAppRequest request = new PushAppRequest(); request.setMessage(msg); request.setPlatform(platform); request.setMessage_type(MessageType.notify); if(type == AudienceType.account || type == AudienceType.account_list){ request.setAudience_type(type); request.setAccount_list(list); } if(!StringUtil.isNullOrEmpty(time)){ request.setSend_time(time); } return request; } private static PushAppRequest buildRequestByAll(Message msg, Platform platform, String time)throws Exception{ return buildRequest(msg,platform, AudienceType.all,null,time); } private static PushAppRequest buildRequestByAll(Message msg, Platform platform)throws Exception{ return buildRequest(msg,platform, AudienceType.all,null,null); } /** * 构造android * @param app * @return */ private static XingeApp buildAndroidApp(){ return new XingeApp(Constants.XINGEAPPID,Constants.XINGESECRETKEY); } private static XingeApp buildIosApp(){ return new XingeApp(Constants.XINGE_IOSAPPID,Constants.XINGE_IOS_SECRETKEY); } public static void setType(String type){ env = Environment.product; } public static void main(String[] args)throws Exception{ ArrayList<String> list = new ArrayList(); list.add("a0fe1e6aea164785ba802e0685f9cec3"); sendAnd("test","来自app的问候","https://www.baidu.com",2,2,list); } } maven仓库:
<!--信鸽推送sdk--> <dependency> <groupId>com.github.xingePush</groupId> <artifactId>xinge</artifactId> <version>1.2.0-SNAPSHOT</version> </dependency>
<repositories> <repository> <id>xingePush</id> <url>https://raw.githubusercontent.com/xingePush/maven-repository/snapshot/</url> </repository> </repositories>