|
@@ -5,6 +5,7 @@ import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
|
|
+import java.util.function.BiConsumer;
|
|
import java.util.function.Function;
|
|
import java.util.function.Function;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -34,6 +35,31 @@ import lombok.NonNull;
|
|
* @date 2024/1/30
|
|
* @date 2024/1/30
|
|
*/
|
|
*/
|
|
public final class JPushContextHolder {
|
|
public final class JPushContextHolder {
|
|
|
|
+ /**
|
|
|
|
+ * VIVO标识
|
|
|
|
+ */
|
|
|
|
+ public static final String VIVO = "vivo";
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * OPPO标识
|
|
|
|
+ */
|
|
|
|
+ public static final String OPPO = "oppo";
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 荣耀标识
|
|
|
|
+ */
|
|
|
|
+ public static final String HONOR = "honor";
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 小米标识
|
|
|
|
+ */
|
|
|
|
+ public static final String XIAOMI = "xiaomi";
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 华为标识
|
|
|
|
+ */
|
|
|
|
+ public static final String HUAWEI = "huawei";
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 安卓通知消息工厂
|
|
* 安卓通知消息工厂
|
|
*/
|
|
*/
|
|
@@ -208,20 +234,37 @@ public final class JPushContextHolder {
|
|
if (ANDROID_OPTIONS == null) {
|
|
if (ANDROID_OPTIONS == null) {
|
|
synchronized (Options.class) {
|
|
synchronized (Options.class) {
|
|
if (ANDROID_OPTIONS == null) {
|
|
if (ANDROID_OPTIONS == null) {
|
|
- JPushProperties properties = ApplicationContextHolder.getBean(JPushProperties.class);
|
|
|
|
- ANDROID_OPTIONS = Options.newBuilder().setThirdPartyChannelV2(ImmutableMap.of(
|
|
|
|
- "huawei", initializeAndroidChannel(properties.getHuawei()),
|
|
|
|
- "honor", initializeAndroidChannel(properties.getHonor()),
|
|
|
|
- "xiaomi", initializeAndroidChannel(properties.getXiaomi()),
|
|
|
|
- "oppo", initializeAndroidChannel(properties.getOppo()),
|
|
|
|
- "vivo", initializeAndroidChannel(properties.getVivo())
|
|
|
|
- )).build();
|
|
|
|
|
|
+ ANDROID_OPTIONS = getAndroidNotifyOptions((brand, channel) -> {
|
|
|
|
+ });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return ANDROID_OPTIONS;
|
|
return ANDROID_OPTIONS;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 获取安卓通知可选参数
|
|
|
|
+ *
|
|
|
|
+ * @param consumer 手机品牌/配置回调函数
|
|
|
|
+ * @return 推送可选项
|
|
|
|
+ */
|
|
|
|
+ public static Options getAndroidNotifyOptions(@NonNull BiConsumer<String, JsonObject> consumer) {
|
|
|
|
+ JPushProperties properties = ApplicationContextHolder.getBean(JPushProperties.class);
|
|
|
|
+ JsonObject vivo = initializeAndroidChannel(properties.getVivo());
|
|
|
|
+ consumer.accept(VIVO, vivo);
|
|
|
|
+ JsonObject oppo = initializeAndroidChannel(properties.getOppo());
|
|
|
|
+ consumer.accept(OPPO, oppo);
|
|
|
|
+ JsonObject honor = initializeAndroidChannel(properties.getHonor());
|
|
|
|
+ consumer.accept(HONOR, honor);
|
|
|
|
+ JsonObject xiaomi = initializeAndroidChannel(properties.getXiaomi());
|
|
|
|
+ consumer.accept(XIAOMI, xiaomi);
|
|
|
|
+ JsonObject huawei = initializeAndroidChannel(properties.getHuawei());
|
|
|
|
+ consumer.accept(HUAWEI, huawei);
|
|
|
|
+ return Options.newBuilder().setThirdPartyChannelV2(ImmutableMap.of(
|
|
|
|
+ VIVO, vivo, OPPO, oppo, HONOR, honor, XIAOMI, xiaomi, HUAWEI, huawei
|
|
|
|
+ )).build();
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 初始化安卓渠道
|
|
* 初始化安卓渠道
|
|
*
|
|
*
|
|
@@ -248,6 +291,20 @@ public final class JPushContextHolder {
|
|
return channel;
|
|
return channel;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 构建消息推送载体对象
|
|
|
|
+ *
|
|
|
|
+ * @param platform 目标平台
|
|
|
|
+ * @param message 透传消息
|
|
|
|
+ * @param audience 目标群体
|
|
|
|
+ * @return 消息推送载体
|
|
|
|
+ */
|
|
|
|
+ public static PushPayload payload(@NonNull Platform platform, @NonNull Message message,
|
|
|
|
+ @NonNull Audience audience) {
|
|
|
|
+ return new PushPayload.Builder().setPlatform(adapter(platform)).setMessage(message)
|
|
|
|
+ .setAudience(audience).build();
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 构建消息推送载体对象
|
|
* 构建消息推送载体对象
|
|
*
|
|
*
|
|
@@ -258,8 +315,7 @@ public final class JPushContextHolder {
|
|
*/
|
|
*/
|
|
public static PushPayload payload(@NonNull Platform platform, @NonNull Message message,
|
|
public static PushPayload payload(@NonNull Platform platform, @NonNull Message message,
|
|
@NonNull String... aliases) {
|
|
@NonNull String... aliases) {
|
|
- return new PushPayload.Builder().setPlatform(adapter(platform)).setAudience(Audience.alias(aliases))
|
|
|
|
- .setMessage(message).build();
|
|
|
|
|
|
+ return payload(platform, message, Audience.alias(aliases));
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -272,8 +328,36 @@ public final class JPushContextHolder {
|
|
*/
|
|
*/
|
|
public static PushPayload payload(@NonNull Platform platform, @NonNull Message message,
|
|
public static PushPayload payload(@NonNull Platform platform, @NonNull Message message,
|
|
@NonNull Collection<String> aliases) {
|
|
@NonNull Collection<String> aliases) {
|
|
- return new PushPayload.Builder().setPlatform(adapter(platform)).setAudience(Audience.alias(aliases))
|
|
|
|
- .setMessage(message).build();
|
|
|
|
|
|
+ return payload(platform, message, Audience.alias(aliases));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 构建消息推送载体对象
|
|
|
|
+ *
|
|
|
|
+ * @param platform 目标平台
|
|
|
|
+ * @param notification 推送通知
|
|
|
|
+ * @param audience 目标群体
|
|
|
|
+ * @return 消息推送载体
|
|
|
|
+ */
|
|
|
|
+ public static PushPayload payload(@NonNull Platform platform, @NonNull Notification notification,
|
|
|
|
+ @NonNull Audience audience) {
|
|
|
|
+ Options options = platform == Platform.ANDROID ? getAndroidNotifyOptions() : null;
|
|
|
|
+ return payload(platform, notification, audience, options);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 构建消息推送载体对象
|
|
|
|
+ *
|
|
|
|
+ * @param platform 目标平台
|
|
|
|
+ * @param notification 推送通知
|
|
|
|
+ * @param audience 目标群体
|
|
|
|
+ * @param options 通知可选项
|
|
|
|
+ * @return 消息推送载体
|
|
|
|
+ */
|
|
|
|
+ public static PushPayload payload(@NonNull Platform platform, @NonNull Notification notification,
|
|
|
|
+ @NonNull Audience audience, Options options) {
|
|
|
|
+ return new PushPayload.Builder().setPlatform(adapter(platform)).setNotification(notification)
|
|
|
|
+ .setAudience(audience).setOptions(options).build();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -286,12 +370,21 @@ public final class JPushContextHolder {
|
|
*/
|
|
*/
|
|
public static PushPayload payload(@NonNull Platform platform, @NonNull Notification notification,
|
|
public static PushPayload payload(@NonNull Platform platform, @NonNull Notification notification,
|
|
@NonNull String... aliases) {
|
|
@NonNull String... aliases) {
|
|
- PushPayload.Builder builder = new PushPayload.Builder().setPlatform(adapter(platform))
|
|
|
|
- .setAudience(Audience.alias(aliases)).setNotification(notification);
|
|
|
|
- if (platform == Platform.ANDROID) {
|
|
|
|
- builder.setOptions(getAndroidNotifyOptions());
|
|
|
|
- }
|
|
|
|
- return builder.build();
|
|
|
|
|
|
+ return payload(platform, notification, Audience.alias(aliases));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 构建消息推送载体对象
|
|
|
|
+ *
|
|
|
|
+ * @param platform 目标平台
|
|
|
|
+ * @param notification 推送通知
|
|
|
|
+ * @param options 通知可选项
|
|
|
|
+ * @param aliases 用户别名数组
|
|
|
|
+ * @return 消息推送载体
|
|
|
|
+ */
|
|
|
|
+ public static PushPayload payload(@NonNull Platform platform, @NonNull Notification notification,
|
|
|
|
+ Options options, @NonNull String... aliases) {
|
|
|
|
+ return payload(platform, notification, Audience.alias(aliases), options);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -304,12 +397,21 @@ public final class JPushContextHolder {
|
|
*/
|
|
*/
|
|
public static PushPayload payload(@NonNull Platform platform, @NonNull Notification notification,
|
|
public static PushPayload payload(@NonNull Platform platform, @NonNull Notification notification,
|
|
@NonNull Collection<String> aliases) {
|
|
@NonNull Collection<String> aliases) {
|
|
- PushPayload.Builder builder = new PushPayload.Builder().setPlatform(adapter(platform))
|
|
|
|
- .setAudience(Audience.alias(aliases)).setNotification(notification);
|
|
|
|
- if (platform == Platform.ANDROID) {
|
|
|
|
- builder.setOptions(getAndroidNotifyOptions());
|
|
|
|
- }
|
|
|
|
- return builder.build();
|
|
|
|
|
|
+ return payload(platform, notification, Audience.alias(aliases));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 构建消息推送载体对象
|
|
|
|
+ *
|
|
|
|
+ * @param platform 目标平台
|
|
|
|
+ * @param notification 推送通知
|
|
|
|
+ * @param options 通知可选项
|
|
|
|
+ * @param aliases 用户别名集合
|
|
|
|
+ * @return 消息推送载体
|
|
|
|
+ */
|
|
|
|
+ public static PushPayload payload(@NonNull Platform platform, @NonNull Notification notification,
|
|
|
|
+ Options options, @NonNull Collection<String> aliases) {
|
|
|
|
+ return payload(platform, notification, Audience.alias(aliases), options);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -321,7 +423,7 @@ public final class JPushContextHolder {
|
|
* @return 消息推送载体
|
|
* @return 消息推送载体
|
|
*/
|
|
*/
|
|
public static PushPayload target(@NonNull String target, @NonNull Platform platform, @NonNull Message message) {
|
|
public static PushPayload target(@NonNull String target, @NonNull Platform platform, @NonNull Message message) {
|
|
- return new PushPayload.Builder().setPlatform(adapter(platform)).setMessage(message).setTarget(target).build();
|
|
|
|
|
|
+ return new PushPayload.Builder().setTarget(target).setPlatform(adapter(platform)).setMessage(message).build();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -334,11 +436,22 @@ public final class JPushContextHolder {
|
|
*/
|
|
*/
|
|
public static PushPayload target(@NonNull String target, @NonNull Platform platform,
|
|
public static PushPayload target(@NonNull String target, @NonNull Platform platform,
|
|
@NonNull Notification notification) {
|
|
@NonNull Notification notification) {
|
|
- PushPayload.Builder builder = new PushPayload.Builder().setTarget(target).setPlatform(adapter(platform))
|
|
|
|
- .setNotification(notification);
|
|
|
|
- if (platform == Platform.ANDROID) {
|
|
|
|
- builder.setOptions(getAndroidNotifyOptions());
|
|
|
|
- }
|
|
|
|
- return builder.build();
|
|
|
|
|
|
+ Options options = platform == Platform.ANDROID ? getAndroidNotifyOptions() : null;
|
|
|
|
+ return target(target, platform, notification, options);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 构建消息推送载体对象
|
|
|
|
+ *
|
|
|
|
+ * @param target 目标用户
|
|
|
|
+ * @param platform 目标平台
|
|
|
|
+ * @param notification 推送通知
|
|
|
|
+ * @param options 通知可选项
|
|
|
|
+ * @return 消息推送载体
|
|
|
|
+ */
|
|
|
|
+ public static PushPayload target(@NonNull String target, @NonNull Platform platform,
|
|
|
|
+ @NonNull Notification notification, Options options) {
|
|
|
|
+ return new PushPayload.Builder().setTarget(target).setPlatform(adapter(platform))
|
|
|
|
+ .setNotification(notification).setOptions(options).build();
|
|
}
|
|
}
|
|
}
|
|
}
|