赞
踩
本代码适用于unipush1.0版本的个推使用
先在项目pom中导入个推依赖
- <!-- APP个推 -->
- <dependency>
- <groupId>com.getui.push</groupId>
- <artifactId>restful-sdk</artifactId>
- <version>1.0.0.4</version>
- </dependency>
推送配置类:推送配置从配置文件中读取
- import com.getui.push.v2.sdk.ApiHelper;
- import com.getui.push.v2.sdk.GtApiConfiguration;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
-
- /**
- * 个推推送类
- */
- @Configuration
- public class GTPushConfig {
-
- @Value("${push.app_id}")
- private String appId;
-
- @Value("${push.app_key}")
- private String appKey;
-
- @Value("${push.master_secret}")
- private String masterSecret;
-
- @Bean(name = "myApiHelper")
- public ApiHelper apiHelper() {
- // 设置httpClient最大连接数,当并发较大时建议调大此参数。或者启动参数加上 -Dhttp.maxConnections=200
- System.setProperty("http.maxConnections", "200");
-
- GtApiConfiguration apiConfiguration = new GtApiConfiguration();
- // 填写应用配置
- apiConfiguration.setAppId(appId);
- apiConfiguration.setAppKey(appKey);
- apiConfiguration.setMasterSecret(masterSecret);
- // 接口调用前缀,请查看文档: 接口调用规范 -> 接口前缀, 可不填写appId
- // 默认为https://restapi.getui.com/v2
- apiConfiguration.setDomain("https://restapi.getui.com/v2/");
- // 实例化ApiHelper对象,用于创建接口对象
- ApiHelper apiHelper = ApiHelper.build(apiConfiguration);
- return apiHelper;
- }
- }

