Преглед на файлове

修改消息推送逻辑

tianboguang преди 3 години
родител
ревизия
0333cae147
променени са 20 файла, в които са добавени 209 реда и са изтрити 623 реда
  1. 0 21
      4dkankan-utils-app-push/pom.xml
  2. 0 6
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/App.java
  3. 0 331
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/PushMessageConfig.java
  4. 0 86
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/UmengNotification.java
  5. 0 11
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/android/AndroidBroadcast.java
  6. 0 22
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/android/AndroidCustomizedcast.java
  7. 0 15
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/android/AndroidFilecast.java
  8. 0 16
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/android/AndroidGroupcast.java
  9. 2 1
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/AndroidNotification.java
  10. 0 2
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/android/AndroidUnicast.java
  11. 3 42
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/PushClient.java
  12. 89 0
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/common/UmengNotification.java
  13. 112 0
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/config/PushMessageConfig.java
  14. 0 12
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/ios/IOSBroadcast.java
  15. 0 23
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/ios/IOSCustomizedcast.java
  16. 0 15
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/ios/IOSFilecast.java
  17. 0 16
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/ios/IOSGroupcast.java
  18. 2 1
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/IOSNotification.java
  19. 0 2
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/ios/IOSUnicast.java
  20. 1 1
      4dkankan-utils-app-push/src/main/java/com/fdkankan/push/PushMsgUtil.java

+ 0 - 21
4dkankan-utils-app-push/pom.xml

@@ -33,27 +33,6 @@
             <artifactId>commons-lang3</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.aliyun</groupId>
-            <artifactId>aliyun-java-sdk-core</artifactId>
-            <version>4.0.3</version>
-        </dependency>
-        <dependency>
-            <groupId>com.aliyun</groupId>
-            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
-            <version>1.1.0</version>
-        </dependency>
-        <dependency>
-            <groupId>com.amazonaws</groupId>
-            <artifactId>aws-java-sdk</artifactId>
-            <version>1.11.327</version>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.mail</groupId>
-            <artifactId>javax.mail</artifactId>
-            <version>1.5.4</version>
-        </dependency>
-
-        <dependency>
             <groupId>com.google.firebase</groupId>
             <artifactId>firebase-admin</artifactId>
             <version>6.8.1</version>

+ 0 - 6
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/App.java

@@ -1,6 +0,0 @@
-package com.fdkankan.modeling.push;
-
-
-public class App {
-
-}

+ 0 - 331
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/PushMessageConfig.java

