diff --git a/src/main/java/com/google/firebase/FirebaseApp.java b/src/main/java/com/google/firebase/FirebaseApp.java index 8de82bc8a..2edb6e1f5 100644 --- a/src/main/java/com/google/firebase/FirebaseApp.java +++ b/src/main/java/com/google/firebase/FirebaseApp.java @@ -33,6 +33,7 @@ import com.google.firebase.internal.FirebaseExecutors; import com.google.firebase.internal.FirebaseService; import com.google.firebase.internal.GetTokenResult; +import com.google.firebase.internal.Log; import com.google.firebase.internal.NonNull; import com.google.firebase.internal.Nullable; import com.google.firebase.tasks.Continuation; @@ -67,7 +68,6 @@ public class FirebaseApp { private static final Map instances = new HashMap<>(); public static final String DEFAULT_APP_NAME = "[DEFAULT]"; - private static final long TOKEN_REFRESH_INTERVAL_MILLIS = TimeUnit.MINUTES.toMillis(55); static final TokenRefresher.Factory DEFAULT_TOKEN_REFRESHER_FACTORY = new TokenRefresher.Factory(); @@ -339,7 +339,8 @@ Task getToken(boolean forceRefresh) { @Override public GetTokenResult then(@NonNull Task task) throws Exception { - GetTokenResult newToken = new GetTokenResult(task.getResult().getAccessToken()); + GoogleOAuthAccessToken googleOAuthToken = task.getResult(); + GetTokenResult newToken = new GetTokenResult(googleOAuthToken.getAccessToken()); GetTokenResult oldToken = currentToken.get(); List listenersCopy = null; if (!newToken.equals(oldToken)) { @@ -353,7 +354,15 @@ public GetTokenResult then(@NonNull Task task) // access to the token refresher. if (currentToken.compareAndSet(oldToken, newToken)) { listenersCopy = ImmutableList.copyOf(authStateListeners); - tokenRefresher.scheduleRefresh(TOKEN_REFRESH_INTERVAL_MILLIS); + long refreshDelay = googleOAuthToken.getExpiryTime() - clock.now() + - TimeUnit.MINUTES.toMillis(5); + if (refreshDelay > 0) { + tokenRefresher.scheduleRefresh(refreshDelay); + } else { + Log.w("FirebaseApp", "Token expiry (" + + googleOAuthToken.getExpiryTime() + ") is less than 5 minutes in the " + + "future. Not scheduling a proactive refresh."); + } } } }