背景:最近公司app做用户推送功能,通过用户分析,85%的用户用的是华为,oppo,vivo。所以先考虑集成此三个平台,再开发过程中还是有一些坑的,在此记录一下。
1.华为推送:
sdk地址:https://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush_v3.html?page=hmssdk_huaweipush_sample_code_v3_s
解压后导入开发工具中,然后打包放到公司私服上:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020041115283077.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoaWRlYmlu,size_16,color_FFFFFF,t_70打包前注意看一下这个类HuaweiMessageClientImpl的sendRequest方法,不然推送消息会中文乱码(我下的那个版本会):
注意这两个要是utf-8.
把pom.xml文件中的version改成1.0,因为这个jar包我们一般是不会改的。然后
把生成的上传到私服:
根据demo写个push的service:
package com.service.push.impl;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.huawei.push.javasdk.exception.HuaweiMesssagingException;
import com.huawei.push.javasdk.message.AndroidConfig;
import com.huawei.push.javasdk.message.AndroidNotification;
import com.huawei.push.javasdk.message.ClickAction;
import com.huawei.push.javasdk.message.ClickAction.Builder;
import com.huawei.push.javasdk.message.Message;
import com.huawei.push.javasdk.message.Notification;
import com.huawei.push.javasdk.messaging.HuaweiApp;
import com.huawei.push.javasdk.messaging.HuaweiCredential;
import com.huawei.push.javasdk.messaging.HuaweiMessaging;
import com.huawei.push.javasdk.messaging.HuaweiOption;
import com.huawei.push.javasdk.messaging.ImplHuaweiTrampolines;
import com.huawei.push.javasdk.messaging.SendResponce;
//Push通知栏消息Demo
@Service
public class HuaPushServiceImpl extends PushService{
private static final Logger logger = LoggerFactory.getLogger(HuaPushServiceImpl.class);
private static String appId = "111111";
private static String appSecret = "914ce65aaffcd68207027335bb07a6d6111";
private static Map<String,HuaweiApp> appMap = new HashMap<>();
public static void main(String[] args) throws Exception {
String title = "这样的自驾游真是让人羡慕";
String content = "美国30天,玩遍全美所有景点";
Map<String, String> extras = new HashMap<String, String>();
extras.put("type", "1");
extras.put("videoId", "181578");
extras.put("targetUid", "775923");
String intent = "intent://com.piaoquantv/pushrouter?#Intent;scheme=pushscheme;launchFlags=0x4000000;";
intent = intent + "S.data="+JSON.toJSONString(extras)+";end";
logger.info("intent:"+intent);
HuaPushServiceImpl pushService = new HuaPushServiceImpl();
PushParamModel model = new PushParamModel();
model.setTitle(title);
model.setMsgContent(content);
model.setPushBrand(PushBrandEnum.HW.getBrand());
model.setApptype(AppTypeEnum.APPSPEED.getCode());
model.setDeviceToken(new String[]{"AC2cBkB1uEJh16hUFk2W5MTCGoG7nQO1xWhBV2K_YrhEYn-fb002hLrS8iQqOsMiJ0bOrKzY1RUJWY7mrK2B2ncD7tUHgOD6DgUh3OU4xlShV0rj3zXJF3YmXU0bHJybIA"});
model.setActionType(1);
model.setActionContent(intent);
pushService.sendNotificationMessage(model);
}
/**
*
* @Title: sendNotificationMessage
* @Description: 发送通知栏消息
* @param: @param apptype app类型
* @param: @param title 消息标题
* @param: @param msgContent 消息内容
* @param: @param extras 业务信息
* @param: @param actionType 点击类型
* 1标识点击行为用户自定义;2标识打开特定URL;3标识打开本业务的APP;4标识打开富媒体信息。
* @param: @param actionContent
* 当type为1时必选 intent 当type为2时必选 url 当type为4时必选rich_resource
* @param: @param deviceToken
* 用户注册id
* @param: @throws Exception
* @return: void
* @throws
* @author:石德斌
* @date:2020年4月8日 下午9:13:14
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public PushResult sendNotificationMessage(PushParamModel model) throws Exception {
Notification notification = new Notification(model.getTitle(),model.getMsgContent());
Builder builder = ClickAction.builder();
Integer apptype = model.getApptype();
Integer actionType = HWActionType.parseDescr(ActionType.getDescr(model.getActionType()));
String actionContent = model.getActionContent();
String[] deviceToken = model.getDeviceToken();
Map<String, String> extras = model.getExtras();
builder = builder.setType(actionType);
if(ActionType.INTENT.getCode().equals(actionType)){
builder = builder.setIntent(actionContent);
}else if(ActionType.URL.getCode().equals(actionType)){
builder = builder.setUrl(actionContent);
}else if(ActionType.APP.getCode().equals(actionType)){
}else if(ActionType.RICH.getCode().equals(actionType)){
builder = builder.setRichResource(actionContent);
}
ClickAction clickAction = builder.build();
AndroidNotification androidNotification = AndroidNotification.builder().setClickAction(clickAction)
.build();
logger.info("发送消息:"+JSON.toJSONString(androidNotification));
AndroidConfig androidConfig = AndroidConfig.builder().setNotification(androidNotification).build();
Message normalNotificationMessage = buildNotificationMessage(JSON.toJSONString(extras),notification,
androidConfig,Arrays.asList(deviceToken));
SendResponce responce = sendMessage(apptype,normalNotificationMessage,false);
PushResult result = new PushResult();
if(responce.getCode() == 80000000){
result.setCode(0);
}else{
result.setCode(-1);
}
result.setMsg(responce.getMsg());
result.setResponseId(responce.getRequestId());
return result;
}
public static HuaweiApp initializeApp() {
HuaweiCredential credential = HuaweiCredential.builder().setAppId(appId).setAppSecret(appSecret).build();
// Create HuaweiOption
HuaweiOption option = HuaweiOption.builder().setCredential(credential).build();
Hua