uniapp极光推送、java服务端集成

一、准备工作

1、进入【服务中心】-【开发者平台】

2、【创建应用】,填写应用名称和图标(填写项目名称,项目logo就行,也可填写其他的)

3、选择【消息推送】服务,点击下一步

Demo测试 

参照文档:uni-app 推送官方插件集成指南 · BDS技术支持组

注:本地真机测试需要制作自定义基座才可以测试

      安卓证书获取方式:打开命令控制台 输入 keytool -genkey -alias Android(包别名) -keyalg RSA -keysize 2048 -validity 36500(证书有效天数) -keystore certificate(证书名称).keystore

    示例:

 ios需要苹果开发者账号制作证书:https://ask.dcloud.net.cn/article/152

测试:极光推送控制台-》通知消息

二、Postman 模拟后端Server主动推送消息

 参考资料:http://https/docs.jiguang.cn/jpush/server/push/rest_api_v3_push

{
    "platform": "all",
    "audience" : {"registration_id" : [ "指定registration_id"]
    },
    "notification": {
        "alert": "Hello, {{content}}!"
    },
    "message": {
        "msg_content": "Hi,JPush",
        "content_type": "text",
        "title": "msg",
        "extras": {
            "key": "value"
        }
    }
}

发送成功截图

服务端集成:服务端 SDK - 极光文档

参考资料:

  1、服务端 SDK - 极光文档

  2、【SpringBoot】在SpringBoot中如何使用 极光推送_springboot 极光推送-CSDN博客

三、服务端集成本地测试示例

本地测试项目 前后端分离框架,完整代码如下

POM依赖

<dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jiguang-common</artifactId>
            <version>1.1.4</version>
</dependency>
<dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.3.10</version>
</dependency>

Config配置

@Configuration
public class JiGuangConfig {
    /**
     * 极光官网-个人管理中心-appkey
     * https://www.jiguang.cn/
     */
//    @Value("${jpush.appkey}")
    private String appkey ="xxxxxxxxxxxxx";

    /**
     * 极光官网-个人管理中心-点击查看-secret
     */
//    @Value("${jpush.secret}")
    private String secret = "xxxxxxxxxxxxxxxxxx";


    private JPushClient jPushClient;

    /**
     * 推送客户端
     * @return
     */
    @PostConstruct
    public void initJPushClient() {
        jPushClient = new JPushClient(secret, appkey);
    }

    /**
     * 获取推送客户端
     * @return
     */
    public JPushClient getJPushClient() {
        return jPushClient;
    }
} 

Controller

@RestController
@RequestMapping("/ctl/jgPush")
public class JgPushController extends BaseController {

    @Autowired
    private JiGuangPushService jiGuangService;


    @PostMapping("/jgTest")
    public void jgTest()
    {
        //定义和赋值推送实体
        PushBean pushBean = new PushBean();
        pushBean.setTitle("标题");
        pushBean.setAlert("测试消息");
        //额外推送信息
        Map<String,String> map = new HashMap<>();
        map.put("userName","张三");
        pushBean.setExtras(map);
        //进行推送,推送到指定Android客户端的用户,返回推送结果布尔值
        String [] rids = new String[1];
        rids[0]  = "xxxxxxxxxxx";//指定id
        boolean flag = jiGuangService.pushAndroid(pushBean,rids);
    }
} 

Service

public interface JiGuangPushService {

    /**
     * 广播 (所有平台,所有设备, 不支持附加信息)
     * @return
     */
    public boolean pushAll(PushBean pushBean);

    /**
     * 推送全部ios ios广播
     * @return
     */
    public boolean pushIos(PushBean pushBean);

    /**
     * 推送ios 指定id
     * @return
     */
    public boolean pushIos(PushBean pushBean, String... registids);

    /**
     * 推送全部android
     * @return
     */
    public boolean pushAndroid(PushBean pushBean);

    /**
     * 推送android 指定id
     * @return
     */
    public boolean pushAndroid(PushBean pushBean, String... registids);

    /**
     * 剔除无效registed
     * @param registids
     * @return
     */
    public String[] checkRegistids(String[] registids);

    /**
     * 调用api推送
     * @param pushPayload 推送实体
     * @return
     */
    public boolean sendPush(PushPayload pushPayload);
} 

Service实现

@Service
public class JiGuangPushServiceImpl implements JiGuangPushService {
    private static final Logger log = LoggerFactory.getLogger(JiGuangPushServiceImpl.class);
    /** 一次推送最大数量 (极光限制1000) */
    private static final int max_size = 800;

    @Autowired
    private JiGuangConfig jPushConfig;


    /**
     * 广播 (所有平台,所有设备, 不支持附加信息)
     * @return
     */
    @Override
    public boolean pushAll(PushBean pushBean){
        return sendPush(PushPayload.newBuilder()
                .setPlatform(Platform.all())
                .setAudience(Audience.all())
                .setNotification(Notification.alert(pushBean.getAlert()))
                .build());
    }

    /**
     * 推送全部ios ios广播
     * @return
     */
    @Override
    public boolean pushIos(PushBean pushBean){
        return sendPush(PushPayload.newBuilder()
                .setPlatform(Platform.ios())
                .setAudience(Audience.all())
                .setNotification(Notification.ios(pushBean.getAlert(), pushBean.getExtras()))
                .build());
    }

