
官方文档:开发者中心
首先看文档得有appkey,masterkey,url!!!
分享一个小技巧
友盟自带测试工具,可以先用测试工具调通,然后去看友盟生成的数据,跟你自己组装的数据的差别在哪里!有些数据不传就是收不到的!!!但是它的文档里面没写,好了,祝你成功!
代码:
import org.apache.commons.codec.digest.DigestUtils;
@Value("${appPush.url}")
private String appPushUrl;
@Value("${ios.appKey}")
private String iosAppKey;
@Value("${ios.masterKey}")
private String iosMasterKey;
@Value("${ios.url}")
private String iosAppPushUrl;
/**
* 推送类型 -- 列播
*/
public static final String PUSH_TYPE_LIST = "listcast";
/**
* 推送类型 -- 组播
*/
public static final String PUSH_TYPE_GROUP = "groupcast";
@Override
public void sendMessage(Long userId, String title, String content) {
StaffUserDeviceTokenPO po = staffUserDeviceTokenService.selectById(userId);
if(ObjectUtil.isNull(po)){
log.info("用户userId:{}未绑定设备token,推送失败", userId);
return;
}
if (po.getDeviceToken().length()>44){
sendIos(po.getDeviceToken(), title, content);//调用ios
}else {
sendList(po.getDeviceToken(), title, content);//调用android
}
}
/**
* 发送列播 ios 组装数据
* @param deviceTokens 设备标识
* @param title 标题
* @param content 内容
*/
public void sendIos(String deviceTokens, String title, String content){
IosAlert alert=new IosAlert();
alert.setTitle(title);
alert.setBody(content);
alert.setSubtitle(title);
IosAps aps=new IosAps();
aps.setAlert(alert);
IosPayload payload = new IosPayload();
payload.setAps(aps);
IosPushQuery query = new IosPushQuery();
query.setAppKey(iosAppKey);
query.setType(PUSH_TYPE_LIST);
query.setPayload(payload);
String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000));
query.setTimestamp(timestamp);
query.setProductionMode("false");
query.setDeviceTokens(deviceTokens);
String postBody = JSONObject.toJSONString(query, SerializerFeature.WriteMapNullValue);
System.out.println("postBody!!!!!!!!"+postBody);
postSendIOS(postBody);//调用
}
/**
* ios
* @param postBody
*/
public void postSendIOS(String postBody) {
String sign = null;
sign = DigestUtils.md5Hex(("POST" + iosAppPushUrl + postBody + iosMasterKey).getBytes(StandardCharsets.UTF_8));
String url = iosAppPushUrl + "?sign=" + sign;
log.info("start url:{} body:{}", url, postBody);
System.out.println("start url:{} body:{}"+url+"!!!!!"+postBody);
String result = HttpRequest.post(url)
.header(Header.CONTENT_TYPE, "application/json")
.body(postBody)
.execute().body();
log.info("result:{}", result);
}
组播:
/**
* 发送组播 ios
* @param appPushFilterQuery 组播条件
* @param title 标题
* @param content 内容
*/
public void sendIosGroup(AppPushFilterQuery appPushFilterQuery, String title, String content){
AppFilterWhere appFilterWhere=new AppFilterWhere();
IosAlert alert=new IosAlert();
alert.setTitle(title);
alert.setBody(content);
alert.setSubtitle(title);
IosAps aps=new IosAps();
aps.setAlert(alert);
IosPayload payload = new IosPayload();
payload.setAps(aps);
IosPushQuery query = new IosPushQuery();
query.setAppKey(iosAppKey);
query.setType(PUSH_TYPE_GROUP);
query.setPayload(payload);
String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000));
query.setTimestamp(timestamp);
appFilterWhere.setWhere(appPushFilterQuery);
query.setFilter(appFilterWhere);
query.setProductionMode("false");
String postBody = JSONObject.toJSONString(query, SerializerFeature.WriteMapNullValue);
postSendIOS(postBody);
}
组装数据的类:
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
/**
* @author chenhm
* @date 2022/2/25 17:35
*/
@Data
public class IosAlert {
@JSONField(name = "title")
private String title;
@JSONField(name = "subtitle")
private String subtitle;
@JSONField(name = "body")
private String body;
}
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
/**
* @author chenhm
* @date 2022/2/25 17:31
*/
@Data
public class IosAps {
@JSONField(name = "alert")
private IosAlert alert;
}
@Data
public class IosPayload {
@JSONField(name = "aps")
private IosAps aps;
}
@Data
public class IosPushQuery {
@JSONField(name = "appKey")
private String appKey;
@JSONField(name = "timestamp")
private String timestamp;
@JSONField(name = "type")
private String type;
@JSONField(name = "device_tokens")
private String deviceTokens;
@JSONField(name = "payload")
private IosPayload payload;
@JSONField(name = "production_mode")
private String productionMode;
//@JSONField(name = "mipush")
//private String miPush = "true";
//@JSONField(name = "mi_activity")
//private String miActivity = "com.hzx.azq_my.ui.activity.msg.MsgCenterActivity";
@JSONField(name = "filter")
private AppFilterWhere filter;
}
/**
* @author chenhm
* @date 2021/12/27 14:48
*/
@Data
public class AppFilterWhere {
private AppPushFilterQuery where;
}
@Data
public class AppPushFilterQuery {
@JSONField(name = "and")
private List
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)