目录

        一、引入maven依赖

        二、极光推送工具类 JPushUtil

        三、调用工具类

        四、遇到问题

开发移动端app时,需要系统进行即时通讯、消息通知提醒,这时候就用到了:极光推送

我这里使用的是springboot简单贴下代码

原文找不到了~~,东拼西凑的整理一篇完整的,已经测试过了,直接用就OK了

一、引入maven依赖

<dependency>
     <groupId>cn.jpush.api</groupId>
     <artifactId>jpush-client</artifactId>
     <version>3.3.9</version>
</dependency>

二、极光推送工具类 JPushUtil

APP_KEY,MASTER_SECRET:需要去极光推送官网,注册个人开发者,创建推送应用获取到密钥。

 极光推送工具类:我这边是根据和移动端约定的别名alias来推送消息的。

小伙伴们需要发送all,android,ios,等用户直接修改Platform,还可以根据rid,alias等来进行约定的推送目标,直接修改Audience。

还有其他需要,可以浏览极光官方文档作相应的修改。传送:极光文档

package com.xyhsoft.ygt.yqjj.web.utils;

import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 极光推送工具类
 * @Author stx
 * @Date 2022/8/18/0018 16:08
 */
@Slf4j
@Component
public class JPushUtil {

    @Value("${jPush.app-key}")
    private String APP_KEY;
    @Value("${jPush.master-secret}")
    private String MASTER_SECRET;

    //极光推送>>All所有平台
    public void jPush(Map<String,String> param) {
        //创建JPushClient
        JPushClient jpushClient = new JPushClient(MASTER_SECRET,APP_KEY);
        //创建option
        PushPayload payload = PushPayload.newBuilder()
                .setPlatform(Platform.all())  //所有平台的用户
                .setAudience(Audience.alias(param.get("alias")))
                .setNotification(Notification.newBuilder()
                        .addPlatformNotification(IosNotification.newBuilder() //发送ios
                                .setAlert(param.get("msg")) //消息体
                                .setBadge(+1)
                                .setSound("happy") //ios提示音
                                .addExtras(param) //附加参数
                                .build())
                        .addPlatformNotification(AndroidNotification.newBuilder() //发送android
                                .addExtras(param) //附加参数
                                .setAlert(param.get("msg")) //消息体
                                .setTitle(param.get("title"))
                                .build())
                        .build())
                .setOptions(Options.newBuilder().setApnsProduction(true).build())//指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式)
                .setMessage(Message.newBuilder().setMsgContent(param.get("msg")).addExtras(param).build())//自定义信息
                .build();
        try {
            PushResult pushResult = jpushClient.sendPush(payload);
            log.info("-----------------[极光推送]PushResult result is " + pushResult);
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }
}

三、调用工具类

调用工具类实现接口功能的时候,一定要自己先行下载推送demo,或者与web端约定rid或alias等值,不然测试会报出code:1011。

package com.xyhsoft.ygt.yqjj.web.jiguang;

import com.xyhsoft.ygt.yqjj.web.utils.JPushUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author stx
 * @Date 2022/8/18/0018 16:08
 */
@RestController
@RequestMapping("/jPush")
@Api(value = "呼叫医院-极光推送",tags = "呼叫医院-极光推送")
public class JPushController {

    @Autowired
    private JPushUtil jPushUtil;

    @GetMapping("/jPushAll")
    @ApiImplicitParams({
    @ApiImplicitParam(name = "alias", value = "jPush推送别名", dataType = "String",required = true),
    @ApiImplicitParam(name = "status", value = "通话请求状态", dataType = "String",required = true)
    })
    public void jPushAll(@RequestParam("alias")String alias, @RequestParam("status")int status){
        //设置推送参数
        Map<String,String> param = new HashMap();
        if (status==0) {
            param.put("msg", "对方已接受");
            param.put("title", "呼叫请求");
            param.put("alias", alias);
            jPushUtil.jPush(param);
        }
        if (status==1) {
            param.put("msg", "对方已拒绝");
            param.put("title", "呼叫请求");
            param.put("alias", alias);
            jPushUtil.jPush(param);
        }
    }
}

四、遇到问题

引入maven的时候,可能会遇到引入的mave依赖中有jar包冲突

测试报出code代码值1011:没有满足条件的推送目标;1004:检查 Appkey 与 MasterSecret等。

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