首页 > 解决方案 > com.google.firebase.messaging.FirebaseMessagingException:调用 FCM 后端服务时出错

问题描述

我正在尝试发送 fcm 通知:

 MulticastMessage message = MulticastMessage.builder()
                    .addAllTokens(registrationTokens)
                    .putAllData(body)
                    .build();
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
BatchResponse response = FirebaseMessaging.getInstance().sendMulticast(message);

有时服务器上的代码会遇到这个问题

com.google.firebase.messaging.FirebaseMessagingException: Error while calling FCM backend service
        at com.google.firebase.messaging.FirebaseMessagingClientImpl.sendAll(FirebaseMessagingClientImpl.java:142)
        at com.google.firebase.messaging.FirebaseMessaging$2.execute(FirebaseMessaging.java:293)
        at com.google.firebase.messaging.FirebaseMessaging$2.execute(FirebaseMessaging.java:290)
        at com.google.firebase.internal.CallableOperation.call(CallableOperation.java:36)
        at com.google.firebase.messaging.FirebaseMessaging.sendAll(FirebaseMessaging.java:183)
        at com.google.firebase.messaging.FirebaseMessaging.sendMulticast(FirebaseMessaging.java:252)
        at com.google.firebase.messaging.FirebaseMessaging.sendMulticast(FirebaseMessaging.java:227)
        at ir.mirorim.vn.serviceImp.userService.NotificationServiceImp.sendMultipleMessage(NotificationServiceImp.java:351)
        at ir.mirorim.vn.serviceImp.userService.NotificationServiceImp.testNotification(NotificationServiceImp.java:130)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)

我做错了什么。所有配置都在编译时与代码一起使用。

我加载 Firebase 配置文件的部分

@PostConstruct
    public void init() {

        try {
            String configPath = servletContext.getRealPath("/WEB-INF/mm-firebase-adminsdk-oqtey-c111bb111c.json");
            FileInputStream serviceAccount =
                    new FileInputStream(configPath);

            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                    .setDatabaseUrl("https://****-****.firebaseio.com")
                    .build();
            FirebaseApp.initializeApp(options);
        }
        catch (Exception e){
            e.printStackTrace();
        }

    }

我的 json 配置:

{
  "type": "service_account",
  "project_id": "mm-1111",
  "private_key_id": "**************************",
  "private_key": "-----BEGIN PRIVATE KEY-----

xxx
---END PRIVATE KEY-----\n",
  "client_email": "firebase-adminsdk-kvj7w@mm-1111.iam.gserviceaccount.com",
  "client_id": "1000559483501236*****",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-kvj7w%mm-1111.iam.gserviceaccount.com"
}

这些服务器是否被阻止或什么?我应该如何调试这些?

谁能帮我?

标签: javafirebasespring-mvcfirebase-cloud-messaging

解决方案


推荐阅读