引自免费微信小程序:皆我百晓生
这个问题是由于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推送通知了。如果你仍然遇到问题,可能需要检查你的网络连接是否稳定,以及服务器端的响应是否正确。