Android Drive API OAuth BAD_AUTHENTICATION

问题描述:

我遇到Google Drive REST v3 android API的问题。 OAuth令牌获得BAD_AUTHENTICATION结果。这是我正在使用的连接代码。还可以注意到,OAuth许可屏幕没有显示出来,经过一段时间后,我得到了BAD_AUTHENTICATION结果。我是否需要手动将刷新令牌传递给服务器或其他东西?Android Drive API OAuth BAD_AUTHENTICATION

// Gather credentials 
credential = GoogleAccountCredential.usingOAuth2(getApplicationContext(), Arrays.asList(SCOPES)).setBackOff(new ExponentialBackOff()); 
SharedPreferences settings = getSharedPreferences("Roblu", Context.MODE_PRIVATE); 
String accountName = settings.getString("accountName", ""); 
credential.setSelectedAccountName(accountName); 

// Start Google services 
HttpTransport transport = AndroidHttp.newCompatibleTransport(); 
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); 
service = new com.google.api.services.drive.Drive.Builder(transport, jsonFactory, credential).setApplicationName("Roblu").build(); 

下面是结果代码:

08-15 14:11:27.621 4929-15182/? E/Auth: [GoogleAccountDataServiceImpl] getToken() -> BAD_AUTHENTICATION. Account: <ELLIDED:-238957088>, App: com.google.android.gms, Service: oauth2:https://www.googleapis.com/auth/games 
            dkq: Long live credential not available. 
             at dkr.a(:com.google.android.gms:3101) 
             at dje.a(:com.google.android.gms:397) 
             at djd.a(:com.google.android.gms:31369) 
             at djd.a(:com.google.android.gms:313) 
             at elb.a(:com.google.android.gms:1201) 
             at ela.a(:com.google.android.gms:530) 
             at ela.a(:com.google.android.gms:196) 
             at dfw.a(:com.google.android.gms:320) 
             at dfw.a(:com.google.android.gms:210) 
             at dgf.a(:com.google.android.gms:1498) 
             at dge.a(:com.google.android.gms:909) 
             at dge.e(:com.google.android.gms:523) 
             at dgd.a(:com.google.android.gms:37) 
             at dhm.getAuthToken(:com.google.android.gms:178) 
             at android.accounts.AbstractAccountAuthenticator$Transport.getAuthToken(AbstractAccountAuthenticator.java:214) 
             at android.accounts.IAccountAuthenticator$Stub.onTransact(IAccountAuthenticator.java:113) 
             at android.os.Binder.execTransact(Binder.java:453) 

从这个thread基础,你得到一个错误也许是因为用户的帐户连接到两个托管帐户和一个谷歌帐户,可能它有不同的密码每个认证服务器目前不处理这一点。按照这个Connecting to Google Drive with Google APIs Client Library for Java教程。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    // Google Accounts using OAuth2 
    m_credential = GoogleAccountCredential.usingOAuth2(this, Collections.singleton(DriveScopes.DRIVE)); 

    m_client = new com.google.api.services.drive.Drive.Builder(
      m_transport, m_jsonFactory, m_credential).setApplicationName("AppName/1.0") 
      .build(); 
    ... 
} 

您还可以查看这些相关的问题:

希望这有助于!

+0

谢谢!这是一个巨大的帮助。在Google上找不到任何其他内容... – wdavies973

+0

好吧,您的修复程序实际上并没有工作,我仍然维护您的答案,但是我的堆栈帐户数量不够高,所以它不会公开显示。 – wdavies973