@@ -1,331 +0,0 @@
-package com.fdkankan.push;
-
-
-import cn.hutool.core.date.DateUtil;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.push.android.*;
-import com.fdkankan.push.ios.*;
-import lombok.extern.slf4j.Slf4j;
-
-import java.util.Date;
-
-@Slf4j
-public class PushMessageConfig {
-	private String appkey = null;
-	private String appMasterSecret = null;
-	private String timestamp = null;
-	private PushClient client = new PushClient();
-
-	public static final String ANDROID_KEY = "5ee71c03dbc2ec076dd488cb";
-	public static final String ANDROID_SECRET = "gzw4r8frbhq6eigxrvgjkdrm7wgtu83g";
-	public static final String IOS_KEY = "5ee71ca9978eea081640f22a";
-	public static final String IOS_SECRET = "tpuhyojch16pcha2qmpidlbnzkielv9w";
-
-	//转台双目使用
-	public static final String ANDROID_KEY_Z = "60efd777a6f90557b7b97c25";
-	public static final String ANDROID_SECRET_Z = "ll85ov3qzeuas0ig7cw0v5bgzq1bdl07";
-	public static final String IOS_KEY_Z = "60efd7c9a6f90557b7b97d10";
-	public static final String IOS_SECRET_Z = "li62b5f3d9kn8idvy6qva3c5gyidmqwl";
-
-	public PushMessageConfig(String key, String secret) {
-		try {
-			appkey = key;
-			appMasterSecret = secret;
-		} catch (Exception e) {
-			e.printStackTrace();
-			System.exit(1);
-		}
-	}
-	
-	public void sendAndroidBroadcast() throws Exception {
-		AndroidBroadcast broadcast = new AndroidBroadcast(appkey,appMasterSecret);
-		broadcast.setTicker( "Android broadcast ticker");
-		broadcast.setTitle(  "中文的title");
-		broadcast.setText(   "Android broadcast text");
-		broadcast.goAppAfterOpen();
-		broadcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
-		// TODO Set 'production_mode' to 'false' if it's a test device. 
-		// For how to register a test device, please see the developer doc.
-		broadcast.setProductionMode();
-		// Set customized fields
-		broadcast.setExtraField("test", "helloworld");
-		//厂商通道相关参数
-		broadcast.setChannelActivity("your channel activity");
-		broadcast.setChannelProperties("abc");
-		client.send(broadcast);
-	}
-	
-	public void sendAndroidUnicast(String token, String ticker, String title, String text, String url) throws Exception {
-		AndroidUnicast unicast = new AndroidUnicast(appkey,appMasterSecret);
-		// TODO Set your device token
-		unicast.setDeviceToken(token);
-		unicast.setTicker(ticker);
-		unicast.setTitle(title);
-		unicast.setText(text);
-		unicast.goUrlAfterOpen(url);
-		unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
-		// TODO Set 'production_mode' to 'false' if it's a test device. 
-		// For how to register a test device, please see the developer doc.
-		unicast.setProductionMode();
-		// Set customized fields
-		unicast.setExtraField("test", "helloworld");
-		unicast.setChannelActivity("com.fdage.eight.module.EightPushMsgHandlerActivity");
-//		unicast.setChannelProperties("abc");
-
-		client.send(unicast);
-	}
-
-	//转台相机
-	public void sendAndroidUnicast2(String token, String ticker, String title, String text, String url) throws Exception {
-		AndroidUnicast unicast = new AndroidUnicast(appkey,appMasterSecret);
-		// TODO Set your device token
-		unicast.setDeviceToken(token);
-		unicast.setTicker(ticker);
-		unicast.setTitle(title);
-		unicast.setText(text);
-		unicast.goUrlAfterOpen(url);
-		unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
-		// TODO Set 'production_mode' to 'false' if it's a test device.
-		// For how to register a test device, please see the developer doc.
-		unicast.setProductionMode();
-		// Set customized fields
-		unicast.setExtraField("test", "helloworld");
-		unicast.setChannelActivity("io.github.zileyuan.umeng_analytics_push.OfflineNotifyClickActivity");
-//		unicast.setChannelProperties("abc");
-
-		client.send(unicast);
-	}
-	
-	public void sendAndroidGroupcast() throws Exception {
-		AndroidGroupcast groupcast = new AndroidGroupcast(appkey,appMasterSecret);
-		/*  TODO
-		 *  Construct the filter condition:
-		 *  "where": 
-		 *	{
-    	 *		"and": 
-    	 *		[
-      	 *			{"tag":"test"},
-      	 *			{"tag":"Test"}
-    	 *		]
-		 *	}
-		 */
-		JSONObject filterJson = new JSONObject();
-		JSONObject whereJson = new JSONObject();
-		JSONArray tagArray = new JSONArray();
-		JSONObject testTag = new JSONObject();
-		JSONObject TestTag = new JSONObject();
-		testTag.put("tag", "test");
-		TestTag.put("tag", "Test");
-		tagArray.add(testTag);
-		tagArray.add(TestTag);
-		whereJson.put("and", tagArray);
-		filterJson.put("where", whereJson);
-
-		groupcast.setFilter(filterJson);
-		groupcast.setTicker( "Android groupcast ticker");
-		groupcast.setTitle(  "中文的title");
-		groupcast.setText(   "Android groupcast text");
-		groupcast.goAppAfterOpen();
-		groupcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
-		groupcast.setChannelActivity("your channel activity");
-		// TODO Set 'production_mode' to 'false' if it's a test device. 
-		// For how to register a test device, please see the developer doc.
-		groupcast.setProductionMode();
-		//厂商通道相关参数
-		groupcast.setChannelActivity("your channel activity");
-		groupcast.setChannelProperties("abc");
-		client.send(groupcast);
-	}
-	
-	public void sendAndroidCustomizedcast() throws Exception {
-		AndroidCustomizedcast customizedcast = new AndroidCustomizedcast(appkey,appMasterSecret);
-		// TODO Set your alias here, and use comma to split them if there are multiple alias.
-		// And if you have many alias, you can also upload a file containing these alias, then 
-		// use file_id to send customized notification.
-		customizedcast.setAlias("alias", "alias_type");
-		customizedcast.setTicker( "Android customizedcast ticker");
-		customizedcast.setTitle(  "中文的title");
-		customizedcast.setText(   "Android customizedcast text");
-		customizedcast.goAppAfterOpen();
-		customizedcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
-		// TODO Set 'production_mode' to 'false' if it's a test device. 
-		// For how to register a test device, please see the developer doc.
-		customizedcast.setProductionMode();
-		//厂商通道相关参数
-		customizedcast.setChannelActivity("your channel activity");
-		customizedcast.setChannelProperties("abc");
-		client.send(customizedcast);
-	}
-	
-	public void sendAndroidCustomizedcastFile() throws Exception {
-		AndroidCustomizedcast customizedcast = new AndroidCustomizedcast(appkey,appMasterSecret);
-		// TODO Set your alias here, and use comma to split them if there are multiple alias.
-		// And if you have many alias, you can also upload a file containing these alias, then 
-		// use file_id to send customized notification.
-		String fileId = client.uploadContents(appkey,appMasterSecret,"aa"+"\n"+"bb"+"\n"+"alias");
-		customizedcast.setFileId(fileId, "alias_type");
-		customizedcast.setTicker( "Android customizedcast ticker");
-		customizedcast.setTitle(  "中文的title");
-		customizedcast.setText(   "Android customizedcast text");
-		customizedcast.goAppAfterOpen();
-		customizedcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
-		// TODO Set 'production_mode' to 'false' if it's a test device. 
-		// For how to register a test device, please see the developer doc.
-		customizedcast.setProductionMode();
-		//厂商通道相关参数
-		customizedcast.setChannelActivity("your channel activity");
-		customizedcast.setChannelProperties("abc");
-		client.send(customizedcast);
-	}
-	
-	public void sendAndroidFilecast() throws Exception {
-		AndroidFilecast filecast = new AndroidFilecast(appkey,appMasterSecret);
-		// TODO upload your device tokens, and use '\n' to split them if there are multiple tokens 
-		String fileId = client.uploadContents(appkey,appMasterSecret,"aa"+"\n"+"bb");
-		filecast.setFileId( fileId);
-		filecast.setTicker( "Android filecast ticker");
-		filecast.setTitle(  "中文的title");
-		filecast.setText(   "Android filecast text");
-		filecast.goAppAfterOpen();
-		filecast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
-		//厂商通道相关参数
-		filecast.setChannelActivity("your channel activity");
-		filecast.setChannelProperties("abc");
-		client.send(filecast);
-	}
-	
-	public void sendIOSBroadcast() throws Exception {
-		IOSBroadcast broadcast = new IOSBroadcast(appkey,appMasterSecret);
-        //alert值设置为字符串
-		//broadcast.setAlert("IOS 广播测试");
-		//alert的值设置为字典
-//		broadcast.setAlert("今日天气" , "" , "今日可能下雨🌂");
-		broadcast.setBadge( 0);
-		broadcast.setSound( "default");
-		// TODO set 'production_mode' to 'true' if your app is under production mode
-		broadcast.setTestMode();
-		// Set customized fields
-		broadcast.setCustomizedField("test", "helloworld");
-		client.send(broadcast);
-	}
-	
-	public void sendIOSUnicast(String token, String title ,String subtitle , String body, String url) throws Exception {
-		IOSUnicast unicast = new IOSUnicast(appkey,appMasterSecret);
-		// TODO Set your device token
-		unicast.setDeviceToken(token);
-		//alert值设置为字符串
-		//unicast.setAlert("IOS 单播测试");
-		//alert的值设置为字典
-		unicast.setAlert(title, subtitle, body, url);
-//		unicast.setBadge( 0);
-		unicast.setSound( "default");
-		// TODO set 'production_mode' to 'true' if your app is under production mode
-		unicast.setProductionMode();
-//		unicast.setTestMode();
-		unicast.setDescription(title);
-		unicast.setExpireTime(DateUtil.formatTime(DateUtil.offsetDay(new Date(), 1)));
-		// Set customized fields
-//		unicast.setCustomizedField("url", url);
-		client.send(unicast);
-	}
-
-	
-	public void sendIOSGroupcast() throws Exception {
-		IOSGroupcast groupcast = new IOSGroupcast(appkey,appMasterSecret);
-		/*  TODO
-		 *  Construct the filter condition:
-		 *  "where": 
-		 *	{
-    	 *		"and": 
-    	 *		[
-      	 *			{"tag":"iostest"}
-    	 *		]
-		 *	}
-		 */
-		JSONObject filterJson = new JSONObject();
-		JSONObject whereJson = new JSONObject();
-		JSONArray tagArray = new JSONArray();
-		JSONObject testTag = new JSONObject();
-		testTag.put("tag", "iostest");
-		tagArray.add(testTag);
-		whereJson.put("and", tagArray);
-		filterJson.put("where", whereJson);
-		log.info(filterJson.toString());
-		
-		// Set filter condition into rootJson
-		groupcast.setFilter(filterJson);
-		//groupcast.setAlert("IOS 组播测试");
-		//alert的值设置为字典
-//		groupcast.setAlert("今日天气" , "subtitle" , "今日可能下雨🌂");
-		groupcast.setBadge( 0);
-		groupcast.setSound( "default");
-		// TODO set 'production_mode' to 'true' if your app is under production mode
-		groupcast.setTestMode();
-		client.send(groupcast);
-	}
-	
-	public void sendIOSCustomizedcast() throws Exception {
-		IOSCustomizedcast customizedcast = new IOSCustomizedcast(appkey,appMasterSecret);
-		// TODO Set your alias and alias_type here, and use comma to split them if there are multiple alias.
-		// And if you have many alias, you can also upload a file containing these alias, then 
-		// use file_id to send customized notification.
-		customizedcast.setAlias("alias", "alias_type");
-		//customizedcast.setAlert("IOS 个性化测试");
-		//alert的值设置为字典
-//		customizedcast.setAlert("今日天气" , "" , "今日可能下雨🌂");
-		customizedcast.setBadge( 0);
-		customizedcast.setSound( "default");
-		// TODO set 'production_mode' to 'true' if your app is under production mode
-		customizedcast.setTestMode();
-		client.send(customizedcast);
-	}
-	
-	public void sendIOSFilecast() throws Exception {
-		IOSFilecast filecast = new IOSFilecast(appkey,appMasterSecret);
-		// TODO upload your device tokens, and use '\n' to split them if there are multiple tokens 
-		String fileId = client.uploadContents(appkey,appMasterSecret,"aa"+"\n"+"bb");
-		filecast.setFileId( fileId);
-		//filecast.setAlert("IOS 文件播测试");
-		//alert的值设置为字典
-//		filecast.setAlert("今日天气" , "" , "今日可能下雨🌂");
-		filecast.setBadge( 0);
-		filecast.setSound( "default");
-		// TODO set 'production_mode' to 'true' if your app is under production mode
-		filecast.setTestMode();
-		client.send(filecast);
-	}
-	
-	public static void main(String[] args) {
-		// TODO set your appkey and master secret here
-		//安卓
-//		Demo demo = new Demo(ANDROID_KEY, ANDROID_SECRET);
-		//ios
-		PushMessageConfig pushMessageConfig = new PushMessageConfig(IOS_KEY, IOS_SECRET);
-		try {
-//			demo.sendAndroidUnicast("AneqkEZahjbW3cF7gu8juNYqz54ZFfK7kjMpTOiQL9dl",
-//					"测试项目计算完成", "四维看看Pro", "您上传的测试项目计算完成,点击查看",
-//					"https://test.4dkankan.com/smobile.html?m=t-e9uHHdn");
-			pushMessageConfig.sendIOSUnicast("ec61a2aa52673c96c12024e07ce267e391ca560e0c60f15ee09e65c8843ef7f4",
-					"四维看看Pro", "测试项目计算完成", "您上传的测试项目计算完成,点击查看",
-					"https://test.4dkankan.com/smobile.html?m=t-e9uHHdn");
-			/* TODO these methods are all available, just fill in some fields and do the test
-			 * demo.sendAndroidCustomizedcastFile();
-			 * demo.sendAndroidBroadcast();
-			 * demo.sendAndroidGroupcast();
-			 * demo.sendAndroidCustomizedcast();
-			 * demo.sendAndroidFilecast();
-			 * 
-			 * demo.sendIOSBroadcast();
-			 * demo.sendIOSUnicast();
-			 * demo.sendIOSGroupcast();
-			 * demo.sendIOSCustomizedcast();
-			 * demo.sendIOSFilecast();
-			 */
-		} catch (Exception ex) {
-			ex.printStackTrace();
-		}
-	}
-	
-
-}