推送集成工具类:注意厂商推送的Intent配置里的component=com.xx.xx改成自己的安卓打包包名,
该推送包含了华为、荣耀厂商推送角标,已经测试过正常显示角标
- import com.getui.push.v2.sdk.ApiHelper;
- import com.getui.push.v2.sdk.api.PushApi;
- import com.getui.push.v2.sdk.common.ApiResult;
- import com.getui.push.v2.sdk.dto.CommonEnum;
- import com.getui.push.v2.sdk.dto.req.Audience;
- import com.getui.push.v2.sdk.dto.req.AudienceDTO;
- import com.getui.push.v2.sdk.dto.req.Settings;
- import com.getui.push.v2.sdk.dto.req.Strategy;
- import com.getui.push.v2.sdk.dto.req.message.PushChannel;
- import com.getui.push.v2.sdk.dto.req.message.PushDTO;
- import com.getui.push.v2.sdk.dto.req.message.PushMessage;
- import com.getui.push.v2.sdk.dto.req.message.android.AndroidDTO;
- import com.getui.push.v2.sdk.dto.req.message.android.ThirdNotification;
- import com.getui.push.v2.sdk.dto.req.message.android.Ups;
- import com.getui.push.v2.sdk.dto.req.message.ios.Alert;
- import com.getui.push.v2.sdk.dto.req.message.ios.Aps;
- import com.getui.push.v2.sdk.dto.req.message.ios.IosDTO;
- import com.getui.push.v2.sdk.dto.res.TaskIdDTO;
- import com.opencloud.common.utils.JSONUtils;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Component;
- import javax.annotation.Resource;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- @Slf4j
- @Component
- public class UniPushUtils {
-
- // 消息推送
- public static final String MESSAGE_PUSH = "1";
- // 离线推送
- public static final String OFFLINE_PUSH = "2";
-
- @Resource(name = "myApiHelper")
- private ApiHelper myApiHelper;
-
- /**
- * 消息推送(离线推送)单cid推送
- */
- public ApiResult<Map<String, Map<String, String>>> pushToSingleByCid(String cid, String title, String content, String linkUrl, String type) {
- PushDTO<Audience> pushDTO = this.buildPushDTO(title, content, linkUrl, type);
- // 设置接收人信息
- Audience audience = new Audience();
- pushDTO.setAudience(audience);
- audience.addCid(cid); // cid
- // 进行cid单推
- PushApi pushApi = myApiHelper.creatApi(PushApi.class);
- ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);
- if (apiResult.isSuccess()) {
- // success
- log.info("推送成功");
- System.out.println(apiResult.getData());
- } else {
- // failed
- log.error("推送失败");
- System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
- }
- return apiResult;
- }
-
- /**
- * 消息推送(离线推送)别名推送
- */
- public ApiResult<Map<String, Map<String, String>>> pushToSingleByAlias(String alias, String title, String content, String linkUrl, String type) {
- PushDTO<Audience> pushDTO = this.buildPushDTO(title, content, linkUrl, type);
- // 设置接收人信息
- Audience audience = new Audience();
- pushDTO.setAudience(audience);
- audience.addAlias(alias); // cid
- // 进行cid单推
- PushApi pushApi = myApiHelper.creatApi(PushApi.class);
- ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByAlias(pushDTO);
- if (apiResult.isSuccess()) {
- // success
- log.info("推送成功");
- System.out.println(apiResult.getData());
- } else {
- // failed
- log.error("推送失败");
- System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
- }
- return apiResult;
- }
-
- /**
- * cid批量推
- * @param cidList
- * @param title
- * @param content
- */
- public ApiResult<Map<String, Map<String, String>>> pushListByCid(List<String> cidList, String title, String content, String linkUrl, String type) {
- //批量发送
- AudienceDTO audienceDTO = new AudienceDTO();
-
- PushDTO<Audience> pushDTO = this.buildPushDTO(title, content, linkUrl, type);
-
- PushApi pushApi = myApiHelper.creatApi(PushApi.class);
- ApiResult<TaskIdDTO> createApiResult = pushApi.createMsg(pushDTO);
- if (! createApiResult.isSuccess()) {
- log.error("推送:创建消息失败"+createApiResult.getMsg());
- }
- // 设置接收人信息
- Audience audience = new Audience();
- pushDTO.setAudience(audience);
- audience.setCid(cidList);
-
- audienceDTO.setAudience(audience);
- audienceDTO.setTaskid(createApiResult.getData().getTaskId());
- audienceDTO.setAsync(true);
-
- ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushListByCid(audienceDTO);
- if (apiResult.isSuccess()) {
- // success
- log.info("推送成功");
- } else {
- // failed
- log.error("推送失败");
- System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
- }
- return apiResult;
- }
-
- /**
- * 推送所有用户
- *
- * @param title
- * @param content
- * @param linkUrl
- * @return
- */
- public ApiResult<TaskIdDTO> pushAll(String title, String content, String linkUrl, String type) {
- PushDTO<String> pushDTO = this.pushDTOAll(title, content, linkUrl, type);
- // 进行cid单推
- PushApi pushApi = myApiHelper.creatApi(PushApi.class);
- ApiResult<TaskIdDTO> apiResult = pushApi.pushAll(pushDTO);
- if (apiResult.isSuccess()) {
- // success
- log.info("推送成功");
- System.out.println(apiResult.getData());
- } else {
- // failed
- log.error("推送失败");
- System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
- }
- return apiResult;
- }
-
- /**
- * 推送全部组装消息实体
- *
- * @param title
- * @param content
- * @param linkUrl
- * @return
- */
- private PushDTO<String> pushDTOAll(String title, String content, String linkUrl, String type) {
- Map<String, String> map = new HashMap<>();
- map.put("title", title);
- map.put("content", content);
- map.put("linkUrl", linkUrl);
- map.put("type", type);
- // 转json对象
- String payload = JSONUtils.toJSONString(map);
-
- PushDTO<String> pushDTO = new PushDTO<String>();
- pushDTO.setRequestId(System.currentTimeMillis() + "");
- pushDTO.setGroupName("g-name1");
-
- Settings settings = new Settings();
- settings.setTtl(3600000);
- Strategy strategy = new Strategy();
- strategy.setSt(1);
- settings.setStrategy(strategy);
-
- pushDTO.setSettings(settings);
-
- //TODO 安卓IOS应用在线走个推通道
- PushMessage pushMessage = new PushMessage();
- Map<String, Object> mapTC = new HashMap<>();
- mapTC.put("title", title);
- mapTC.put("content", content);
- mapTC.put("linkUrl", linkUrl);
- mapTC.put("type", type);
- mapTC.put("payload", payload);
- String jsonTC = JSONUtils.toJSONString(mapTC);
- pushMessage.setTransmission(jsonTC);
- pushDTO.setPushMessage(pushMessage);
-
- //安卓应用离线走厂商
- PushChannel pushChannel = new PushChannel();
- AndroidDTO androidDTO = new AndroidDTO();
- Ups ups = new Ups();
- ThirdNotification thirdNotification = new ThirdNotification();
- thirdNotification.setClickType(CommonEnum.ClickTypeEnum.TYPE_INTENT.type);
- thirdNotification.setTitle(title);
- thirdNotification.setBody(content);
- thirdNotification.setIntent("intent://io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000;" +
- "component=com.xx.xx/io.dcloud.PandoraEntry;S.UP-OL-SU=true;" +
- "S.title="+title+";" +
- "S.content="+content+";" +
- "S.payload="+payload+";end");
- ups.setNotification(thirdNotification);
-
- //设置options 方式二
- Map<String, Map<String, Object>> options = new HashMap<String, Map<String, Object>>();
- Map<String, Object> all = new HashMap<String, Object>();
- all.put("channel", "default");
- all.put("badgeAddNum", 1);
- all.put("badgeClass", "com.getui.demo.GetuiSdkDemoActivity");
- options.put("ALL", all);
- Map<String, Object> hw = new HashMap<String, Object>();
- options.put("HW", hw);
- hw.put("/message/android/notification/badge/class", "io.dcloud.PandoraEntry");
- hw.put("/message/android/notification/badge/add_num",1);
- Map<String, Object> ho = new HashMap<String, Object>();
- options.put("HO", ho);
- ho.put("/message/android/notification/badge/badgeClass", "io.dcloud.PandoraEntry");
- ho.put("/message/android/notification/badge/addNum",1);
- ups.setOptions(options);
-
-
- androidDTO.setUps(ups);
- pushChannel.setAndroid(androidDTO);
-
- IosDTO iosDTO = new IosDTO();
- Aps aps = new Aps();
- Alert alert = new Alert();
- alert.setTitle(title);
- alert.setBody(content);
- aps.setContentAvailable(0);
- aps.setSound("default");
- aps.setAlert(alert);
- iosDTO.setPayload(payload);
- iosDTO.setAps(aps);
- iosDTO.setType("notify");
- iosDTO.setAutoBadge("+1");//苹果角标
- pushChannel.setIos(iosDTO);
- pushDTO.setPushChannel(pushChannel);
-
- return pushDTO;
- }
-
- /**
- * 消息参数模板
- */
- private PushDTO<Audience> buildPushDTO(String title, String content, String linkUrl, String type) {
- Map<String, String> map = new HashMap<>();
- map.put("title", title);
- map.put("content", content);
- map.put("linkUrl", linkUrl);
- map.put("type", type);
- // 转json对象
- String payload = JSONUtils.toJSONString(map);
-
- PushDTO<Audience> pushDTO = new PushDTO<Audience>();
- pushDTO.setRequestId(System.currentTimeMillis() + "");
- pushDTO.setGroupName("g-name1");
-
- Settings settings = new Settings();
- settings.setTtl(3600000);
- Strategy strategy = new Strategy();
- strategy.setSt(1);
- settings.setStrategy(strategy);
-
- pushDTO.setSettings(settings);
-
- //TODO 安卓IOS应用在线走个推通道
- PushMessage pushMessage = new PushMessage();
- Map<String, Object> mapTC = new HashMap<>();
- mapTC.put("title", title);
- mapTC.put("content", content);
- mapTC.put("linkUrl", linkUrl);
- mapTC.put("type", type);
- mapTC.put("payload", payload);
- String jsonTC = JSONUtils.toJSONString(mapTC);
- pushMessage.setTransmission(jsonTC);
- pushDTO.setPushMessage(pushMessage);
-
- //TODO 安卓应用离线走厂商
- PushChannel pushChannel = new PushChannel();
- AndroidDTO androidDTO = new AndroidDTO();
- Ups ups = new Ups();
- ThirdNotification thirdNotification = new ThirdNotification();
- thirdNotification.setClickType(CommonEnum.ClickTypeEnum.TYPE_INTENT.type);
- thirdNotification.setTitle(title);
- thirdNotification.setBody(content);
- thirdNotification.setIntent("intent://io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000;" +
- "component=com.xx.xx/io.dcloud.PandoraEntry;S.UP-OL-SU=true;" +
- "S.title="+title+";" +
- "S.content="+content+";" +
- "S.payload="+payload+";end");
- ups.setNotification(thirdNotification);
-
- //设置options 方式二
- Map<String, Map<String, Object>> options = new HashMap<String, Map<String, Object>>();
- Map<String, Object> all = new HashMap<String, Object>();
- all.put("channel", "default");
- all.put("badgeAddNum", 1);
- all.put("badgeClass", "com.getui.demo.GetuiSdkDemoActivity");
- options.put("ALL", all);
- Map<String, Object> hw = new HashMap<String, Object>();
- options.put("HW", hw);
- hw.put("/message/android/notification/badge/class", "io.dcloud.PandoraEntry");
- hw.put("/message/android/notification/badge/add_num",1);
- Map<String, Object> ho = new HashMap<String, Object>();
- options.put("HO", ho);
- ho.put("/message/android/notification/badge/badgeClass", "io.dcloud.PandoraEntry");
- ho.put("/message/android/notification/badge/addNum",1);
- ups.setOptions(options);
-
-
- androidDTO.setUps(ups);
- pushChannel.setAndroid(androidDTO);
-
- //TODO ios离线推送
- IosDTO iosDTO = new IosDTO();
- Aps aps = new Aps();
- Alert alert = new Alert();
- alert.setTitle(title);
- alert.setBody(content);
- aps.setContentAvailable(0);
- aps.setSound("default");
- aps.setAlert(alert);
- iosDTO.setPayload(payload);
- iosDTO.setAps(aps);
- iosDTO.setType("notify");
- iosDTO.setAutoBadge("+1");
- pushChannel.setIos(iosDTO);
- pushDTO.setPushChannel(pushChannel);
- return pushDTO;
- }
-
- /**
- * 离线通知消息参数模板
- */
- private PushDTO<Audience> offlinePushDTO(String title, String content, String linkUrl, String type) {
- PushDTO<Audience> pushDTO = new PushDTO<>();
- // 设置推送参数
- //requestid需要每次变化唯一
- pushDTO.setRequestId(System.currentTimeMillis() + "");
- pushDTO.setGroupName("wxb-group");
- // PushMessage在线走个推通道才会起作用的消息体
-
- Map<String, String> map = new HashMap<>();
- map.put("title", title);
- map.put("content", content);
- map.put("linkUrl", linkUrl);
- map.put("type", type);
-
- PushMessage pushMessage = new PushMessage();
- pushDTO.setPushMessage(pushMessage);
- Map<String, Object> mapTC = new HashMap<>();
- mapTC.put("title", title);
- mapTC.put("content", content);
- mapTC.put("payload", map);
- String jsonTC = JSONUtils.toJSONString(mapTC);
- System.err.println(jsonTC);
- pushMessage.setTransmission(jsonTC);
- log.info("pushDTO:{}", pushDTO);
- return pushDTO;
- }
- }

