springboot项目 APP极光推送接入

🖼 在理想的最美好世界中,一切都是为最美好的目的而设。 —— 伏尔泰

一、相关文档

  • 极光推送restApi:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push

  • 极光推送sdk:https://github.com/jpush/jpush-api-java-client

二、相关概念

2.1 厂商通道

极光推送正常情况是使用自带的极光通道,但是如果想在app离线后依然能够收到推送就需要接入厂商通道。

安卓集成,比较特殊的有小米,OPPO,vivo,集成这几个通道需要上架他们对应的应用市场才能使用,其他的通道按官方文档集成一下就行

IOS集成,这个简单的多了,把对应的参数填一下就行。

ios支持开发与生产环境配置,需要分别配置,接口使用时需要指定options-》apns_production参数值为true或false(true生产,false开发)

2.2 离线消息

离线消息问题就比较多了,别名绑定的设备不活跃(在线时间太短)收不到离线消息,别名不存在也收不到离线消息。

所以针对别名不存在发送失败的情况,我的解决方案是:

针对推送失败的消息,当用户在app登录时,重新发送一次,也算是离线消息了

三、接口关键内容

3.1 audience:推送目标

  https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push#audience%EF%BC%9A%E6%8E%A8%E9%80%81%E7%9B%AE%E6%A0%87

  3.1.1 接口调用主要支持以下类型

allString发广播给全部设备进行推送基于业务优化的需求,极光于 2020 年 3 月 10 日对「广播推送」的频率进行限制,调整为 10 次每天,超过调用限制时将返回报错码 2008,官网控制台将与 Push API 同步调整。注意:本次调整仅限制广播,对广播外的推送不影响。如广播推送需更高频率,请 联系商务 ,详情请阅读 公告 
tagJSON Array标签 OR数组。多个标签之间是 OR 的关系,即取并集。用标签来进行大规模的设备属性、用户属性分群,此功能为 VIP 用户功能。一次推送最多 20 个。有效的 tag 组成:字母(区分大小写)、数字、下划线、汉字、特殊字符 @!#$&*+=.|¥。限制:每一个 tag 的长度限制为 40 字节。(判断长度需采用 UTF-8 编码)
aliasJSON Array别名数组。多个别名之间是 OR 关系,即取并集。用别名来标识一个用户,一个设备只能绑定一个别名,但多个设备可以绑定同一个别名。一次推送最多 1000 个。有效的 alias 组成:字母(区分大小写)、数字、下划线、汉字、特殊字符 @!#$&*+=.|¥。限制:每一个 alias 的长度限制为 40 字节。(判断长度需采用 UTF-8 编码)
registration_idJSON Array注册 ID数组。多个注册 ID 之间是 OR 关系,即取并集。设备标识,客户端集成 SDK 后可获取到该值。一次推送最多 1000 个。如果您一次推送的 registration_id 值超过 1000 个,可以直接使用 文件推送 功能。
segmentJSON Array用户分群 ID在页面创建的用户分群的 ID。定义为数组,但目前限制一次只能推送一个。目前限制是一次只能推送一个。

  3.1.2 别名使用

目前项目使用的是别名,格式为“用户名_用户类型”,这个也是用的最多的一种方式,一个别名只能对应一个设备,但是实际上去使用时,发现是可以对应2个的,一个别名在第三个设备注册时,第一个就收不到推送了,所以实际使用时需要避免一个别名被多个设备使用

测试在测试app推送时就会经常出现收不到推送的问题,原因也都是因为这个别名在多个设备上登录过。 

3.2 notification:通知

  https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push#notification%EF%BC%9A%E9%80%9A%E7%9F%A5

  3.2.1 android推送内容格式

  主要列举几个典型的

{
    "notification" : {
        "android" : {
             "alert" : "hello, JPush!", //推送内容 只有这个必填
             "title" : "JPush test", //推送标题
             "extras" : {
              //这里传的是自定义的业务参数,key和value都自定义 ,
              //比如本次的签署链接 传了个signUrl,在点击推送时打开app时会把这里面的内容带到app,
              //app收到后使用
                  "signUrl" : "https://www.baidu.com"
             }
        }
    }
}

  3.2.2 ios推送内容样式

  其实还有很多有用的属性,比如设置收到时的提示声音,或者收到推送后的应用角标数等,集体可以看文档