+ 0 - 86
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/UmengNotification.java

@@ -1,86 +0,0 @@
-package com.fdkankan.push;
-
-import com.alibaba.fastjson.JSONObject;
-
-import java.util.Arrays;
-import java.util.HashSet;
-
-public abstract class UmengNotification {
-	// This JSONObject is used for constructing the whole request string.
-	protected final JSONObject rootJson = new JSONObject();
-	
-	
-	// The app master secret
-	protected String appMasterSecret;
-	
-	// Keys can be set in the root level
-	protected static final HashSet<String> ROOT_KEYS = new HashSet<String>(Arrays.asList(new String[]{
-			"appkey", "timestamp", "type", "device_tokens", "alias", "alias_type", "file_id", 
-			"filter", "production_mode", "feedback", "description", "thirdparty_id" , "mipush" , "mi_activity" , "channel_properties"}));
-	
-	// Keys can be set in the policy level
-	protected static final HashSet<String> POLICY_KEYS = new HashSet<String>(Arrays.asList(new String[]{
-			"start_time", "expire_time", "max_send_num"
-	}));
-	
-	// Set predefined keys in the rootJson, for extra keys(Android) or customized keys(IOS) please 
-	// refer to corresponding methods in the subclass.
-	public abstract boolean setPredefinedKeyValue(String key, Object value) throws Exception;
-	public void setAppMasterSecret(String secret) {
-		appMasterSecret = secret;
-	}
-	
-	public String getPostBody(){
-		return rootJson.toString();
-	}
-	
-	protected final String getAppMasterSecret(){
-		return appMasterSecret;
-	}
-	
-	protected void setProductionMode(Boolean prod) throws Exception {
-    	setPredefinedKeyValue("production_mode", prod.toString());
-    }
-
-	///正式模式
-    public void setProductionMode() throws Exception {
-    	setProductionMode(true);
-    }
-
-    ///测试模式
-    public void setTestMode() throws Exception {
-    	setProductionMode(false);
-    }
-
-    ///发送消息描述,建议填写。
-    public void setDescription(String description) throws Exception {
-    	setPredefinedKeyValue("description", description);
-    }
-
-    ///定时发送时间,若不填写表示立即发送。格式: "YYYY-MM-DD hh:mm:ss"。
-    public void setStartTime(String startTime) throws Exception {
-    	setPredefinedKeyValue("start_time", startTime);
-    }
-    ///消息过期时间,格式: "YYYY-MM-DD hh:mm:ss"。
-    public void setExpireTime(String expireTime) throws Exception {
-    	setPredefinedKeyValue("expire_time", expireTime);
-    }
-    ///发送限速,每秒发送的最大条数。
-    public void setMaxSendNum(Integer num) throws Exception {
-    	setPredefinedKeyValue("max_send_num", num);
-    }
-
-    //厂商弹窗activity
-	public void setChannelActivity(String activity) throws Exception{
-       setPredefinedKeyValue("mipush", "true");
-       setPredefinedKeyValue("mi_activity",activity );
-	}
-
-	//厂商属性配置
-	public void setChannelProperties(String xiaoMiChannelId) throws Exception{
-		JSONObject object = new JSONObject();
-		object.put("xiaomi_channel_id" , xiaoMiChannelId);
-		setPredefinedKeyValue("channel_properties", object);
-	}
-
-}