单元测试参考:
- //String alias = "29f27029ec9245a49335c02bff224952";//ios
- String cid = "ba0c214fdf43f434gfg44545dghg4ttt";//iosk
- String title = "“金点子”征集活动上线啦!";
- String content = "2023年公司工作会暨职工代表大会金点子征集活动上线!点击参与“金点子”征集活动,赢精美礼品!";
- String linkUrl = "/pages/viewactivityweb/viewactivityweb?";
- String type = "click";
- //ApiResult<Map<String, Map<String, String>>> map = uniPushUtils.pushToSingleByAlias(cid,title,content,linkUrl,type);
- ApiResult<TaskIdDTO> map = uniPushUtils.pushAll(title,content,linkUrl,type);
APP端代码仅供参考:
App.vue中处理消息监听:
- //消息推送监听处理
- //#ifdef APP-PLUS
- plus.push.addEventListener("click", function(msg) {
- var payload = {};
- var platform = uni.getSystemInfoSync().platform;
- if (platform == "ios") {
- if (msg['type'] == "click") {
- //通过苹果服务器通知过来的消息
- payload = msg['payload'];
- } else {
- //通过个推透传,创建本地通知的消息
- payload = JSON.parse(JSON.parse(msg.payload));
- }
- } else if (platform == 'android') {
- payload = msg.payload;
- }
- //跳转对应页面
- setTimeout(function() {
- if (payload.linkUrl) {
- uni.navigateTo({
- url: payload.linkUrl,
- })
- }
- }, 1000)
- }, false);
-
- //在线消息推送监听处理
- plus.push.addEventListener("receive", function(msg) {
- console.log("receive:" + msg)
- var platform = uni.getSystemInfoSync().platform;
- let payload = msg.payload
- if (platform == "ios") {
- if (msg.type == "receive") // 这里判断触发的来源,否则一直推送。
- {
- //ios平台应用在前台时,不能收到通知消息,只能走透传,在创建一条本地消息 plus.push.createMessage(msg.content, JSON.stringify(msg.payload), { title: msg.title });
- var options = {
- cover: false,
- title: msg.title
- };
- //创建一条推送消息
- plus.push.createMessage(msg.content, JSON.stringify(msg.payload), options);
- //添加在线消息提示点
- getApp().globalData.badgeNumber = getApp().globalData.badgeNumber+1;
- plus.runtime.setBadgeNumber(getApp().globalData.badgeNumber);
- }
- } else if (platform == 'android') {
- var options = {
- cover: false,
- title: msg.title
- };
- //创建一条推送消息
- plus.push.createMessage(msg.content, JSON.stringify(msg.payload), options);
- //添加在线消息提示点
- getApp().globalData.badgeNumber = getApp().globalData.badgeNumber+1;
- plus.runtime.setBadgeNumber(getApp().globalData.badgeNumber);
- }
-
- }, false);
- // #endif

