java版服务端接入华为消息推送3.0接口

华为Push Kit V1接口将于2019年11月30日全网下线,改用最新接口

详情戳👇

注册成为开发者

在开发应用前需要在华为开发者联盟网站上注册成为开发者并完成实名认证,具体方法可参考“帐号注册认证”。

接入3.0接口使用官网的SDK

先在华为开发者联盟申请Push服务获取的服务参数,申请步骤请自行百度

  1. appId
  2. appSecret

官网没有出SDK专门的文档,所以需要先下载官网提供的示例代码,使用maven打包成jar包,引入到自己的项目中

服务端示例代码下载地址:

传送门👇
下载下来的示例代码有6种语言的,这是使用java版本的
下载下来的示例代码需要注意的是,发送的消息不能使用中文,我们稍作修改一下

  1. 先修改一下pom文件,打包时忽略掉Test类
    在这里插入图片描述
  2. 修改HuaweiMessageClientImpl实现类
    StringEntity的类默认是ISO-8859-1编码格式的 如图
    在这里插入图片描述
    3.红色标记的地方加上utf-8,就可以发送中文的消息了
    在这里插入图片描述
    4.使用maven打包后引入到自己的项目中

然后使用SDK中提供的方法

返回的实体自己定义就好
http接口地址都在SDK的配置文件中,无需添加,只需要提供联盟里申请的appId,appSecret即可
具体的参数描述在官网都有传送门👇
accessToken 过期后重新获取的方法在示例代码的单元测试中也可找到,自行研究,这里只提供发送消息的步骤

@Component
@Slf4j
public class PushHwMsg {

    private HuaweiOption option;

    private HuaweiApp app;

    @Value("${huwei.appId}")
    private String appId;

    @Value("${huawei.appSecret}")
    private String appSecret;

    /**
     * 初始化时加载HuaweiApp,调用SDK包中的方法,获取accessToken
     */
    @PostConstruct
    public void init() {
        final HuaweiCredential credential = HuaweiCredential.builder()
                .setAppId(appId)
                .setAppSecret(appSecret)
                .build();

        option = HuaweiOption.builder()
                .setCredential(credential)
                .build();
        app = HuaweiApp.initializeApp(option);
    }


    public PushMsgHWRsp sendPushMessage(List<String> tokenList, PushMsgReq req) throws IOException, HuaweiMesssagingException {
        PushMsgHWRsp pushMsgHWRsp = new PushMsgHWRsp();
        Message message = getNormalMessage(tokenList, req);
        SendResponce responce = HuaweiMessaging.getInstance(app).send(message, false);
        log.info("推送消息后华为返回的 response {}", JSON.toJSONString(responce));
        pushMsgHWRsp.setRequestId(responce.getRequestId());
        pushMsgHWRsp.setMsg(responce.getMsg());
        pushMsgHWRsp.setCode(responce.getCode());
        return pushMsgHWRsp;
    }


    /**
     * 华为3.0接口推送消息,推送时需要传递的参数
     *
     * @param tokenList
     * @param req
     * @return
     * @throws UnsupportedEncodingException
     */
    private static Message getNormalMessage(List<String> tokenList, PushMsgReq req) throws UnsupportedEncodingException {
        Notification notification = new Notification(new String(req.getTitle().getBytes("utf-8"), "utf-8"), req.getMsg());
        ClickAction clickAction = ClickAction.builder()
                .setType(Integer.valueOf(req.getType()))//设置点击行为的类型: 1标识点击行为用户自定义; 2标识打开特定URL; 3标识打开本业务的APP; 4标识打开富媒体信息;
                .setUrl(req.getUrl()) //打开特定url
                .setIntent(req.getIntent())//当type为1时必选 自定义页面
                .build();
        BadgeNotification badgeNotification = new BadgeNotification(99, "Classic");
        AndroidNotification androidNotification = AndroidNotification.builder()
                .setTitle(new String(req.getTitle().getBytes("utf-8"), "utf-8"))//标题
                .setBody(req.getMsg())//消息
                .setColor("#FFFFFF")
                // .setSound("/raw/shake")
                .setClickAction(clickAction)
                //.setTitleLocKey("demo_title_new2")
                //.addTitleLocArgs("title_args")
                //.addTitleLocArgs("title_args2")
                // .setBodyLocKey("demo_content_new2")
                // .addBodyLocArgs("content_args")
                // .addBodyLocArgs("content_args2")
                //.setChannelId("RingRing")
                .setNotifySummary(req.getSubtitle())
                .setStyle(0) // 0:默认样式 1:大文本样式
                //.setBigTitle(req.getTitle()) //style为1时必选
                //.setBigBody(req.getMsg()) //style为1时必选
                //.setBigPicture("https://developer-portalres-drcn.dbankcdn.com/system/modules/org.opencms.portal.template.core/resources/images/icon_Promotion.png")
                .setAutoClear(86400000)
                .setNotifyId(486)
                //.setBadge(badgeNotification)
                .build();

        AndroidConfig androidConfig = AndroidConfig.builder()
                .setCollapseKey(-1)
                .setTtl("1448s")
                .setBiTag(req.getTitle())//消息回执需要传的
                .setFastAppTargetType(1)
                .setNotification(androidNotification)
                .build();

        String data = "k=v,k=v";
        Message message = Message.builder()
                .setNotification(notification)
                .setAndroidConfig(androidConfig)
                .addAllToken(tokenList)
                .build();

        return message;
    }


}

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值