学习笔记友盟推送

友盟推送(服务端JAVA开发)

官方的文档url:
https://developer.umeng.com/docs/67966/cate/67966?spm=a213m0.14063960.9348417015.4.e6486e72P7ralU&acm=lb-zebra-622408-7938469.1003.4.7419296&scm=1003.4.lb-zebra-622408-7938469.OTHER_15797142450211_7419296

JDK-url:
http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/149296/UMDP_zh/1591943466250/java.zip


代码展示(我结合业务结合官方jdk加工了一下)

MessageDto.java

package com.fengniao.mall.thirdpart.client.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;

@Data
@Builder
@ApiModel("推送消息")
public class MessageDto implements Serializable {

    @ApiModelProperty("标题")
    @NotBlank(message = "标题不可以为空")
    private String title;

    @ApiModelProperty("内容")
    @NotBlank(message = "内容不可以为空")
    private String content;

    @ApiModelProperty("通知栏内容")
    private String ticker;

    @ApiModelProperty("描述")
    private String description;

    @ApiModelProperty("渠道包")
    private String activity;

    @ApiModelProperty("透传信息")
    private String ExtraFieldStr;

    @ApiModelProperty("是否开启测试模式")
    private Boolean hasTest;

    @ApiModelProperty("IOS OR ANDROID")
    private Boolean hasIos;

    @ApiModelProperty("token")
    private String token;
}

PushConfig.java(这个事根据xml写的配置类,可根据自身情况改写)

package com.fengniao.mall.thirdpart.push;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "umeng")
@Data
public class PushConfig {

    private String iosAppKey;

    private String iosAppMasterSecret;

    private String andAppKey;

    private String andAppMasterSecret;

    private String andActivityPage;
}

PushService.java 接口

package com.fengniao.mall.thirdpart.push;


import com.fengniao.mall.thirdpart.client.dto.MessageDto;

public interface PushService {

    //指定设备token发送数据
    String sendUnicast(MessageDto dto) throws Exception;

    //广播 每日10次(单组api下)
    String sendBroadcast(MessageDto dto) throws Exception;

    //指定别名发送数据
    String sendCustomizedcast(MessageDto dto) throws Exception;
}

PushServiceImpl.java 实现

package com.fengniao.mall.thirdpart.push;