{
    "notification" : {
         "ios" : {
                 "alert" : "hello, JPush!",//通知内容,ios不一样的是他没标题
                 "extras" : {
                     //这里传的是自定义的业务参数,key和value都自定义 ,
                     //比如本次的签署链接 传了个signUrl,在点击推送时打开app时会把这里面的内容带到app,
                     //app收到后使用
                     "signUrl" : "https://www.baidu.com"
                 }
               }
       }
}

3.3 restApi方式推送

请求地址:https://api.jpush.cn/v3/push

请求类型:http请求

参数示例

{
  "notification": {
    "alert": "【合同】2023食品商务合同xdj-杭州永强食品有限公司-HT20230224014218已发起合同签署流程,请签署",
    "android": {//内容
      "alert": "【合同】2023食品商务合同xdj-杭州永强食品有限公司-HT20230224014218已发起合同签署流程,请签署",
      "extras": {
        "signUrl": "https://scm.test.laiyifen.com/server/contract/login/common/toLogin?username=15115673779&usertype=9&signId=2679"
      },
      "title": "【您有一份合同待签署】"
    },
    "ios": {
      "alert": {//内容
        "body": "【合同】2023食品商务合同xdj-杭州永强食品有限公司-HT20230224014218已发起合同签署流程,请签署",
        "title": "【您有一份合同待签署】"
      },
      "sound": "default", //铃声
      "extras": {
        "signUrl": "https://scm.test.laiyifen.com/server/contract/login/common/toLogin?username=15115673779&usertype=9&signId=2679"
      },
      "content-available": true //true生产,false开发
    }
  },
  "audience": {
    "alias": [
      "15115673779_FOOD_SUPPLIER"
    ]
  },
  "options": {
    "apns_production": true,
    "time_to_live": 259200
  },
  "platform": "all"
}

返回参数示例:

成功

{
  "sendno": "0",
  "msg_id": "18100623961567207"
}

失败

{
  "msg_id": "18100624120224845",
  "error": {
    "code": 1011,
    "message": "cannot find user by this audience or has been inactive for more than 255 days"
  }
}

3.4 SDK调用

本次使用的restApi,具体SDK怎么使用还是自己研究吧

github地址:https://github.com/jpush/jpush-api-java-client

四、常见问题

4.1 安卓联调收不到推送

安卓联调时可能会出现收不到推送的情况,由于安卓环境没有统一的推送通道,想要提高消息接受率最好是接入对应机型的厂商通道,如华为手机接入华为厂商通道

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是Spring Boot集成极光推送的步骤: 1. 在pom.xml文件中添加极光推送的依赖: ```xml <dependency> <groupId>cn.jiguang</groupId> <artifactId>jpush-spring-boot-starter</artifactId> <version>3.4.0</version> </dependency> ``` 2. 在application.yml或application.properties文件中配置极光推送的相关信息: ```yaml jpush: app-key: f54*******************92 master-secret: d6*****************055 production: true ``` 请注意将上述代码中的app-key和master-secret替换为你自己的极光推送AppKey和AppSecret。 3. 创建一个推送服务类,用于发送推送消息: ```java import cn.jpush.api.JPushClient; import cn.jpush.api.push.PushResult; import cn.jpush.api.push.model.Message; 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.Notification; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class JPushService { @Value("${jpush.app-key}") private String appKey; @Value("${jpush.master-secret}") private String masterSecret; @Value("${jpush.production}") private boolean production; public void sendPush(String message) { JPushClient jpushClient = new JPushClient(masterSecret, appKey); PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.all()) .setAudience(Audience.all()) .setMessage(Message.content(message)) .build(); try { PushResult result = jpushClient.sendPush(payload); System.out.println("推送结果:" + result); } catch (Exception e) { e.printStackTrace(); } } } ``` 4. 在需要发送推送消息的地方调用推送服务类的sendPush方法: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class PushController { @Autowired private JPushService jPushService; @GetMapping("/push") public String pushMessage() { jPushService.sendPush("这是一条测试推送消息"); return "推送成功"; } } ``` 以上代码演示了如何在Spring Boot集成极光推送,并发送一条推送消息。你可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值