使用 Java 发送 Firebase FCM HTTP v1 API(已解决)

问题描述 投票:0回答:1

目前我正在使用静态服务器密钥发送消息

conn.setRequestProperty("Authorization", SERVERKEY);

现在我将通过 OAuth 2.0 发送带有访问令牌的消息。

conn.setRequestProperty("Authorization", "Bearer ACCESSTOKEN");

访问令牌的有效期为 1 小时。 我需要检索新的有效访问令牌。 我正在尝试使用 Firebase 文档来实现这一点。 在 Firebase 控制台中生成了一个 json 文件。

private static final String MESSAGING_SCOPE = "https://www.googleapis.com/auth/firebase.messaging";
private static final String[] SCOPES = { MESSAGING_SCOPE };

    private static String getAccessToken() throws IOException {
        GoogleCredentials googleCredentials = GoogleCredentials
            .fromStream(new FileInputStream("service.json"))
            .createScoped(Arrays.asList(SCOPES));
        googleCredentials.refreshIfExpired();
    AccessToken token = googleCredentials.getAccessToken();

    return token.getTokenValue();
    }

但是较长时间后的输出是:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.util.concurrent.Futures.getDone(Ljava/util/concurrent/Future;)Ljava/lang/Object;
    at com.google.auth.oauth2.OAuth2Credentials.finishRefreshAsync(OAuth2Credentials.java:287)
    at com.google.auth.oauth2.OAuth2Credentials.access$300(OAuth2Credentials.java:67)
....

我已将 firebase-admin 库嵌入为 Maven 项目:

<dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>9.2.0</version>
    </dependency>

问题解决了!

上述错误是在Eclipse IDE中。

在 IntelliJ 下,错误输出是另一个:

Error getting access token for service account: Connect timed out

IntelliJ IDE 中的代理设置没有变化,但源代码中:

System.setProperty("https.proxyHost", "PROXYSERVER");
System.setProperty("https.proxyPort", "PROXYPORT");
System.setProperty("com.google.api.client.should_use_proxy","true");

我收到访问令牌。

java firebase oauth-2.0 firebase-cloud-messaging google-oauth
1个回答
0
投票

错误出现在 Eclipse IDE 中。

在 IntelliJ 下,错误输出是另一个:

Error getting access token for service account: Connect timed out

IntelliJ IDE 中的代理设置没有变化,但源代码中:

System.setProperty("https.proxyHost", "PROXYSERVER");
System.setProperty("https.proxyPort", "PROXYPORT");
System.setProperty("com.google.api.client.should_use_proxy","true");

我收到访问令牌。


此答案作为 edit 发布到问题 Send Firebase FCM HTTP v1 API with Java (SOLVED) 由 OP user2166934 在 CC BY-SA 4.0 下发布。

© www.soinside.com 2019 - 2024. All rights reserved.