uniapp消息推送-个推V2

V1只能在纯公网环境下使用,V2没有限制

开发前必读-个推文档中心

<dependency>
   <groupId>com.getui.push</groupId>
   <artifactId>restful-sdk</artifactId>
   <version>1.0.0.8</version>
</dependency>
------------------------------------------------------------------------------------
package org.jeecg.transport.push;
 
import com.getui.push.v2.sdk.ApiHelper;
import com.getui.push.v2.sdk.GtApiConfiguration;
import com.getui.push.v2.sdk.api.PushApi;
import lombok.Data;
 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
 
/**
 * 个推应用信息
 */
 
@Data
@Component
public class GeTuiConfig {
 
    @Value("${uniPush.AppID}")
    private String appID;
    @Value("${uniPush.AppKey}")
    private String appKey;
    @Value("${uniPush.AppSecret}")
    private String appSecret; 
    @Value("${uniPush.MasterSecret}")
    private String masterSecret;
    @Value("${uniPush.Host}")
    private String host;
 
    /**
     * 个推接口实例化
     * @return
     */
    @Bean(name = "onlyPushApi")
    public PushApi pushApi() {
        GtApiConfiguration apiConfiguration = new GtApiConfiguration();
        //填写应用配置,参数在“Uni Push”下的“应用配置”页面中获取
        apiConfiguration.setAppId(appID);
        apiConfiguration.setAppKey(appKey);
        apiConfiguration.setMasterSecret(masterSecret);
        //实例化ApiHelper对象,用于创建接口对象
        ApiHelper apiHelper = ApiHelper.build(apiConfiguration);
        //创建对象,建议复用。目前有PushApi、StatisticApi、UserApi
        PushApi pushApi = apiHelper.creatApi(PushApi.class);
        return pushApi;
    }
 
}
-----------------------------------------------------------------------------------------
package org.jeecg.transport.push;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.getui.push.v2.sdk.api.PushApi;
import com.getui.push.v2.sdk.common.ApiResult;
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.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.GTNotification;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
 
import java.util.List;
import java.util.Map;
 
/**
 * 个推工具类
 */
@Slf4j
@Service
public class GeTuiUtils {
 
    @Autowired
    PushApi pushApi;
 
    /**
     * 单cid推送
     *
     * @param cid
     * @param title
     * @param content
     * @return
     */
    public boolean pushToSingleByCid(String cid, String title, String content,String payload) {
        //推送消息体
        PushDTO<Audience> pushDTO = this.buildPushDTO(title, content,payload);
        //设置接收人信息
        Audience audience = new Audience();
        pushDTO.setAudience(audience);
        audience.addCid(cid);// cid
        //进行cid单推
        ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);
        if (apiResult.isSuccess()) {
            log.info("Push succeeded. cid:" + cid + ",msg:" + apiResult.getMsg() + ",data:" + apiResult.getData());
            return true;
        } else {
            log.info("Push failed. cid:" + cid + ",code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
            return false;
        }
    }
 
    /**
     * cid批量推送
     *
     * @param cidList
     * @param title
     * @param content
     * @return
     */
    public boolean pushListByCid(List<String> cidList, String title, String content, String payload) {
        //批量发送
        AudienceDTO audienceDTO = new AudienceDTO();
        PushDTO<Audience> pushDTO = this.buildPushDTO(title, content,payload);
 
        //创建消息
        ApiResult<TaskIdDTO> createApiResult = pushApi.createMsg(pushDTO);
        if (!createApiResult.isSuccess()) {
            log.info("批量推送:创建消息失败" + createApiResult.getMsg());
            return false;
        }
        // 设置接收人信息
        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()) {
            System.out.println("Batch push succeeded. msg:" + apiResult.getMsg() + ",data:" + apiResult.getData());
            return true;
        } else {
            System.out.println("Batch push failed. code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
            return false;
        }
    }
 
