1. SDK.InvalidRegionID :can not find endpoint to access
在阿里开发手册中给出的解决方法,产生原因是由于SDK核心包版本过低,升级版本即可解决。
2.同时推送iOS和android
官方给出的demo仅设置一次appKey是不行的,只能推送的appKey所对应的一端,双端推送的话必须分两次设置并发送请求
@Override
public boolean sendMessage(AppMessageVo messageVo) {
PushRequest pushRequest=new PushRequest();
// 安全性比较高的内容建议使用HTTPS
pushRequest.setProtocol(ProtocolType.HTTPS);
// 内容较大的请求,使用POST请求
pushRequest.setMethod(MethodType.POST);
pushRequest.setTarget("ACCOUNT"); //推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送 TAG:按标签推送; ALL: 广播推送
pushRequest.setTargetValue(messageVo.getAccount());
pushRequest.setPushType("NOTICE"); // 消息类型 MESSAGE NOTICE
pushRequest.setDeviceType("ALL"); // 设备类型 ANDROID iOS ALL.
pushRequest.setTitle(messageVo.getTitle()); // 消息的标题
if(messageVo.getExtParameters()!=null){
JSONObject exData=JSONObject.parseObject(messageVo.getExtParameters());
pushRequest.setBody(exData.getString("content")); // 消息的内容
}
//IOS
pushRequest.setIOSApnsEnv(env);
pushRequest.setIOSMusic("default");
pushRequest.setIOSMutableContent(true);//是否允许扩展iOS通知内容
pushRequest.setIOSExtParameters(messageVo.getExtParameters()); //通知的扩展属性(注意 :该参数要以json map的格式传入,否则会解析出错)
if(env.equals("PRODUCT")){
pushRequest.setIOSRemind(true);
pushRequest.setIOSRemindBody(messageVo.getBody());
}
//Android
pushRequest.setAndroidMusic("default");
pushRequest.setAndroidPopupTitle(messageVo.getTitle());
pushRequest.setAndroidPopupBody(messageVo.getBody());
pushRequest.setAndroidExtParameters(messageVo.getExtParameters());
// 推送控制
Date pushDate=new Date(System.currentTimeMillis()); // 30秒之间的时间点,也可以设置成你指定固定时间
String pushTime=ParameterHelper.getISO8601Time(pushDate);
pushRequest.setPushTime(pushTime); // 延后推送。可选,如果不设置表示立即推送
String expireTime=ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 12 * 3600 * 1000)); // 12小时后消息失效,不会再发送
pushRequest.setExpireTime(expireTime);
pushRequest.setStoreOffline(true); // 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
try {
pushRequest.setAppKey(iosKey);
PushResponse iosRes=this.getClient().getAcsResponse(pushRequest);
log.info("ios推送结果 messageId:{}",iosRes.getMessageId());
pushRequest.setAppKey(androidKey);
PushResponse androidRes=this.getClient().getAcsResponse(pushRequest);
log.info("android推送结果 messageId:{}",androidRes.getMessageId());
return true;
} catch (ClientException e) {
log.error("消息推送失败!",e);
return false;
}
}