+ 0 - 11
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/android/AndroidBroadcast.java

@@ -1,11 +0,0 @@
-package com.fdkankan.push.android;
-
-import com.fdkankan.push.AndroidNotification;
-
-public class AndroidBroadcast extends AndroidNotification {
-	public AndroidBroadcast(String appkey,String appMasterSecret) throws Exception {
-			setAppMasterSecret(appMasterSecret);
-			setPredefinedKeyValue("appkey", appkey);
-			this.setPredefinedKeyValue("type", "broadcast");	
-	}
-}

+ 0 - 22
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/android/AndroidCustomizedcast.java

@@ -1,22 +0,0 @@
-package com.fdkankan.push.android;
-
-import com.fdkankan.push.AndroidNotification;
-
-public class AndroidCustomizedcast extends AndroidNotification {
-	public AndroidCustomizedcast(String appkey,String appMasterSecret) throws Exception {
-			setAppMasterSecret(appMasterSecret);
-			setPredefinedKeyValue("appkey", appkey);
-			this.setPredefinedKeyValue("type", "customizedcast");	
-	}
-	
-	public void setAlias(String alias,String aliasType) throws Exception {
-    	setPredefinedKeyValue("alias", alias);
-    	setPredefinedKeyValue("alias_type", aliasType);
-    }
-			
-	public void setFileId(String fileId,String aliasType) throws Exception {
-    	setPredefinedKeyValue("file_id", fileId);
-    	setPredefinedKeyValue("alias_type", aliasType);
-    }
-
-}

