springBoot集成极光 app消息推送
极光推送一直以来提供了“广播”、“标签(tag)”、“别名(alias)”和“registration_id”等多种推送方式,这几种推送方式正确使用场景如下:如果您希望一条推送能发给您 App 下的全量用户,建议您使用“广播”;参考:怎么样广播推送?如果您希望一条推送能批量推送给具有相同属性的一群用户,建议您使用“标签(tag)”推送;参考:怎么样向指定的一群用户推送消息?如果您希望一条推送只针对
·
极光推送一直以来提供了“广播”、“标签(tag)”、“别名(alias)”和“registration_id”等多种推送方式,这几种推送方式正确使用场景如下:
- 如果您希望一条推送能发给您 App 下的全量用户,建议您使用“广播”;参考:怎么样广播推送?
- 如果您希望一条推送能批量推送给具有相同属性的一群用户,建议您使用“标签(tag)”推送;参考: 怎么样向指定的一群用户推送消息?
- 如果您希望一条推送只针对指定的某一个用户推送,则您可以选择“别名(alias)”或者“registration_id”推送
极光于 2020/03/10 对「别名设置」的上限进行限制,最多允许绑定 10 个设备
在用户第一次登录app时,ios和android调用极光api对用户进行别名绑定。随后调用app后台服务,将绑定结果(用户唯一标识,别名,设备id...)保存到自己的本地服务。后续本地服务集成极光api,就可以在不同业务场景下给指定用户推送消息。
消息推送工具类
/**
* ClassName: JPushClient
* Function: 极光推送管理端
* Date: 2021/3/30 14:35
*
* @author hanKongbin
* version V1.0
*/
@Component
@Slf4j
public class JPushManager {
@Value("${jpush.appKey}")
private String appKey;
@Value("${jpush.masterSecret}")
private String masterSecret;
@Value("${jpush.apnsProduction}")
private boolean apnsProduction;
@Value("${switch.status}")
private boolean switchStatus;
private static JPushClient jPushClient = null;
private JPushClient getJPushClient() {
if (jPushClient == null) {
jPushClient = new JPushClient(masterSecret, appKey);
}
return jPushClient;
}
/**
* 推送到Alias列表
*
* @param jSendPush
*/
public boolean sendToAlias(JSendPush jSendPush) {
if (!switchStatus) {
log.error("==推送消息全局开关未打开,推送终止!");
return false;
}
PushPayload pushPayload = buildPushObjectAllAlias(jSendPush);
return this.sendPush(pushPayload);
}
/**
* 发送推送
*
* @param pushPayload
* @return
*/
private boolean sendPush(PushPayload pushPayload) {
log.info("pushPayload={}", pushPayload);
try {
PushResult pushResult = this.getJPushClient().sendPush(pushPayload);
log.info("" + pushResult);
if (pushResult.getResponseCode() == HttpStatus.HTTP_OK) {
log.info("极光消息推送成功, pushPayload={}", pushPayload);
return true;
}
} catch (APIConnectionException | APIRequestException e) {
log.error("==极光消息推送失败: pushPayload={}, exception={}", pushPayload, e);
}
return false;
}
/**
* 向所有平台单个或多个指定alias用户推送消息
*
* @param jSendPush
* @return
*/
private PushPayload buildPushObjectAllAlias(JSendPush jSendPush) {
return PushPayload.newBuilder()
// 所有设备android/ios
.setPlatform(Platform.all())
.setAudience(Audience.alias(jSendPush.getTargetIds()))
.setNotification(Notification.newBuilder()
// android
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(jSendPush.getMessageContent())
.setTitle(jSendPush.getNotificationTitle())
.addExtras(jSendPush.getExtras())
.build())
// ios
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(jSendPush.getMessageContent())
.incrBadge(1)
.setSound("default")
.addExtras(jSendPush.getExtras())
.build())
.build())
.setMessage(Message.newBuilder()
.setMsgContent(jSendPush.getMessageContent())
.setTitle(jSendPush.getMessageTitle())
.addExtras(jSendPush.getExtras())
.build())
.setOptions(Options.newBuilder()
.setApnsProduction(apnsProduction)
.setSendno(1)
.setTimeToLive(86400)
.build())
.build();
}
更多推荐
已为社区贡献3条内容
所有评论(0)