Java服务端集成Google FCM推送的注意事项和实际经验

这篇具有很好参考价值的文章主要介绍了Java服务端集成Google FCM推送的注意事项和实际经验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

公司的app要上海外,涉及到推送功能,经过综合考虑,选择Google FCM进行消息推送。

查看一些集成博客和官方文档,看的似懂非懂,迷迷惑惑。本篇文章除了将我实际集成的经验分享出来,也会对看到的博客及其中产生的疑惑、注意事项一一评论。

从官方文档和众多博客中,你会发现Java集成FCM推送有多种实现方式,会让生产生文档很乱,不知作何选择的困惑。

1.http://t.csdn.cn/hxNqh,这篇文章告诉你集成推送为何要创建Firebase项目。看后豁然开朗,介绍了FCM有两种消息: Data Message和 Notification Message.就是透传消息和通知栏消息。根据实际测试,只有app在前台的时候由app应用进行发送通知消息,当app在后台的时候由系统弹通知栏,当app被杀死的时候,从Firebase后台发送是收不到的,因为控制台只能发送通知栏消息,所以收不到,但是通过后端集成是可以让杀掉的app收到推送的。

作者文章出现了以下集成方式

 Firebase后台发送是收不到的
  1 http请求:
  2 https://fcm.googleapis.com/fcm/send
  3 
  4 Content-Type:application/json
  5 Authorization:key= App Key
  6 {
  7     "notification" : {
  8       "body" : "You have a new message",
  9       "title" : "",
 10       "icon" : "app icon"
 11     },
 12     "to" : "user token"
 13 }
 (2)Data Message:
 不管app在后台还是前台都会走这个方法。
  1 http请求:
  2 https://fcm.googleapis.com/fcm/send
  3 
  4 Content-Type:application/json
  5 Authorization:key= App Key
  6 {
  7     "data" : {
  8       "request" : "1",
  9       "xxx" : "xxx"
 10     },
 11     "to" : "user token"
 12 }

看官方文档,也有该种方式,由于一开始接触官方文档是通过SDK的方式进行的,该种api的方式给我带来困惑,怎么还有这种方式集成吗,后来了解到,这是http的方式调用的,而sdk集成是封装好的,不可混用。测试时,用该种http方式非常方便,尤其是进行透传消息Data Message测试时,很方便,但是我没发送成功,可能还是国内环境的问题。多种调用方式当时也困惑了我很久,因为官方文档介绍集成时是sdk和http调用、以及oauth一起介绍的,弄晕了,用哪种是对的呢。根据集成便捷及使用性当然首选SDK的方式集成。

 如果想了解更多http服务器调用API的方式可看http://t.csdn.cn/dOn5y

1.2admin-sdk导入采用了方便的maven进行sdk集成

<dependency> <!-- 谷歌推送依赖 -->
    <groupId>com.google.firebase</groupId>
    <artifactId>firebase-admin</artifactId>
    <version>6.10.0</version>
</dependency>
1.3.在进行FirebaseApp.initializeApp(options)时,如下
ClassPathResource classPathResource = new ClassPathResource("{firebase下发的json}");
 FirebaseOptions options = new FirebaseOptions.Builder()
 .setCredentials(GoogleCredentials.fromStream(inputStream))
 .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")//
 .build();
  firebaseApp = FirebaseApp.initializeApp(options)时

不管多个博客还是官方文档,都有.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")这个调用,我在集成时,这个到底要不要填写时,很少困惑,把握不准,没有一个地方说这个方法是否使用,如果使用,这个DatabaseUrl应该如何配置,最后在实际的测试过程中,结论是如果是单独集成FCM的推送功能,setDatabaseUrl可以完全去掉不写,一点也不影响Firebase的初始化和消息的推送.