+ 0 - 15
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/android/AndroidFilecast.java

@@ -1,15 +0,0 @@
-package com.fdkankan.push.android;
-
-import com.fdkankan.push.AndroidNotification;
-
-public class AndroidFilecast extends AndroidNotification {
-	public AndroidFilecast(String appkey,String appMasterSecret) throws Exception {
-			setAppMasterSecret(appMasterSecret);
-			setPredefinedKeyValue("appkey", appkey);
-			this.setPredefinedKeyValue("type", "filecast");	
-	}
-	
-	public void setFileId(String fileId) throws Exception {
-    	setPredefinedKeyValue("file_id", fileId);
-    }
-}

+ 0 - 16
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/android/AndroidGroupcast.java

@@ -1,16 +0,0 @@
-package com.fdkankan.push.android;
-
-import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.push.AndroidNotification;
-
-public class AndroidGroupcast extends AndroidNotification {
-	public AndroidGroupcast(String appkey,String appMasterSecret) throws Exception {
-			setAppMasterSecret(appMasterSecret);
-			setPredefinedKeyValue("appkey", appkey);
-			this.setPredefinedKeyValue("type", "groupcast");	
-	}
-	
-	public void setFilter(JSONObject filter) throws Exception {
-    	setPredefinedKeyValue("filter", filter);
-    }
-}

+ 2 - 1
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/AndroidNotification.java

@@ -1,6 +1,7 @@
-package com.fdkankan.push;
+package com.fdkankan.push.android;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.push.common.UmengNotification;
 
 import java.util.Arrays;
 import java.util.HashSet;

