记录一次java集成华为,oppo,vivo推送的经历

背景:最近公司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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值