而最终的初始化如下:

  @PostConstruct
     public void init() {
         try {
             //initProxy("127.0.0.1", 8089);
             ClassPathResource cpr = new ClassPathResource("serviceAccountKey.json");
             InputStream inputStream = cpr.getInputStream();
             FirebaseOptions options = FirebaseOptions.builder()
                     .setCredentials(GoogleCredentials.fromStream(inputStream))
                     .build();
             //初始化firebaseApp
             firebaseApp = FirebaseApp.initializeApp(options);
         } catch (Exception e) {
             log.error("google FirebaseApp initializeApp fail = {}", e);
         }
     }

serviceAccountKey.json获取和在项目中存放的位置

google推送,java,android,android,后端,spring boot​​​​​​​

google推送,java,android,android,后端,spring boot

2.http://t.csdn.cn/e8QjT,这篇文章通过详细的图文介绍了Firebase平台如何创建一个安卓项目,如何配置,安卓端如何使用,在Firebase的网页控制台,如何进行通知消息的测试。但是呢,这篇文章没有说,管理台发的消息只能是通知栏消息,不能发透传消息(有的又叫数据消息),也没有有介绍到服务端如何集成,但是创建Firebase安卓项目还是可以参考的

题外话:Firebase平台创建好Android项目时,Google Play会自动生成一个Android应用项目,不过没包名,在Google Cloud平台会生成集成三方登录的所需要的秘钥等信息,三方登录和支付理解起来比推送更复杂,看文档和博客让人更困惑,此处暂时不细表。

如果仅仅推送通知栏消息,app杀掉、进程不再时就不收到通知,可以用通知栏消息 Notification Message.

Message message = Message.builder()
     .setNotification(Notification.builder()
         .setTitle("我是push标题")
         .setBody("我是你push的内容")
         .build())
     //.putAllData(map);
     .setToken(registrationToken)
     .build();
 String response = FirebaseMessaging.getInstance(firebaseApp).send(message);

如果想要app杀掉后,进程不在也能收到push,可以使用透传消息Data Message,实际测试中发现,data透传有的手机杀掉能收到,有的收不到。

 Message message = Message.builder()
     .putData("title", "我是push标题")
     .putData("body", "我是push内容")
     //.putAllData(map);
     .setToken(registrationToken)

     .build();
 String response = FirebaseMessaging.getInstance(firebaseApp).send(message);

如果setNotification和data一起传递,是通知栏消息。

使用透传,通知栏的显示最终都要由Android端主动send才会显示出来。

3.FCM实现消息推送,介绍了官方FCM推送api的github地址:GitHub - firebase/firebase-admin-java: Firebase Admin Java SDK,集成的是 AndroidConfig androidConfig=androidConfigBuilder.build();讲了如果多个app调用fcm服务,采用一个map来保存每个 app对应的FirebaseApp信息;也介绍了代理的方法,在发送之前,一定需要进行参数设置,让请求走代理方式,因为谷歌的服务器在国内都是被禁的。

这篇文章给我带来了很多困惑,难道安卓实现推送,还得专门这样写吗,后端还得拿到安卓端的图标、铃声、通道、跳转页面等等,一堆繁琐的配置,不走代理不行吗。json格式文件哪来的,需要手动配置吗。最后开发完了,回头看官方文档,才明白,androidConfigBuilder.build();这种集成方式是针对安卓设备进行推送,给安卓设备推送,可用可不用该种方式,根据实际集成便捷性来看,果断否定了该种集成方式。

而使用了最普遍的发送方式,如2.介绍的通知栏和透传实现。当然仅仅介绍的是单个设备的发送。如果想了解多个设备、订阅等其他方式,官方文档介绍的就非常好。文章来源地址https://www.toymoban.com/news/detail-694188.html