+ 0 - 2
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/android/AndroidUnicast.java

@@ -1,7 +1,5 @@
 package com.fdkankan.push.android;
 
-import com.fdkankan.push.AndroidNotification;
-
 public class AndroidUnicast extends AndroidNotification {
 	public AndroidUnicast(String appkey,String appMasterSecret) throws Exception {
 			setAppMasterSecret(appMasterSecret);

+ 3 - 42
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/PushClient.java

@@ -1,6 +1,7 @@
-package com.fdkankan.push;
+package com.fdkankan.push.common;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.push.common.UmengNotification;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.http.HttpResponse;
@@ -31,6 +32,7 @@ public class PushClient {
 	protected static final String postPath = "/api/send";
 
 	public boolean send(UmengNotification msg) throws Exception {
+	    log.info("开始推送app消息,{}",JSONObject.toJSONString(msg));
 		String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000));
 		msg.setPredefinedKeyValue("timestamp", timestamp);
         String url = host + postPath;
@@ -59,45 +61,4 @@ public class PushClient {
         }
         return true;
     }
-
-	// Upload file with device_tokens to Umeng
-	public String uploadContents(String appkey,String appMasterSecret,String contents) throws Exception {
-		// Construct the json string
-		JSONObject uploadJson = new JSONObject();
-		uploadJson.put("appkey", appkey);
-		String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000));
-		uploadJson.put("timestamp", timestamp);
-		uploadJson.put("content", contents);
-		// Construct the request
-		String url = host + uploadPath;
-		String postBody = uploadJson.toString();
-		String sign = DigestUtils.md5Hex(("POST" + url + postBody + appMasterSecret).getBytes("utf8"));
-		url = url + "?sign=" + sign;
-		HttpPost post = new HttpPost(url);
-		post.setHeader("User-Agent", USER_AGENT);
-		StringEntity se = new StringEntity(postBody, "UTF-8");
-		post.setEntity(se);
-		// Send the post request and get the response
-		HttpResponse response = client.execute(post);
-		log.info("Response Code : " + response.getStatusLine().getStatusCode());
-		BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
-		StringBuffer result = new StringBuffer();
-		String line = "";
-		while ((line = rd.readLine()) != null) {
-			result.append(line);
-		}
-		log.info(result.toString());
-		// Decode response string and get file_id from it
-		JSONObject respJson = JSONObject.parseObject(result.toString());
-		String ret = respJson.getString("ret");
-		if (!ret.equals("SUCCESS")) {
-			throw new Exception("Failed to upload file");
-		}
-		JSONObject data = respJson.getJSONObject("data");
-		String fileId = data.getString("file_id");
-		// Set file_id into rootJson using setPredefinedKeyValue
-		
-		return fileId;
-	}
-
 }

+ 89 - 0
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/common/UmengNotification.java

@@ -0,0 +1,89 @@
+package com.fdkankan.push.common;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.Arrays;
+import java.util.HashSet;
+
+public abstract class UmengNotification {
+    // This JSONObject is used for constructing the whole request string.
+    protected final JSONObject rootJson = new JSONObject();
+
+
+    // The app master secret
+    protected String appMasterSecret;
+
+    // Keys can be set in the root level
+    protected static final HashSet<String> ROOT_KEYS = new HashSet<String>(Arrays.asList(new String[]{
+            "appkey", "timestamp", "type", "device_tokens", "alias", "alias_type", "file_id",
+            "filter", "production_mode", "feedback", "description", "thirdparty_id", "mipush", "mi_activity", "channel_properties"}));
+
+    // Keys can be set in the policy level
+    protected static final HashSet<String> POLICY_KEYS = new HashSet<String>(Arrays.asList(new String[]{
+            "start_time", "expire_time", "max_send_num"
+    }));
+
+    // Set predefined keys in the rootJson, for extra keys(Android) or customized keys(IOS) please
+    // refer to corresponding methods in the subclass.
+    public abstract boolean setPredefinedKeyValue(String key, Object value) throws Exception;
+
+    public void setAppMasterSecret(String secret) {
+        appMasterSecret = secret;
+    }
+
+    public String getPostBody() {
+        return rootJson.toString();
+    }
+
+    protected final String getAppMasterSecret() {
+        return appMasterSecret;
+    }
+
+    protected void setProductionMode(Boolean prod) throws Exception {
+        setPredefinedKeyValue("production_mode", prod.toString());
+    }
+
+    ///正式模式
+    public void setProductionMode() throws Exception {
+        setProductionMode(true);
+    }
+
+    ///测试模式
+    public void setTestMode() throws Exception {
+        setProductionMode(false);
+    }
+
+    ///发送消息描述,建议填写。
+    public void setDescription(String description) throws Exception {
+        setPredefinedKeyValue("description", description);
+    }
+
+    ///定时发送时间,若不填写表示立即发送。格式: "YYYY-MM-DD hh:mm:ss"。
+    public void setStartTime(String startTime) throws Exception {
+        setPredefinedKeyValue("start_time", startTime);
+    }
+
+    ///消息过期时间,格式: "YYYY-MM-DD hh:mm:ss"。
+    public void setExpireTime(String expireTime) throws Exception {
+        setPredefinedKeyValue("expire_time", expireTime);
+    }
+
+    ///发送限速,每秒发送的最大条数。
+    public void setMaxSendNum(Integer num) throws Exception {
+        setPredefinedKeyValue("max_send_num", num);
+    }
+
+    //厂商弹窗activity
+    public void setChannelActivity(String activity) throws Exception {
+        setPredefinedKeyValue("mipush", "true");
+        setPredefinedKeyValue("mi_activity", activity);
+    }
+
+    //厂商属性配置
+    public void setChannelProperties(String xiaoMiChannelId) throws Exception {
+        JSONObject object = new JSONObject();
+        object.put("xiaomi_channel_id", xiaoMiChannelId);
+        setPredefinedKeyValue("channel_properties", object);
+    }
+
+}

