ApiBoot 集成极光App消息推送

消息推送是接口服务项目内不可或缺的一部分,用于向用户发送操作消息提醒、广告等。

ApiBoot内提供了消息推送的支持,目前集成的第三方组件为极光推送ApiBoot遵循开箱即用的原则,所以在集成推送时仍然只需要简单的必要配置即可完成集成。

添加依赖

pom.xml配置文件添加依赖如下所示:

  1. //...
  2. <!--ApiBoot Message Push Starter-->
  3. <dependency>
  4. <groupId>org.minbox.framework</groupId>
  5. <artifactId>api-boot-starter-message-push</artifactId>
  6. </dependency>
  7. //...

注意:如果未添加ApiBoot版本依赖,请访问版本依赖查看添加方式。

相关配置

配置名称默认值描述
api.boot.push.productiontrue配置IOS平台的推送环境,true:生产环境(AppStore下载的APP)
api.boot.push.client.master-secret单客户端推送配置masterSecret
api.boot.push.client.app-key单客户端推送配置appKey
api.boot.push.multiple.xxx.master-secret多客户端推送配置masterSecret
api.boot.push.multiple.xxx.app-key多客户端推送配置appKey

在上面multiple相关的配置内部是key->value结构配置,其中"xxx"用于配置@MessagePushSwitch("xxx")的value值

单环境推送

如果你的接口服务项目只集成推送到一个APP客户端,那么可以采用单环境推送的模式,该环境使用api.boot.push.client前缀的配置进行配置极光推送的两个秘钥,如下所示:

  1. # ApiBoot Config
  2. api:
  3. boot:
  4. push:
  5. # 推送默认配置
  6. client:
  7. # 秘钥
  8. master-secret: xxx
  9. # appKey
  10. app-key: xxx

配置完成后我们就可以通过注入ApiBootMessagePushService接口来进行发送推送业务,如下所示:

  1. /**
  2. * ApiBoot Message Push Service
  3. */
  4. @Autowired
  5. private ApiBootMessagePushService apiBootMessagePushService;
  6. /**
  7. * 安卓推送示例
  8. * @see org.minbox.framework.api.boot.plugin.message.push.model.PushClientConfig
  9. */
  10. public void test() {
  11. apiBootMessagePushService.executePush(
  12. MessagePushBody.builder()
  13. // 推送安卓平台
  14. // 如需更换推送平台,可以查看PusherPlatform枚举定义
  15. .platform(PusherPlatform.ANDROID)
  16. // 标题
  17. .title("消息推送")
  18. // 内容
  19. .message("测试消息推送内容")
  20. // 接收人的别名(App端开发人员进行设置)
  21. .alias(Arrays.asList("xxxx"))
  22. .build()
  23. );
  24. }

ApiBoot Message Push如不配置使用@MessagePushSwithc注解时,使用默认的配置,也就是api.boot.push.client开头的相关配置信息。

多环境推送

在一个接口服务系统内,可能存在向多个APP客户端进行推送消息,那么这种情况ApiBoot Message Push也做了支持,内部通过AOP的方法切面进行处理。

多环境下的配置要做修改,如下所示:

  1. # ApiBoot Config
  2. api:
  3. boot:
  4. push:
  5. multiple:
  6. # user app 推送配置
  7. user:
  8. master-secret: xxx
  9. app-key: xxxx
  10. # other app 推送配置
  11. other:
  12. master-secret: xxxxxx
  13. app-key: xxxxxx

在上面我们配置了两个APP客户端的推送信息,名称分别为userother,这个名称对应@MessagePushSwitch注解的value值使用。

在上面配置了userother两个客户端,使用具体的环境我们只需要在调用方法上添加@MessagePushSwitch注解,如下所示:

  1. // other app 推送
  2. @MessagePushSwitch("other")
  3. public void testOther() {
  4. //....
  5. }
  6. // user app 推送
  7. @MessagePushSwitch("user")
  8. public void testUser() {
  9. //....
  10. }

指定别名推送

在推送消息时,ApiBoot提供了多种方式,其中可以根据alias别名进行推送,alias是由App前端开发人员在集成SDK时设置的值,这时就需要接口开发人员与APP开发人员的约定来完成推送逻辑,一般可以使用用户的编号来作为别名,根据别名推送如下所示:

  1. // 别名推送示例
  2. public void test() {
  3. apiBootMessagePushService.executePush(
  4. MessagePushBody.builder()
  5. .platform(PusherPlatform.ANDROID)
  6. .title("消息推送")
  7. .message("测试消息推送内容")
  8. // 配置别名,别名可配置多个
  9. .alias(Arrays.asList("xxxx"))
  10. .build()
  11. );
  12. }

指定分组推送

分组推送跟别名推送几乎一致,也是APP开发人员在调用SDK时对具体的用户划分的一个分组群体,向分组进行推送消息时,分组内的所有用户都可以收到。

如下所示:

  1. // 分组推送示例
  2. public void test() {
  3. apiBootMessagePushService.executePush(
  4. MessagePushBody.builder()
  5. .platform(PusherPlatform.ANDROID)
  6. .title("消息推送")
  7. .message("测试消息推送内容")
  8. // 推送group1内的所有用户
  9. // 注意:分组优先级低于别名
  10. .tags(Arrays.asList("group1"))
  11. .build()
  12. );
  13. }

如果同时配置别名、分组两种推送方式,则会使用别名

携带自定义参数推送

ApiBoot Message Push可以给APP端推送的消息携带自定义的扩展参数,让APP端做一些特殊的处理,携带扩展参数如下所示:

  1. // 自定义参数示例
  2. public void test() {
  3. apiBootMessagePushService.executePush(
  4. MessagePushBody.builder()
  5. .platform(PusherPlatform.ANDROID)
  6. .title("消息推送")
  7. .message("测试消息推送内容")
  8. .alias(Arrays.asList("xxxx"))
  9. // 扩展参数
  10. .extras(new HashMap(1) {
  11. {
  12. put("role", "USER");
  13. }
  14. })
  15. .build()
  16. );
  17. }

自定义推送提示声音

ApiBoot Message Push可以推送自定义提示的声音,当然也需要APP开发人员做配置才可以,如下所示:

  1. public void test() {
  2. apiBootMessagePushService.executePush(
  3. MessagePushBody.builder()
  4. .platform(PusherPlatform.ANDROID)
  5. .title("消息推送")
  6. .message("测试消息推送内容")
  7. .alias(Arrays.asList("xxxx"))
  8. // 手机系统默认提示音
  9. .sound("default")
  10. .build()
  11. );
  12. }

sound方法可以设置与APP开发人员约定的声明唯一名称。

设置推送角标数值

推送消息时APP的角标数值是可以自定义的,当然我们一般都是叠加,如下所示:

  1. public void test() {
  2. apiBootMessagePushService.executePush(
  3. MessagePushBody.builder()
  4. .platform(PusherPlatform.ANDROID)
  5. .title("消息推送")
  6. .message("测试消息推送内容")
  7. .alias(Arrays.asList("xxxx"))
  8. .tags(Arrays.asList("group1"))
  9. // 角标数值,默认为+1
  10. .badge(999)
  11. .build()
  12. );
  13. }