几个月后,我的谷歌登录过程工作没有问题,但今天模拟器在Logcat中回复我这个错误:
E/Auth:[GoogleAccountDataServiceImpl]getToken((->NEED_mote_send。应用程序:com_pro.bandweb.mycpstore,服务:oauth2:电子邮件https://www.googleapis.com/auth/spreadsheets.readonlyopenid配置文件
试着在谷歌上查找,但我找不到任何建议。。。这是我用于sigIn:的代码
public void InitGoogle() throws IOException {
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(SPREADSHEETS_SCOPE))
.requestEmail()
.build();
googleSignInClient = com.google.android.gms.auth.api.signin.GoogleSignIn.getClient(this, gso);
if (GoogleSignIn.getLastSignedInAccount(this) == null) {
Log.v(TAG, "getting sign-on again");
//startActivityForResult(googleSignInClient.getSignInIntent(), RC_SIGN_IN);
SignInActivityResult.launch(googleSignInClient.getSignInIntent());
} else {
Log.v(TAG, "sign-on is still good, reusing");
//faccio la richiesta solo se è stato inserito il foglio di google shhet nelle preferenze, altrimenti avviso
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
if (!sharedPreferences.contains(getString(R.string.pref_googleSheetId_key))
|| StringUtils.isBlank(sharedPreferences.getString(getString(R.string.pref_googleSheetId_key), ""))
|| !(spreadsheetIdPattern.matcher(sharedPreferences.getString(getString(R.string.pref_googleSheetId_key), ""))).find()) {
// no Google sheet ID has been specified - can't retrieve ingredients
progressBar.setVisibility(ProgressBar.GONE);
Toasty.info(this, getString(R.string.missing_pref_id_sheet_title), Toasty.LENGTH_LONG, true).show();
}else {
//scelgo il tipo di sincronizzazione quando inizializzo il tablet, in base alla scelta nelle preferenze
if(AppSettings.get().getSyncModeOnStartup() == UPLOAD_DATI)
synchGoogleSheet(UPLOAD_DATI);
else if(AppSettings.get().getSyncModeOnStartup() == DOWNLOAD_DATI)
synchGoogleSheet(DOWNLOAD_DATI);
else
synchGoogleSheet(UPLOAD_DOWNLOAD_NONE);
}
}
progressBar.setVisibility(ProgressBar.GONE);
..
..
..
..
ActivityResultLauncher<Intent> SignInActivityResult= registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode() != RESULT_CANCELED) {
if (result.getResultCode() == Activity.RESULT_OK && null != result.getData())
{
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(result.getData());
handleSignInResult(task);
}
}else{
progressBar.setVisibility(ProgressBar.GONE);
}
}
});
确保完成以下所有步骤:
- 像@TomášHubálek上面说的那样,用正确的SHA1密钥设置谷歌云控制台(如果你的应用程序发布了,请注意PlayStore控制台中的谷歌应用程序签名密钥(
在我的情况下,经过很多解决方案都没有工作。我只针对UserRecoverableAuthIOException
错误找到并使用了此解决方案,并且它有效。
Java版本
catch (UserRecoverableAuthIOException userRecoverableException) {
myActivity.startActivityForResult(
userRecoverableException.getIntent(), MyActivity.REQUEST_AUTHORIZATION);
}
Kotlin版本
catch (e: Exception) {
if (e is UserRecoverableAuthIOException) {
myActivity.startActivityForResult(e.getIntent(), MyActivity.REQUEST_AUTHORIZATION);
} else {
// other cases
}
}
我在安卓11的谷歌像素5上遇到了同样的问题。
2021-08-11 13:32:59.603 29917-30363/? E/Auth: [GoogleAccountDataServiceImpl] getToken() -> NEED_REMOTE_CONSENT. App: de.aoksystems.ma.abp.app.internal, Service: oauth2:https://www.googleapis.com/auth/fitness.activity.read https://www.googleapis.com/auth/fitness.heart_rate.read https://www.googleapis.com/auth/fitness.nutrition.read
但它在三星S10与安卓11 上运行良好
4周前它起作用了。
我遇到了同样的错误,对我来说,这似乎与我的谷歌帐户有关。
我的应用程序使用Google Drive API,自2016年以来我就没有接触过该代码。我不经常使用这个应用程序,但在过去一年的某个时候,在我运行Android 8的旧手机上,驱动器集成对我来说停止了工作。我刚换了一部运行安卓11的新手机,却出现了同样的错误。然而,另一个人正在使用我的应用程序,他们根本没有问题(也是安卓11(。
在我的谷歌账户的安全部分,我的应用程序曾经显示为具有第三方访问权限,但现在已经消失了,我知道我自己不会撤销它。对于我的应用程序的其他用户,它仍然存在于他们的帐户中。
更新:我已经解决了这个问题,实际上没有对应用程序进行任何代码更改。我设置了一个连接到我的谷歌账户的模拟器(Pixel 5,Android 11(,在上面运行了我的应用程序,它正确地显示了同意屏幕,而不是返回这个错误。在允许之后,我的应用程序现在以第三方访问的身份出现在我的帐户中,该应用程序的功能立即在我的手机上恢复。
听起来这个解决方案并不适用于所有人,但至少在我的情况下,错误消息似乎意味着我的帐户没有被授权使用我的应用程序,并且被卡住了,需要另一个设备/模拟器来"验证";"力";通过。
我在Google Drive API上也遇到了同样的问题。我请求DRIVE_FILE和DRIVE作用域。我删除了请求DRIVE作用域权限的请求,问题消失了。我很确定这个问题是开发人员遇到的,他们在Google API控制台中没有必要的权限。所以,你应该在那里检查你的权限。
在我的应用程序中,此错误消息是由缺少OAuth同意屏幕引起的。要解决这个问题,您必须执行以下操作:
- 转到谷歌云控制台
- 选择您的项目
- 选择API&服务
- 选择OAuth同意屏幕
- 填写所有必需信息
执行该操作后,NEED_REMOTE_CONSENT
错误立即消失。
在我的情况下,这似乎与Android 12有关。
我的应用程序在安卓R(API30(上运行并验证良好,但当我在安卓S(API31(上部署相同的apk时,我会收到完全相同的错误消息:
E/Auth: [GoogleAccountDataServiceImpl] getToken() -> NEED_REMOTE_CONSENT. In both cases I'm testing on the Android Emulator as well a physical devices.
在我的情况下,问题在于访问Google Fit和Google Tasks API
您可以通过配置google API控制台来遵循此过程:https://stackoverflow.com/a/65900011并且到达该中间屏幕。