+ 112 - 0
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/config/PushMessageConfig.java

@@ -0,0 +1,112 @@
+package com.fdkankan.push.config;
+
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.push.android.*;
+import com.fdkankan.push.common.PushClient;
+import com.fdkankan.push.ios.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Date;
+
+@Slf4j
+public class PushMessageConfig {
+	private String appkey = null;
+	private String appMasterSecret = null;
+	private PushClient client = new PushClient();
+
+	public static final String ANDROID_KEY = "5ee71c03dbc2ec076dd488cb";
+	public static final String ANDROID_SECRET = "gzw4r8frbhq6eigxrvgjkdrm7wgtu83g";
+	public static final String IOS_KEY = "5ee71ca9978eea081640f22a";
+	public static final String IOS_SECRET = "tpuhyojch16pcha2qmpidlbnzkielv9w";
+
+	//转台双目使用
+	public static final String ANDROID_KEY_Z = "60efd777a6f90557b7b97c25";
+	public static final String ANDROID_SECRET_Z = "ll85ov3qzeuas0ig7cw0v5bgzq1bdl07";
+	public static final String IOS_KEY_Z = "60efd7c9a6f90557b7b97d10";
+	public static final String IOS_SECRET_Z = "li62b5f3d9kn8idvy6qva3c5gyidmqwl";
+
+	public PushMessageConfig(String key, String secret) {
+		appkey = key;
+		appMasterSecret = secret;
+	}
+
+	public String getAppkey() {
+		return appkey;
+	}
+
+	public void setAppkey(String appkey) {
+		this.appkey = appkey;
+	}
+
+	public String getAppMasterSecret() {
+		return appMasterSecret;
+	}
+
+	public void setAppMasterSecret(String appMasterSecret) {
+		this.appMasterSecret = appMasterSecret;
+	}
+
+	public void sendAndroidUnicast(String token, String ticker, String title, String text, String url) throws Exception {
+		AndroidUnicast unicast = new AndroidUnicast(appkey,appMasterSecret);
+		// TODO Set your device token
+		unicast.setDeviceToken(token);
+		unicast.setTicker(ticker);
+		unicast.setTitle(title);
+		unicast.setText(text);
+		unicast.goUrlAfterOpen(url);
+		unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
+		// TODO Set 'production_mode' to 'false' if it's a test device. 
+		// For how to register a test device, please see the developer doc.
+		unicast.setProductionMode();
+		// Set customized fields
+		unicast.setExtraField("test", "helloworld");
+		unicast.setChannelActivity("com.fdage.eight.module.EightPushMsgHandlerActivity");
+//		unicast.setChannelProperties("abc");
+
+		client.send(unicast);
+	}
+
+	//转台相机
+	public void sendAndroidUnicast2(String token, String ticker, String title, String text, String url) throws Exception {
+		AndroidUnicast unicast = new AndroidUnicast(appkey,appMasterSecret);
+		// TODO Set your device token
+		unicast.setDeviceToken(token);
+		unicast.setTicker(ticker);
+		unicast.setTitle(title);
+		unicast.setText(text);
+		unicast.goUrlAfterOpen(url);
+		unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
+		// TODO Set 'production_mode' to 'false' if it's a test device.
+		// For how to register a test device, please see the developer doc.
+		unicast.setProductionMode();
+		// Set customized fields
+		unicast.setExtraField("test", "helloworld");
+		unicast.setChannelActivity("io.github.zileyuan.umeng_analytics_push.OfflineNotifyClickActivity");
+//		unicast.setChannelProperties("abc");
+
+		client.send(unicast);
+	}
+	
+	public void sendIOSUnicast(String token, String title ,String subtitle , String body, String url) throws Exception {
+		IOSUnicast unicast = new IOSUnicast(appkey,appMasterSecret);
+		// TODO Set your device token
+		unicast.setDeviceToken(token);
+		//alert值设置为字符串
+		//unicast.setAlert("IOS 单播测试");
+		//alert的值设置为字典
+		unicast.setAlert(title, subtitle, body, url);
+//		unicast.setBadge( 0);
+		unicast.setSound( "default");
+		// TODO set 'production_mode' to 'true' if your app is under production mode
+		unicast.setProductionMode();
+//		unicast.setTestMode();
+		unicast.setDescription(title);
+		unicast.setExpireTime(DateUtil.formatTime(DateUtil.offsetDay(new Date(), 1)));
+		// Set customized fields
+//		unicast.setCustomizedField("url", url);
+		client.send(unicast);
+	}
+}