    /**
     * 推送ios 指定id
     * @return
     */
    @Override
    public boolean pushIos(PushBean pushBean, String... registids){
        registids = checkRegistids(registids); // 剔除无效registed
        while (registids.length > max_size) { // 每次推送max_size个
            sendPush(PushPayload.newBuilder()
                    .setPlatform(Platform.ios())
                    .setAudience(Audience.registrationId(Arrays.copyOfRange(registids, 0, max_size)))
                    .setNotification(Notification.ios(pushBean.getAlert(), pushBean.getExtras()))
                    .build());
            registids = Arrays.copyOfRange(registids, max_size, registids.length);
        }
        return sendPush(PushPayload.newBuilder()
                .setPlatform(Platform.ios())
                .setAudience(Audience.registrationId(Arrays.copyOfRange(registids, 0, max_size)))
                .setNotification(Notification.ios(pushBean.getAlert(), pushBean.getExtras()))
                .build());
    }

    /**
     * 推送全部android
     * @return
     */
    @Override
    public boolean pushAndroid(PushBean pushBean){
        return sendPush(PushPayload.newBuilder()
                .setPlatform(Platform.android())
                .setAudience(Audience.all())
                .setNotification(Notification.android(pushBean.getAlert(), pushBean.getTitle(), pushBean.getExtras()))
                .build());
    }

    /**
     * 推送android 指定id
     * @return
     */
    @Override
    public boolean pushAndroid(PushBean pushBean, String... registids){
        registids = checkRegistids(registids); // 剔除无效registed
        while (registids.length > max_size) { // 每次推送max_size个
            sendPush(PushPayload.newBuilder()
                    .setPlatform(Platform.android())
                    .setAudience(Audience.registrationId(Arrays.copyOfRange(registids, 0, max_size)))
                    .setNotification(Notification.android(pushBean.getAlert(), pushBean.getTitle(), pushBean.getExtras()))
                    .build());
            registids = Arrays.copyOfRange(registids, max_size, registids.length);
        }
        return sendPush(PushPayload.newBuilder()
                .setPlatform(Platform.android())
                .setAudience(Audience.registrationId(registids))
                .setNotification(Notification.android(pushBean.getAlert(), pushBean.getTitle(), pushBean.getExtras()))
                .build());
    }

    /**
     * 剔除无效registed
     * @param registids
     * @return
     */
    @Override
    public String[] checkRegistids(String[] registids) {
        List<String> regList = new ArrayList<String>(registids.length);
        for (String registid : registids) {
            if (registid!=null && !"".equals(registid.trim())) {
                regList.add(registid);
            }
        }
        return regList.toArray(new String[0]);
    }

    /**
     * 调用api推送
     * @param pushPayload 推送实体
     * @return
     */
    @Override
    public boolean sendPush(PushPayload pushPayload){
        PushResult result = null;
        try{
            result = jPushConfig.getJPushClient().sendPush(pushPayload);
        } catch (APIConnectionException e) {
            log.error("极光推送连接异常: ", e);
        } catch (APIRequestException e) {
            log.error("极光推送请求异常: ", e);
        }
        if (result!=null && result.isResultOK()) {
            log.info("极光推送请求成功: {}", result);
            return true;
        }else {
            log.info("极光推送请求失败: {}", result);
            return false;
        }
    }
} 

Bean实体类

public class PushBean {

    // 必填, 通知内容, 内容可以为空字符串,则表示不展示到通知栏。
    private String alert;
    // 可选, 附加信息, 供业务使用。
    private Map<String, String> extras;
    //android专用// 可选, 通知标题	如果指定了,则通知里原来展示 App名称的地方,将展示成这个字段。
    private String title;

    public String getAlert() {
        return alert;
    }

    public void setAlert(String alert) {
        this.alert = alert;
    }

    public Map<String, String> getExtras() {
        return extras;
    }

    public void setExtras(Map<String, String> extras) {
        this.extras = extras;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public PushBean() {
    }

    public PushBean(String alert, Map<String, String> extras, String title) {
        this.alert = alert;
        this.extras = extras;
        this.title = title;
    }

    @Override
    public String toString() {
        return "PushBean{" +
                "alert='" + alert + '\'' +
                ", extras=" + extras +
                ", title='" + title + '\'' +
                '}';
    }
}

调用此接口成功如下图

  • 31
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于使用 UniApp 开发的应用,你可以通过集成极光推送来实现语音提醒功能。以下是一些基本的步骤: 1. 注册极光推送账号:前往极光推送官网(https://www.jiguang.cn/)注册一个账号并创建一个应用。 2. 安装插件:在 UniApp 项目根目录下执行命令安装极光推送插件(示例命令:`npm install jpush-uniapp`)。 3. 配置插件:在 UniApp 项目的 `manifest.json` 文件中,添加以下配置: ```json "jpush": { "appKey": "YourJPushAppKey", "channel": "developer-default", "debug": false } ``` 将 `YourJPushAppKey` 替换为你在极光推送申请的 AppKey。 4. 初始化插件:在需要使用推送功能的页面或组件中,引入插件并初始化: ```javascript import JPush from 'jpush-uniapp' const jpush = new JPush() // 初始化 jpush.init() // 监听收到推送消息事件 jpush.receiveMessage(function (msg) { // 处理收到的消息 }) // 监听点击通知事件 jpush.openNotification(function (msg) { // 处理点击通知事件 }) ``` 5. 发送推送消息:使用极光推送服务端 API 或后台管理控制台,发送自定义的推送消息,可以设置语音内容和其他相关参数。 这样,当用户设备收到推送消息时,就可以触发语音提醒功能了。你可以根据具体需求进行进一步的定制和扩展。请注意,极光推送还有其他功能可供使用,例如标签推送、别名推送等,可以根据需要进行配置和使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值