我正在与Google's FirebaseApp合作。我可以看到,如果没有网络连接,则库会继续尝试重新连接,并在60秒后抛出带有以下值的FirebaseMessagingException
:
60秒对我来说太长了,我想重新配置该值。 FirebaseOptions有一个setConnectTimeout()
方法,但此方法无济于事。我设置的值没有考虑。
FirebaseOptions
可以使用外部com.google.api.client.http.HttpTransport,但是我没有找到任何配置超时的选项。
FirebaseOptions:
FirebaseOptions.Builder builder = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl(databaseUrl)
.setConnectTimeout(20)
.setReadTimeout(20);
NetHttpTransport,无法设置连接超时:
NetHttpTransport httpTransport = new NetHttpTransport.Builder()
.setProxy(proxy)
.setConnectionTimeout(..) <---- not exist
.build();
builder.setHttpTransport(httpTransport);
有没有一种方法可以重新配置连接超时?
答案 0 :(得分:0)
我发现了一种间接解决方法。该解决方案并不像我期望的那样完美,但这是解决该问题的唯一方法。
这是基本用例:
FirebaseApp firebaseApp = ...;
FirebaseMessaging firebaseMessaging = FirebaseMessaging.getInstance(firebaseApp);
Message message = Message.builder()....build();
String messageId = firebaseMessaging.send(message);
FirebaseMessaging有一个允许的方法:sendAsync()
。此方法返回ApiFuture<String>
而不是简单的String
,它具有get(timeout, timeUnit):String
方法。
我的最终代码如下:
try {
FirebaseApp firebaseApp = ...;
FirebaseMessaging firebaseMessaging = FirebaseMessaging.getInstance(firebaseApp);
Message message = Message.builder()....build();
ApiFuture<String> apiFuture = firebaseMessaging.sendAsync(message);
// waiting for the response max. 5 secs
String messageId = apiFuture.get(5000, TimeUnit.MILLISECONDS);
// everything is fine here
} catch (Throwable t) {
// java.util.concurent.TimeoutException appears
}