+ 0 - 12
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/ios/IOSBroadcast.java

@@ -1,12 +0,0 @@
-package com.fdkankan.push.ios;
-
-import com.fdkankan.push.IOSNotification;
-
-public class IOSBroadcast extends IOSNotification {
-	public IOSBroadcast(String appkey,String appMasterSecret) throws Exception {
-			setAppMasterSecret(appMasterSecret);
-			setPredefinedKeyValue("appkey", appkey);
-			this.setPredefinedKeyValue("type", "broadcast");	
-		
-	}
-}

+ 0 - 23
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/ios/IOSCustomizedcast.java

@@ -1,23 +0,0 @@
-package com.fdkankan.push.ios;
-
-
-import com.fdkankan.push.IOSNotification;
-
-public class IOSCustomizedcast extends IOSNotification {
-	public IOSCustomizedcast(String appkey,String appMasterSecret) throws Exception {
-			setAppMasterSecret(appMasterSecret);
-			setPredefinedKeyValue("appkey", appkey);
-			this.setPredefinedKeyValue("type", "customizedcast");	
-	}
-	
-	public void setAlias(String alias,String aliasType) throws Exception {
-    	setPredefinedKeyValue("alias", alias);
-    	setPredefinedKeyValue("alias_type", aliasType);
-    }
-		
-	public void setFileId(String fileId, String aliasType) throws Exception {
-		setPredefinedKeyValue("file_id", fileId);
-		setPredefinedKeyValue("alias_type", aliasType);
-	}
-
-}

+ 0 - 15
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/ios/IOSFilecast.java

@@ -1,15 +0,0 @@
-package com.fdkankan.push.ios;
-
-import com.fdkankan.push.IOSNotification;
-
-public class IOSFilecast extends IOSNotification {
-	public IOSFilecast(String appkey,String appMasterSecret) throws Exception {
-			setAppMasterSecret(appMasterSecret);
-			setPredefinedKeyValue("appkey", appkey);
-			this.setPredefinedKeyValue("type", "filecast");	
-	}
-	
-	public void setFileId(String fileId) throws Exception {
-    	setPredefinedKeyValue("file_id", fileId);
-    }
-}

+ 0 - 16
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/ios/IOSGroupcast.java

@@ -1,16 +0,0 @@
-package com.fdkankan.push.ios;
-
-import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.push.IOSNotification;
-
-public class IOSGroupcast extends IOSNotification {
-	public IOSGroupcast(String appkey,String appMasterSecret) throws Exception {
-			setAppMasterSecret(appMasterSecret);
-			setPredefinedKeyValue("appkey", appkey);
-			this.setPredefinedKeyValue("type", "groupcast");	
-	}
-	
-	public void setFilter(JSONObject filter) throws Exception {
-    	setPredefinedKeyValue("filter", filter);
-    }
-}

+ 2 - 1
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/IOSNotification.java

@@ -1,6 +1,7 @@
-package com.fdkankan.push;
+package com.fdkankan.push.ios;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.push.common.UmengNotification;
 
 import java.util.Arrays;
 import java.util.HashSet;

+ 0 - 2
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/ios/IOSUnicast.java

@@ -1,7 +1,5 @@
 package com.fdkankan.push.ios;
 
-import com.fdkankan.push.IOSNotification;
-
 public class IOSUnicast extends IOSNotification {
 	public IOSUnicast(String appkey,String appMasterSecret) throws Exception{
 			setAppMasterSecret(appMasterSecret);

+ 1 - 1
4dkankan-utils-app-push/src/main/java/com/fdkankan/push/PushMsgUtil.java

@@ -1,4 +1,4 @@
-package com.fdkankan.push;
+package com.fdkankan.push.utils;
 
 import com.google.auth.oauth2.GoogleCredentials;
 import com.google.firebase.FirebaseApp;