【发布时间】:2014-07-22 20:40:06
【问题描述】:
我正在开发一个在 Google App Engine 上运行后端的 Android 插件,并且最近激活了 OAuth2 身份验证。 我的问题是,当我进行全新安装并且用户之前没有使用他的谷歌帐户登录时,我会显示登录对话框,然后他可以通过按 Facebook 按钮登录来登录。在收到来自 Facebook 的数据后,我对我的后端进行了授权调用,问题是这没有执行。 如果我重新启动应用程序并且用户已经使用他的谷歌帐户登录,那么一切正常。 PS:在这两种情况下,我都在凭据中设置了选定的帐户名称。
任何想法为什么在这种情况下不发送请求?
创建凭证的代码:
settings = getSharedPreferences("whostrPrefs", MODE_PRIVATE);
credential = GoogleAccountCredential.usingAudience(this, ID);
setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
if(credential.getSelectedAccountName() != null)
{
//all ok
Log.d("AccountName", "Everything is ok!");
}
else
{
Log.d("AccountName", "User needs to loggin!");
chooseAccount();
}
setSelectedAccount 方法:
private void setSelectedAccountName(String accountName)
{
SharedPreferences.Editor editor = settings.edit();
editor.putString(PREF_ACCOUNT_NAME, accountName);
editor.commit();
credential.setSelectedAccountName(accountName);
this.accountName = accountName;
}
chooseAccount 方法:
void chooseAccount()
{
startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
}
还有来自 onActivityResult 方法的 sn-p:
case REQUEST_ACCOUNT_PICKER:
if(data != null && data.getExtras() != null)
{
String accountName = data.getExtras().getString(AccountManager.KEY_ACCOUNT_NAME);
if(accountName != null)
{
setSelectedAccountName(accountName);
SharedPreferences.Editor editor = settings.edit();
editor.putString(PREF_ACCOUNT_NAME, accountName);
editor.commit();
Log.d("AccountName", "User is authorized!");
//user is authorized
}
}
break;
以及实际调用:
Userendpoint.Builder builder = new Userendpoint.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential);
Userendpoint service = builder.build();
try
{
response = service.loginuser(params[0], params[1], params[2], params[3], longitude,latitude).execute();
}
关于可能是什么问题的任何想法?我做错什么了吗?代码到达我拨打电话的地方……但没有通过。
LE:对端点的调用是使用 Google 登录凭据进行的(如 Google App Engine 网站上的教程中所示),但由于某种原因根本没有执行调用。在没有凭据的情况下调用会引发正确的未经授权的异常。
【问题讨论】:
标签: android google-app-engine oauth google-cloud-endpoints