我在我的应用中使用"Google登录".因此,我使用GoogleApiClient类来获取用户电子邮件和我后端所需的ID令牌.
当用户登录时,我可以访问一个Activity(当然),我使用该Activity让GoogleApiClient通过调用builder.enableAutoManage(myActivity,...)来处理UI生命周期内容.
这很好用.
但是,在稍后阶段(几天后),我需要获得一个新令牌(出于某种原因,我不会在这里进一步讨论).我想在没有用户交互的情况下静默获取此令牌.但是,在我需要这个新令牌的代码中,我无法访问任何Activity实例.这意味着我无法进行上述调用,即"builder.enableAutoManage".而且我发现,如果我不打那个电话,那么静默登录似乎不起作用.
我已附上以下代码.现在,看看"silentLogin"方法.只要我作为用户收到的令牌执行了实际登录,小于一小时,则语句"pendingResult.isDone"将返回true并且可以接收缓存的令牌.但是,如果我作为用户进行实际登录时收到的令牌超过一小时,那么就会调用"pendingResult.setResultCallback",但是"onResult"方法永远不会被调用,我无法获得新的令牌.如果我从一个活动做同样的事情(并且通过它也调用"builder.enableAutoManage"),就不会发生这个问题.
那么,有没有人知道我做错了什么,更重要的是 - 如何解决这个问题并获得一个新的令牌而无需访问活动实例?
我使用的是com.google.android.gms:play-services-auth:8.4.0
package com.google.samples.quickstart.signin;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.Scopes;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.OptionalPendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Scope;
/**
* Use this class to login with google account using the OpenId oauth method.
*/
public class GoogleLoginStackOverflow {
private static final String TAG = GoogleLoginIdToken.class.getName();
private static final String SERVER_CLIENT_ID = "XXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com";
private GoogleApiClient mGoogleApiClient;
private Context mContext;
private GoogleLoginStackOverflow(Context appContext) …Run Code Online (Sandbox Code Playgroud) android google-authentication google-signin googlesigninaccount