hcx_java 2024-06-24 09:30 采纳率: 0%
浏览 76

实现fcm 推送时遇到问题(HTTP v1 )

在实现fcm 推送时遇到问题(HTTP v1 )
com.google.firebase.messaging.FirebaseMessagingException: Unknown error while making a remote service call: Error getting access token for service account: Connection reset, iss: firebase-adminsdk-c5h3z@tes-dev-679b7.iam.gserviceaccount.com

jar包使用的是9.2.0版本,其它的按照文档上的代码写的

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-24 09:30
    关注

    引自免费微信小程序:皆我百晓生

    这个问题是由于Firebase Messaging SDK在处理远程服务调用时遇到了错误,导致了Connection Reset的情况。解决这个问题的方法是在构建请求时添加一些必要的头信息。

    首先,在你的Android项目中,你需要添加一个FirebaseMessagingService实例到你的Activity中。这个类通常位于android.app.FcmIntentService的子类中。例如:

    public class FcmIntentService extends Service {
    
        private FirebaseMessaging firebaseMessaging;
    
        @Override
        public void onCreate() {
            super.onCreate();
            firebaseMessaging = FirebaseMessaging.getInstance();
        }
    
        // ...其他方法...
    }
    

    然后,你需要在构造函数中设置你的服务账户密钥。这通常是一个JSON字符串,包含你的服务账号ID、私钥和公钥。例如:

    private String fcmToken;
    private static final String SERVICE_ACCOUNT_KEY = "{your-service-account-key}";
    
    try {
        // 加载服务账户密钥
        GoogleCredentials googleCredentials =
                GoogleCredentials.fromStream(new FileInputStream(SERVICE_ACCOUNT_KEY))
                        .createScoped(List.of(FirebaseMessagingScopes.MESSAGING));
        firebaseMessaging.setGoogleCredentials(googleCredentials);
    } catch (IOException e) {
        Log.e(TAG, "Error loading service account key", e);
    }
    
    // 初始化FcmMessagingService
    this.fcmToken = firebaseMessaging.getToken().getToken();
    
    // 设置你的服务账号ID和私钥
    if (this.fcmToken != null && !this.fcmToken.isEmpty()) {
        firebaseMessaging.configure(this, this.fcmToken);
    }
    

    接下来,你需要创建一个FirebaseMessagingOptions对象,并将它传递给FirebaseMessaging.getInstance()。这个对象包含了你需要的许多配置选项,包括主题订阅、发送消息等。

    FirebaseMessagingOptions options = new FirebaseMessagingOptions.Builder()
            .setApplicationId("YOUR_APPLICATION_ID")
            .setSenderId("YOUR_SENDER_ID")
            .build();
    
    options.getNotificationChannelConfig().setName("My Notification Channel");
    
    FirebaseMessaging.getInstance().setOptions(options);
    
    // 发送消息
    String message = "Hello from your app!";
    FirebaseMessaging.getInstance().send(message);
    

    最后,确保在onDestroy方法中释放资源:

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (firebaseMessaging != null) {
            firebaseMessaging.shutdown();
        }
    }
    

    这样,你的应用就可以正常接收和发送FCM推送通知了。如果你仍然遇到问题,可能需要检查你的网络连接是否稳定,以及服务器端的响应是否正确。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月24日