3333import com .google .firebase .internal .FirebaseExecutors ;
3434import com .google .firebase .internal .FirebaseService ;
3535import com .google .firebase .internal .GetTokenResult ;
36+ import com .google .firebase .internal .Log ;
3637import com .google .firebase .internal .NonNull ;
3738import com .google .firebase .internal .Nullable ;
3839import com .google .firebase .tasks .Continuation ;
@@ -339,7 +340,8 @@ Task<GetTokenResult> getToken(boolean forceRefresh) {
339340 @ Override
340341 public GetTokenResult then (@ NonNull Task <GoogleOAuthAccessToken > task )
341342 throws Exception {
342- GetTokenResult newToken = new GetTokenResult (task .getResult ().getAccessToken ());
343+ GoogleOAuthAccessToken googleOAuthToken = task .getResult ();
344+ GetTokenResult newToken = new GetTokenResult (googleOAuthToken .getAccessToken ());
343345 GetTokenResult oldToken = currentToken .get ();
344346 List <AuthStateListener > listenersCopy = null ;
345347 if (!newToken .equals (oldToken )) {
@@ -353,7 +355,15 @@ public GetTokenResult then(@NonNull Task<GoogleOAuthAccessToken> task)
353355 // access to the token refresher.
354356 if (currentToken .compareAndSet (oldToken , newToken )) {
355357 listenersCopy = ImmutableList .copyOf (authStateListeners );
356- tokenRefresher .scheduleRefresh (TOKEN_REFRESH_INTERVAL_MILLIS );
358+ long refreshDelay = googleOAuthToken .getExpiryTime () - clock .now ()
359+ - TimeUnit .MINUTES .toMillis (5 );
360+ if (refreshDelay > 0 ) {
361+ tokenRefresher .scheduleRefresh (refreshDelay );
362+ } else {
363+ Log .w ("FirebaseApp" , "Token expiry ("
364+ + googleOAuthToken .getExpiryTime () + ") is less than 5 minutes in the "
365+ + "future. Not scheduling a proactive refresh." );
366+ }
357367 }
358368 }
359369 }
0 commit comments