You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JAVA Web应用向Android发送推送通知的实现问题咨询

嘿,我之前也折腾过Java Web向Android发推送的需求,目前最成熟也最省心的方案就是用Firebase Cloud Messaging(FCM),给你一步步捋清楚实现流程,都是我实际踩坑后总结的干货:

第一步:先搞定FCM基础环境配置
  1. 去Firebase控制台创建一个新项目,然后添加你的Android应用,按照提示填包名等信息,最后下载google-services.json文件,把它放到Android项目的app目录下。
  2. 回到Firebase控制台,找到项目设置里的「服务账号」选项,下载JSON格式的私钥文件,这个是给Java Web后端用的,用来和FCM服务器鉴权。
第二步:Android端配置推送接收能力
  • 首先在Android项目的build.gradle(Module级别)里添加FCM依赖:
    implementation 'com.google.firebase:firebase-messaging:23.4.0'
    
  • 创建一个继承自FirebaseMessagingService的类,重写onMessageReceived方法,这里就是你处理推送消息的核心逻辑:
    public class MyFirebaseMessagingService extends FirebaseMessagingService {
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            // 获取推送的标题和内容
            String title = remoteMessage.getNotification().getTitle();
            String body = remoteMessage.getNotification().getBody();
            // 调用自定义方法弹出系统通知
            showNotification(title, body);
            
            // 如果有业务需要的自定义数据,这样获取
            Map<String, String> customData = remoteMessage.getData();
            String businessKey = customData.get("order_id");
        }
        
        private void showNotification(String title, String body) {
            // 这里可以用NotificationManager实现通知弹出逻辑,按需定制样式即可
        }
    }
    
  • 在AndroidManifest.xml里注册这个服务:
    <service
        android:name=".MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    
  • 获取设备的FCM令牌(Token),这个是后端指定推送目标的唯一标识,要传给后端存入数据库:
    FirebaseMessaging.getInstance().getToken()
        .addOnCompleteListener(task -> {
            if (!task.isSuccessful()) {
                Log.w("FCM", "获取令牌失败", task.getException());
                return;
            }
            // 获取到的有效令牌
            String token = task.getResult();
            // 调用后端接口把token存起来
        });
    
    划重点:如果用户卸载重装APP、清除数据,令牌会更新,一定要在onNewToken方法里把新令牌同步给后端,避免推送失败。
第三步:Java Web后端实现推送逻辑
  • 首先在后端项目里引入FCM的Java SDK依赖(以Maven为例):
    <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>9.2.0</version>
    </dependency>
    
  • 初始化FCM客户端,用之前下载的服务账号私钥:
    FileInputStream serviceAccount = new FileInputStream("你的服务账号私钥文件路径");
    
    FirebaseOptions options = FirebaseOptions.builder()
        .setCredentials(GoogleCredentials.fromStream(serviceAccount))
        .build();
    
    FirebaseApp.initializeApp(options);
    
  • 构建推送消息并发送,比如给指定令牌的设备发推送:
    // 从数据库取出目标用户的FCM令牌
    String targetToken = "用户的FCM令牌";
    
    Message message = Message.builder()
        .setToken(targetToken)
        .setNotification(Notification.builder()
            .setTitle("订单提醒")
            .setBody("你的外卖已送达")
            .build())
        // 附加业务自定义数据
        .putData("order_id", "123456")
        .build();
    
    String response = FirebaseMessaging.getInstance().send(message);
    System.out.println("推送成功,响应ID:" + response);
    
一些避坑提醒
  • 令牌更新机制:Android端一定要监听onNewToken事件,及时同步新令牌到后端,不然旧令牌会导致推送失败。
  • 推送优先级:如果需要即时推送(比如聊天消息),可以设置消息优先级为high,确保APP在后台也能及时收到通知。
  • 测试先行:先用Firebase控制台的「云消息传递」功能发测试推送,验证Android端接收正常后,再对接后端逻辑,减少排障成本。

内容的提问来源于stack exchange,提问作者Hacker Smart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:22:03