App端绑定别名以及处理清除消息提示点:
新建getui.js
- function igexinTool() {
- var isAndorid, PushManager, context, Instance, GeTuiSdk, UIApplication, oldNum;
- //#ifdef APP-PLUS
- if (plus.os.name == 'Android') {
- isAndorid = true;
- } else {
- isAndorid = false;
- }
-
- if (isAndorid) {
- PushManager = plus.android.importClass("com.igexin.sdk.PushManager");
- context = plus.android.runtimeMainActivity().getContext();
- Instance = PushManager.getInstance();
- } else {
- GeTuiSdk = plus.ios.importClass("GeTuiSdk");
- }
- // #endif
- this.bindAlias = function(alias) {
- if (isAndorid) {
- Instance.bindAlias(context, alias);
- } else {
- GeTuiSdk.bindAliasandSequenceNum(alias, alias);
- }
- }
-
- this.unbindAlias = function(alias) {
- if (isAndorid) {
- Instance.unBindAlias(context, alias, true);
- } else {
- GeTuiSdk.unbindAliasandSequenceNumandIsSelf(alias, alias, true);
- }
- }
-
- this.getVersion = function() {
- if (isAndorid) {
- return Instance.getVersion(context);
- } else {
- return GeTuiSdk.version;
- }
- }
-
- //开启推送
- this.turnOnPush = function() {
- if (isAndorid) {
- Instance.turnOnPush(context);
- } else {
- GeTuiSdk.setPushModeForOff(false);
- }
- }
-
- //关闭推送
- this.turnOffPush = function() {
- if (isAndorid) {
- Instance.turnOffPush(context);
- } else {
- GeTuiSdk.setPushModeForOff(true);
- }
- }
-
- //清除消息角标
- this.clearnBadge = function() {
- getApp().globalData.badgeNumber = 0;
- //清除角标
- if (isAndorid) {
- //设置应用图标的数量
- plus.runtime.setBadgeNumber(0);
- plus.runtime.setBadgeNumber(-1);
- } else {
- //设置应用图标的数量
- plus.runtime.setBadgeNumber(0);
- GeTuiSdk.setBadge(0);
- }
- }
-
- }
- export default igexinTool

清除消息角标:
App.vue引入js
import igexinTool from '@/config/getui.js'
- onShow: function() {
- //清除消息角标
- var tool = new igexinTool();
- tool.clearnBadge();
- },
绑定推送别名:
在需要绑定别名的业务逻辑页面引入js
import igexinTool from '@/config/getui.js'
- var tool = new igexinTool();
- tool.bindAlias('需要绑定的别名 如:用户ID');
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。