    /**
     * 构建推送消息体
     *
     * @param title
     * @param content
     * @return
     */
    private PushDTO<Audience> buildPushDTO(String title, String content,String payload) {
        PushDTO<Audience> pushDTO = new PushDTO<>();
        // 设置推送参数
        pushDTO.setRequestId(System.currentTimeMillis() + "");
        pushDTO.setGroupName("test-group");
 
        //配置推送条件
        Settings settings = new Settings();
        pushDTO.setSettings(settings);
        //消息有效期,走厂商消息需要设置该值
        settings.setTtl(3600000);
 
        //安卓在线通道走个推推送时的消息体(在线通道不支持ios)
        PushMessage pushMessage = new PushMessage();
        pushDTO.setPushMessage(pushMessage);
        //通知消息
        JSONObject trans = new JSONObject();
        trans.put("title", title);
        trans.put("content", content);
        trans.put("payload", payload);
        pushMessage.setTransmission(JSON.toJSONString(trans));
 
        //设置离线推送时的消息体
        PushChannel pushChannel = new PushChannel();
 
        //安卓离线厂商通道推送的消息体
        AndroidDTO androidDTO = new AndroidDTO();
        Ups ups = new Ups();
        //通知消息
        ThirdNotification thirdNotification = new ThirdNotification();
        ups.setNotification(thirdNotification);
        thirdNotification.setTitle(title);
        thirdNotification.setBody(content);
        thirdNotification.setClickType("intent");
        thirdNotification.setIntent("intent://com.getui.push/detail?#Intent;scheme=gtpushscheme;launchFlags=0x4000000;package=com.getui.demo;component=com.getui.demo/com.getui.demo.DemoActivity;S.payload=payloadStr;end");
 
 
        androidDTO.setUps(ups);
        pushChannel.setAndroid(androidDTO);
 
        //ios离线apn通道推送的消息体
        Alert alert = new Alert();
        alert.setTitle(title);
        alert.setBody(content);
        Aps aps = new Aps();
        aps.setContentAvailable(0);//0表示普通通知消息(默认为0);1表示静默推送(无通知栏消息),静默推送时不需要填写其他参数。苹果建议1小时最多推送3条静默消息
        aps.setSound("default");//自定义铃声:系统铃声设置为:default; 无声设置为:com.gexin.ios.silence,或不填
        aps.setAlert(alert);
        IosDTO iosDTO = new IosDTO();
        iosDTO.setAps(aps);
        iosDTO.setType("notify");
        iosDTO.setPayload(payload);
        pushChannel.setIos(iosDTO);
 
        pushDTO.setPushChannel(pushChannel);
        return pushDTO;
    }
}
App.vue
-----------------------------------------------------------------------------------------
<script>
    import permision from "@/common/permission.js"
    import { action } from '@/utils/request.js';
    export default {
        onLaunch: function() {
            console.log('App Launch')
            const that = this;
            plus.push.setAutoNotification(true);
            uni.startLocationUpdate({
                "type":"wgs84",
                success: res => { 
                },
                fail(res) { 
                  console.log(`startLocationUpdate fail: ${JSON.stringify(res)}`);
                }
            });
            uni.onLocationChange(function(res2) {
                if (uni.getStorageSync('userInfo')) {
                    var currentTime =  new Date().getTime();
                    //获取上次执行的时间
                    var oldTime = uni.getStorageSync('oldTime');
                    //判断当前的位置是否和上次位置不一致,并且间隔时间超过5s
                    if(currentTime - oldTime>5000){
                      //缓存当前执行的时间
                      uni.setStorageSync('oldTime',currentTime);
                      //将位置信息上传后台的自己的代码
                      let userinfo = JSON.parse(uni.getStorageSync('userInfo'));
                      var info = plus.push.getClientInfo();
                      var clientId =  info.clientid;
                      action('post', '/hardware/acceptJSON', {
                          fun: 'location',
                          realname: userinfo.realname,
                          username: userinfo.username,
                          lng: res2.longitude,
                          lat: res2.latitude,
                          clientId: clientId
                      }, false)
                    }
                    
                }
            });
            plus.push.addEventListener("click", function(msg) {
                if(permision.isIOS) {
                    console.log("ios:click收到"+JSON.parse(JSON.stringify(msg)).payload);
                    var obj = JSON.parse(JSON.stringify(msg)).payload;
                    that.toPushMessagePage(obj.data ? obj.data:obj);
                } else {
                    console.log("安卓:click收到"+JSON.parse(JSON.stringify(msg)));
                    var obj = JSON.parse(JSON.stringify(msg)).payload;
                    that.toPushMessagePage(obj.data ? obj.data:obj);
                } 
            }); 
            plus.push.addEventListener('receive',(message)=>{  
                console.log("receive收到")
                //收到透传消息,执行该事件
               let payload = message.payload;//自定义内容获取
               let text = message.payload.text;
               
               if(permision.isIOS) {
                   console.log("ios:receive收到")
                   let payload = message.payload;//自定义内容获取
                   let text = message.content;
                   that.createLocalMessage(text,payload);
               } else {
                   console.log("安卓收到")
                   that.toPushMessagePage(payload);
               }
            })
        },
        onShow: function() { 
            
        },
        methods: {
            createLocalMessage(content,data) {
                console.log("ios开始创建本地消息了")
                plus.push.createMessage(content,{
                    "data": data
                });
            },
            toPushMessagePage(payload) {
                if(typeof payload == 'object') {
                    payload = JSON.stringify(payload)
                }
                uni.setStorageSync("obj", payload);
                uni.navigateTo({
                    url: `../pointposition/push`
                })
            },
        },
        onHide: function() {
            console.log('App Hide')
        }
    }
</script>
 
<style>
    /*每个页面公共css */
    @import './common/uni.css';
 
    page {
        width: 100%;
        height: 100%;
        background-color: #F5F6FA;
    }
 
    .content {
        background-color: #F5F6FA;
    }
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值