代码之家  ›  专栏  ›  技术社区  ›  zappee

如何在FirebaseApp/NetHttpTransport上配置连接超时

  •  0
  • zappee  · 技术社区  · 6 年前

    Google's FirebaseApp . 我可以看到,如果没有网络连接,那么库继续尝试重新连接,60秒后抛出一个错误 FirebaseMessagingException 具有以下值:

    • 错误代码:“内部错误”

    60秒对我来说太长了,我想重新配置这个值。 FirebaseOptions setConnectTimeout()

    FirebaseOptions 有能力使用外部 com.google.api.client.http.HttpTransport 但我还没有找到任何选项来配置这个连接超时。

    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);
    

    有没有办法重新配置连接超时?

    1 回复  |  直到 6 年前
        1
  •  0
  •   zappee    6 年前

    这是基本用例:

    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
    }