使用 Java SDK 进行 FCM 消息传递:如何正确处理和区分故障

Ger*_*rms 5 firebase firebase-admin

我正在将 Firebase Cloud Messaging 与 Java SDK (com.google.firebase:firebase-admin v 5.9.0) 结合使用。

处理 Java 代码中的错误的唯一方法是捕获 ExecutionException:

Message message = buildMessage(token,payload);
try {
    String response = FirebaseMessaging.getInstance().sendAsync(message).get();
} catch (ExecutionException e) {
    LOGGER.error("ExecutionException Error pushing notif : ", e);
}
// Response is a message ID string.
LOGGER.info("Successfully sent message: " + response);
Run Code Online (Sandbox Code Playgroud)

如果我想检测已删除的令牌,我必须读取 ExecutionException (FireBaseMessagingException)中包装的异常,并测试该消息是否为“未找到请求的实体”:

if(e.getCause().getMessage().equals("Requested entity was not found.") {
// token is deleted 
}
Run Code Online (Sandbox Code Playgroud)

如果我想检测网络故障,我必须读取 ExecutionException(FireBaseMessagingException)中包装的异常,并测试该消息是否为“调用 FCM 后端服务时出错”:

if(e.getCause().getMessage().equals("Error while calling FCM backend service") {
// network problem, I have to retry 
}
Run Code Online (Sandbox Code Playgroud)

采取的行动取决于这种检测,这是非常脆弱的。是否有可能实现更准确的错误判定?