友盟推送(服务端JAVA开发)
官方的文档url:
https://developer.umeng.com/docs/67966/cate/67966?spm=a213m0.14063960.9348417015.4.e6486e72P7ralU&acm=lb-zebra-622408-7938469.1003.4.7419296&scm=1003.4.lb-zebra-622408-7938469.OTHER_15797142450211_7419296
JDK-url:
http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/149296/UMDP_zh/1591943466250/java.zip
代码展示(我结合业务结合官方jdk加工了一下)
MessageDto.java
package com.fengniao.mall.thirdpart.client.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@Data
@Builder
@ApiModel("推送消息")
public class MessageDto implements Serializable {
@ApiModelProperty("标题")
@NotBlank(message = "标题不可以为空")
private String title;
@ApiModelProperty("内容")
@NotBlank(message = "内容不可以为空")
private String content;
@ApiModelProperty("通知栏内容")
private String ticker;
@ApiModelProperty("描述")
private String description;
@ApiModelProperty("渠道包")
private String activity;
@ApiModelProperty("透传信息")
private String ExtraFieldStr;
@ApiModelProperty("是否开启测试模式")
private Boolean hasTest;
@ApiModelProperty("IOS OR ANDROID")
private Boolean hasIos;
@ApiModelProperty("token")
private String token;
}
PushConfig.java(这个事根据xml写的配置类,可根据自身情况改写)
package com.fengniao.mall.thirdpart.push;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "umeng")
@Data
public class PushConfig {
private String iosAppKey;
private String iosAppMasterSecret;
private String andAppKey;
private String andAppMasterSecret;
private String andActivityPage;
}
PushService.java 接口
package com.fengniao.mall.thirdpart.push;
import com.fengniao.mall.thirdpart.client.dto.MessageDto;
public interface PushService {
//指定设备token发送数据
String sendUnicast(MessageDto dto) throws Exception;
//广播 每日10次(单组api下)
String sendBroadcast(MessageDto dto) throws Exception;
//指定别名发送数据
String sendCustomizedcast(MessageDto dto) throws Exception;
}
PushServiceImpl.java 实现
package com.fengniao.mall.thirdpart.push;
import com.fengniao.mall.thirdpart.client.dto.MessageDto;
import com.fengniao.mall.thirdpart.push.android.AndroidBroadcast;
import com.fengniao.mall.thirdpart.push.android.AndroidCustomizedcast;
import com.fengniao.mall.thirdpart.push.android.AndroidUnicast;
import com.fengniao.mall.thirdpart.push.ios.IOSBroadcast;
import com.fengniao.mall.thirdpart.push.ios.IOSCustomizedcast;
import com.fengniao.mall.thirdpart.push.ios.IOSUnicast;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class PushServiceImpl implements PushService {
@Autowired
private PushConfig pushConfig;
@Autowired
private PushClient client;
@Override
public String sendUnicast(MessageDto dto) throws Exception {
dto.setActivity(pushConfig.getAndActivityPage());
if (StringUtils.isBlank(dto.getToken())) return "无效token无法发送";
if (dto.getHasIos()) return sendUnicastIOS(dto);
return sendUnicastAND(dto);
}
@Override
public String sendBroadcast(MessageDto dto) throws Exception {
dto.setHasTest(true);
dto.setActivity(pushConfig.getAndActivityPage());
if (dto.getHasIos()) return sendBroadcastIOS(dto);
return sendBroadcastAND(dto);
}
@Override
public String sendCustomizedcast(MessageDto dto) throws Exception {
dto.setActivity(pushConfig.getAndActivityPage());
if (StringUtils.isBlank(dto.getToken())) return "无效token无法发送";
if (dto.getHasIos()) return sendIOSCustomizedcast(dto);
return sendAndroidCustomizedcast(dto);
}
//deviceToken 单播IOS
private String sendUnicastIOS(MessageDto dto) throws Exception {
IOSUnicast unicastIOS = new IOSUnicast(pushConfig.getIosAppKey(),pushConfig.getIosAppMasterSecret());
unicastIOS.setDeviceToken(dto.getToken());
unicastIOS.setAlert(dto.getTitle() , dto.getTicker() , dto.getContent());
unicastIOS.setDescription(dto.getDescription());
unicastIOS.setBadge( 1);
unicastIOS.setSound( "default");
unicastIOS.setProductionMode(!dto.getHasTest());
unicastIOS.setCustomizedField("data", dto.getExtraFieldStr());
return client.send(unicastIOS);
}
//deviceToken 单播安卓
private String sendUnicastAND(MessageDto dto) throws Exception {
AndroidUnicast unicastAND = new AndroidUnicast(pushConfig.getAndAppKey(),pushConfig.getAndAppMasterSecret());
unicastAND.setDeviceToken(dto.getToken());
unicastAND.setTicker(dto.getTicker());
unicastAND.setTitle(dto.getTitle());
unicastAND.setText(dto.getContent());
unicastAND.setDescription(dto.getDescription());
unicastAND.goCustomAfterOpen(dto.getExtraFieldStr());
unicastAND.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
unicastAND.setProductionMode(!dto.getHasTest());
unicastAND.setChannelActivity(dto.getActivity());
return client.send(unicastAND);
}
//广播IOS
private String sendBroadcastIOS(MessageDto dto) throws Exception {
IOSBroadcast broadcastIOS = new IOSBroadcast(pushConfig.getIosAppKey(), pushConfig.getIosAppMasterSecret());
broadcastIOS.setAlert(dto.getTitle() , dto.getTicker(), dto.getContent());
broadcastIOS.setDescription(dto.getDescription());
broadcastIOS.setBadge( 1);
broadcastIOS.setSound( "default");
broadcastIOS.setProductionMode(!dto.getHasTest());
broadcastIOS.setCustomizedField("data", dto.getExtraFieldStr());
return client.send(broadcastIOS);
}
//广播安卓
private String sendBroadcastAND(MessageDto dto) throws Exception {
AndroidBroadcast broadcastAND = new AndroidBroadcast(pushConfig.getAndAppKey(), pushConfig.getAndAppMasterSecret());
broadcastAND.setTicker( dto.getTicker());
broadcastAND.setTitle(dto.getTitle());
broadcastAND.setText(dto.getContent());
broadcastAND.setDescription(dto.getDescription());
broadcastAND.goAppAfterOpen();
broadcastAND.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
broadcastAND.setProductionMode(!dto.getHasTest());
broadcastAND.setExtraField("data", dto.getExtraFieldStr());
//厂商通道相关参数
broadcastAND.setChannelActivity(dto.getActivity());
return client.send(broadcastAND);
}
public String sendIOSCustomizedcast(MessageDto dto) throws Exception {
IOSCustomizedcast customizedcast = new IOSCustomizedcast(pushConfig.getIosAppKey(),pushConfig.getIosAppMasterSecret());
customizedcast.setAlias(dto.getToken(), "phone");
customizedcast.setAlert(dto.getTitle() , dto.getTicker() , dto.getContent());
customizedcast.setBadge( 0);
customizedcast.setSound( "default");
customizedcast.setProductionMode(!dto.getHasTest());
customizedcast.setCustomizedField("data", dto.getExtraFieldStr());
return client.send(customizedcast);
}
public String sendAndroidCustomizedcast(MessageDto dto) throws Exception {
AndroidCustomizedcast customizedcast = new AndroidCustomizedcast(pushConfig.getAndAppKey(), pushConfig.getAndAppMasterSecret());
customizedcast.setAlias(dto.getToken(), "phone");
customizedcast.setTicker(dto.getToken());
customizedcast.setTitle(dto.getTitle());
customizedcast.setText(dto.getContent());
customizedcast.setDescription(dto.getDescription());
customizedcast.goAppAfterOpen();
customizedcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
customizedcast.setProductionMode(!dto.getHasTest());
customizedcast.setChannelActivity(dto.getActivity());
customizedcast.setExtraField("data", dto.getExtraFieldStr());
return client.send(customizedcast);
}
}
官方jar直接复制到自己的项目里,官方自带DEMO.java 结合这个改造即可,文中我自己加了:data 这个参数为透传json信息,方便快捷封装得体。欢迎留言探讨
如果不成功,在client.send()方法内断电截获postBody
可利用这组json去官方后台校验
校验API地址:
https://developer.umeng.com/docs/67966/detail/170938#h1-api-5