记录一次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
    评论
好的,以下是一个简单的无activity应用,用于增强QQ的小米推送服务、vivo推送服务、OPPO推送服务、华为推送服务,并且用if语句判断省电政策是否关闭的Java代码示例: ```java public class App extends Application { private static final String TAG = "PushService"; @Override public void onCreate() { super.onCreate(); if (!isIgnoringBatteryOptimizations()) { requestIgnoreBatteryOptimizations(); } // 小米推送服务 if (shouldUseMiPush()) { MiPushClient.registerPush(this, "APP_ID", "APP_KEY"); Log.i(TAG, "MiPushClient initialized"); } // vivo推送服务 if (shouldUseVivoPush()) { PushClient.getInstance(getApplicationContext()).initialize(); Log.i(TAG, "VivoPushClient initialized"); } // OPPO推送服务 if (shouldUseOppoPush()) { PushManager.getInstance().register(this, "APP_ID", "APP_KEY"); Log.i(TAG, "OppoPushClient initialized"); } // 华为推送服务 if (shouldUseHuaweiPush()) { HMSAgent.init(this); Log.i(TAG, "HuaweiPushClient initialized"); } } private boolean isIgnoringBatteryOptimizations() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { String packageName = getPackageName(); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); if (pm != null && !pm.isIgnoringBatteryOptimizations(packageName)) { return false; } } return true; } private void requestIgnoreBatteryOptimizations() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Intent intent = new Intent(); String packageName = getPackageName(); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); if (pm != null && !pm.isIgnoringBatteryOptimizations(packageName)) { intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + packageName)); startActivity(intent); } } } private boolean shouldUseMiPush() { // 判断是否是小米设备,如果是,则返回true,否则返回false return Build.MANUFACTURER.equalsIgnoreCase("Xiaomi"); } private boolean shouldUseVivoPush() { // 判断是否是vivo设备,如果是,则返回true,否则返回false String manufacturer = Build.MANUFACTURER; String model = Build.MODEL; return (manufacturer.equalsIgnoreCase("vivo") || model.toUpperCase().startsWith("VIVO")); } private boolean shouldUseOppoPush() { // 判断是否是OPPO设备,如果是,则返回true,否则返回false return Build.MANUFACTURER.equalsIgnoreCase("OPPO"); } private boolean shouldUseHuaweiPush() { // 判断是否是华为设备,如果是,则返回true,否则返回false return Build.MANUFACTURER.equalsIgnoreCase("Huawei") || Build.MANUFACTURER.equalsIgnoreCase("Honor"); } } ``` 上述代码中,我们创建了一个名为`App`的类,继承自`Application`类,并重写了`onCreate`方法。在`onCreate`方法中,我们首先判断省电政策是否关闭,如果没有关闭,则请求关闭省电政策。然后,我们根据设备厂商的不同,选择使用小米、vivoOPPO华为推送服务中的一个或多个。在使用推送服务时,我们需要根据各个厂商的要求,进行相应的初始化操作,例如在使用小米推送服务时,需要调用`MiPushClient.registerPush`方法进行注册;在使用vivo推送服务时,需要调用`PushClient.getInstance(getApplicationContext()).initialize()`方法进行初始化;在使用OPPO推送服务时,需要调用`PushManager.getInstance().register`方法进行注册;在使用华为推送服务时,需要调用`HMSAgent.init`方法进行初始化。需要注意的是,我们在使用`shouldUseXXXPush`方法判断是否选择使用某个厂商的推送服务时,要根据实际情况进行判断。同时,如果需要使用多个厂商的推送服务,也可以在代码中添加相应的判断语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值