到了这里,关于Java服务端集成Google FCM推送的注意事项和实际经验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GitLab服务器迁移备份及注意事项

    备份时需要保证两个gitlab的版本号一致,例如我的gitlab版本号都为8.8.5。 然后使用以下命令进行备份,注意gitlab需要保持正常运行的状态 备份结束后进入 “ /var/opt/gitlab/backups ” 目录下查看备份文件,备份文件名格式一般为 “ 时间戳_gitlab_backup.tar ”(例如:1675114514_gitlab_b

    2024年02月11日
    浏览(52)
  • 微服务架构之路1,服务如何拆分?使用微服务的注意事项?

    大家好,我是哪吒。 微服务已经是Java开发的必备技能,甲方不管项目大小,都想上微服务,感觉上了就高大上了,牛逼了。 微服务确实给我们带来了一定的便利性,但是也带来了麻烦,比如学习成本高,存在很多不可预见的问题。 我是做互联网项目的,刚开始的时候,用的

    2024年02月05日
    浏览(54)
  • 使用物理机服务器应该注意的事项

    使用物理机服务器应该注意的事项 如今云计算的发展已经遍布各大领域,尽管现在的云服务器火遍全网,但是仍有一些大型企业依旧选择使用独立物理服务器,你知道这是为什么吗?壹基比小鑫来告诉你吧。 独立物理服务器托管业务适合大中型企业及新兴网络业务如网络视

    2024年02月09日
    浏览(53)
  • 本地生活服务平台加盟,成功路上的注意事项

    近年来,随着短视频的快速发展,本地生活服务成为了一个蓬勃发展的行业。作为创业者,加盟本地生活服务平台是一个有潜力的商机。然而,在决定加入并投资之前,有一些关键的注意事项需要考虑。 选择一个信誉良好、口碑较好的本地生活服务平台加盟是确保你投资安全

    2024年01月23日
    浏览(67)
  • 小程序配置服务器域名:步骤与注意事项

    随着移动互联网的普及,小程序已成为许多企业和开发者的首选应用形式。为了确保小程序的正常运行和最佳用户体验,服务器域名的配置至关重要。本文将详细介绍小程序配置服务器域名的步骤及注意事项。 一、为什么要配置服务器域名? 小程序运行需要后端服务器的支

    2024年02月21日
    浏览(52)
  • Java中方法的定义及注意事项

    什么是方法: 方法(method)是程序中最小的执行单元 实际开发中,什么时候用到方法: 重复的代码、具有独立功能的代码可以抽取到方法中 实际开发中,方法有什么好处: 可以提高代码的复用性 可以提高代码的可维护性 当我们要计算不明确的数的时候,就可以用带参数的

    2023年04月22日
    浏览(47)
  • 微服务 Spring Cloud 1,服务如何拆分?使用微服务的注意事项?

    大家好,我是哪吒。 微服务已经是Java开发的必备技能,甲方不管项目大小,都想上微服务,感觉上了就高大上了,牛逼了。 微服务确实给我们带来了一定的便利性,但是也带来了麻烦,比如学习成本高,存在很多不可预见的问题。 我是做互联网项目的,刚开始的时候,用的

    2024年01月19日
    浏览(41)
  • java中interface的使用以及注意事项

    一、接口(interface)基本概念 接口(interface):是java中一种引用数据类型,可以看做方法的集合,其内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9). 二、使用格式   1.定义格式:   public interface 接口名称{     //抽象方法    

    2024年02月06日
    浏览(36)
  • Java方法的返回值及注意事项

    为什么要有带返回值的方法呢? 调用处拿到方法的结果之后,才能根据结果进行下一步操作 带返回值方法的定义和调用: 如果在调用处,要根据方法的结果去编写另一段代码逻辑 为了在调用处拿到方法产生的结果,就需要定义带有返回值的方法 1.带返回值方法定义的格式:

    2023年04月25日
    浏览(42)
  • Android 集成firebase 推送(FCM)

    1,集成firebase 基础 1googleService文件 2项目级gradle 3app级gradle 4setting  2,推送相关 重点: 源文档:设置 Firebase Cloud Messaging 客户端应用 (Android) (google.com) 1清单文件 4主启动Activity(清单文件里设置 action android:name=\\\"android.intent.action.MAIN\\\" / 的Activity) ==================结束==============

    2024年04月22日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包