import com.fengniao.mall.thirdpart.client.dto.MessageDto;
import com.fengniao.mall.thirdpart.push.android.AndroidBroadcast;
import com.fengniao.mall.thirdpart.push.android.AndroidCustomizedcast;
import com.fengniao.mall.thirdpart.push.android.AndroidUnicast;
import com.fengniao.mall.thirdpart.push.ios.IOSBroadcast;
import com.fengniao.mall.thirdpart.push.ios.IOSCustomizedcast;
import com.fengniao.mall.thirdpart.push.ios.IOSUnicast;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class PushServiceImpl implements PushService {

    @Autowired
    private PushConfig pushConfig;

    @Autowired
    private PushClient client;


    @Override
    public String sendUnicast(MessageDto dto) throws Exception {
        dto.setActivity(pushConfig.getAndActivityPage());
        if (StringUtils.isBlank(dto.getToken())) return "无效token无法发送";
        if (dto.getHasIos()) return sendUnicastIOS(dto);
        return sendUnicastAND(dto);
    }

    @Override
    public String sendBroadcast(MessageDto dto) throws Exception {
        dto.setHasTest(true);
        dto.setActivity(pushConfig.getAndActivityPage());
        if (dto.getHasIos()) return sendBroadcastIOS(dto);
        return sendBroadcastAND(dto);
    }

    @Override
    public String sendCustomizedcast(MessageDto dto) throws Exception {
        dto.setActivity(pushConfig.getAndActivityPage());
        if (StringUtils.isBlank(dto.getToken())) return "无效token无法发送";
        if (dto.getHasIos()) return sendIOSCustomizedcast(dto);
        return sendAndroidCustomizedcast(dto);
    }

    //deviceToken 单播IOS
    private String sendUnicastIOS(MessageDto dto) throws Exception {
        IOSUnicast unicastIOS = new IOSUnicast(pushConfig.getIosAppKey(),pushConfig.getIosAppMasterSecret());
        unicastIOS.setDeviceToken(dto.getToken());
        unicastIOS.setAlert(dto.getTitle() , dto.getTicker() , dto.getContent());
        unicastIOS.setDescription(dto.getDescription());
        unicastIOS.setBadge( 1);
        unicastIOS.setSound( "default");
        unicastIOS.setProductionMode(!dto.getHasTest());
        unicastIOS.setCustomizedField("data", dto.getExtraFieldStr());
        return client.send(unicastIOS);
    }

    //deviceToken 单播安卓
    private String sendUnicastAND(MessageDto dto) throws Exception {
        AndroidUnicast unicastAND = new AndroidUnicast(pushConfig.getAndAppKey(),pushConfig.getAndAppMasterSecret());
        unicastAND.setDeviceToken(dto.getToken());
        unicastAND.setTicker(dto.getTicker());
        unicastAND.setTitle(dto.getTitle());
        unicastAND.setText(dto.getContent());
        unicastAND.setDescription(dto.getDescription());
        unicastAND.goCustomAfterOpen(dto.getExtraFieldStr());
        unicastAND.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
        unicastAND.setProductionMode(!dto.getHasTest());
        unicastAND.setChannelActivity(dto.getActivity());
        return client.send(unicastAND);
    }

    //广播IOS
    private String sendBroadcastIOS(MessageDto dto) throws Exception {
        IOSBroadcast broadcastIOS = new IOSBroadcast(pushConfig.getIosAppKey(), pushConfig.getIosAppMasterSecret());
        broadcastIOS.setAlert(dto.getTitle() , dto.getTicker(), dto.getContent());
        broadcastIOS.setDescription(dto.getDescription());
        broadcastIOS.setBadge( 1);
        broadcastIOS.setSound( "default");
        broadcastIOS.setProductionMode(!dto.getHasTest());
        broadcastIOS.setCustomizedField("data", dto.getExtraFieldStr());
        return client.send(broadcastIOS);
    }
    //广播安卓
    private String sendBroadcastAND(MessageDto dto) throws Exception {
        AndroidBroadcast broadcastAND = new AndroidBroadcast(pushConfig.getAndAppKey(), pushConfig.getAndAppMasterSecret());
        broadcastAND.setTicker( dto.getTicker());
        broadcastAND.setTitle(dto.getTitle());
        broadcastAND.setText(dto.getContent());
        broadcastAND.setDescription(dto.getDescription());
        broadcastAND.goAppAfterOpen();
        broadcastAND.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
        broadcastAND.setProductionMode(!dto.getHasTest());
        broadcastAND.setExtraField("data", dto.getExtraFieldStr());
        //厂商通道相关参数
        broadcastAND.setChannelActivity(dto.getActivity());
        return client.send(broadcastAND);
    }

    public String sendIOSCustomizedcast(MessageDto dto) throws Exception {
        IOSCustomizedcast customizedcast = new IOSCustomizedcast(pushConfig.getIosAppKey(),pushConfig.getIosAppMasterSecret());
        customizedcast.setAlias(dto.getToken(), "phone");
        customizedcast.setAlert(dto.getTitle() , dto.getTicker() , dto.getContent());
        customizedcast.setBadge( 0);
        customizedcast.setSound( "default");
        customizedcast.setProductionMode(!dto.getHasTest());
        customizedcast.setCustomizedField("data", dto.getExtraFieldStr());
        return client.send(customizedcast);
    }

    public String sendAndroidCustomizedcast(MessageDto dto) throws Exception {
        AndroidCustomizedcast customizedcast = new AndroidCustomizedcast(pushConfig.getAndAppKey(), pushConfig.getAndAppMasterSecret());
        customizedcast.setAlias(dto.getToken(), "phone");
        customizedcast.setTicker(dto.getToken());
        customizedcast.setTitle(dto.getTitle());
        customizedcast.setText(dto.getContent());
        customizedcast.setDescription(dto.getDescription());
        customizedcast.goAppAfterOpen();
        customizedcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
        customizedcast.setProductionMode(!dto.getHasTest());
        customizedcast.setChannelActivity(dto.getActivity());
        customizedcast.setExtraField("data", dto.getExtraFieldStr());
        return client.send(customizedcast);
    }
}

官方jar直接复制到自己的项目里,官方自带DEMO.java 结合这个改造即可,文中我自己加了:data 这个参数为透传json信息,方便快捷封装得体。欢迎留言探讨

如果不成功,在client.send()方法内断电截获postBody
在这里插入图片描述
可利用这组json去官方后台校验
校验API地址:
https://developer.umeng.com/docs/67966/detail/170938#h1-api-5
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无厘头の码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值