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

Android通过FCM向指定用户发送推送通知的代码实现求助

修正FCM推送通知代码的问题

你的代码存在几个核心问题,导致无法正确发送FCM推送:

  • 未使用正确的FCM请求体:你定义了包含目标Token和通知内容的json字符串,但实际发送请求时用了无关的details={...}参数,完全没用到正确的请求数据。
  • JSON字符串语法错误:你写的json字符串末尾缺少闭合的},会导致JSON解析失败。
  • 响应内容读取错误:直接调用response.getEntity().getContent().toString()得到的是InputStream对象的toString结果,不是实际的响应文本。
  • 异常处理不完整:catch块为空,无法排查请求过程中的错误。

修正后的完整代码

private void sendFCMNotification() {
    // 替换<USER_FCM>为用户实际的FCM Token,<API_KEY>为你的FCM服务器密钥
    String fcmJson = "{\"to\": \"<USER_FCM>\",\"notification\": {\"title\": \"Check this Mobile (title)\",\"body\": \"Rich Notification testing (body)\"}}";
    
    CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    HttpPost request = new HttpPost("https://fcm.googleapis.com/fcm/send");

    try {
        // 设置正确的FCM请求体
        StringEntity entity = new StringEntity(fcmJson, ContentType.APPLICATION_JSON);
        request.addHeader("content-type", "application/json");
        request.addHeader("Authorization", "key=<API_KEY>");
        request.setEntity(entity);

        // 执行请求并读取完整响应
        HttpResponse response = httpClient.execute(request);
        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuilder responseContent = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            responseContent.append(line);
        }
        reader.close();

        // 打印响应内容用于调试
        Log.d("FCM_RESPONSE", responseContent.toString());

    } catch (JSONException e) {
        Log.e("FCM_ERROR", "JSON格式错误", e);
    } catch (IOException e) {
        Log.e("FCM_ERROR", "网络请求失败", e);
    } finally {
        try {
            httpClient.close();
        } catch (IOException e) {
            Log.e("FCM_ERROR", "关闭客户端失败", e);
        }
    }
}

关键改进说明

  • 直接使用构建好的FCM通知JSON作为请求实体,确保FCM服务器能识别目标设备和通知内容。
  • 修复了JSON字符串末尾缺失的},避免解析异常。
  • 用BufferedReader读取输入流,拼接成实际的响应文本,方便调试排查问题。
  • 完善异常处理,添加针对性日志输出,便于定位错误。

额外注意事项

  • 若为Android项目,Android 6.0之后Apache HttpClient被移除,需手动添加依赖或改用HttpURLConnection/OkHttp实现。
  • 确保替换代码中的占位符为实际有效的FCM Token和服务器密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:25:03