我正在使用Google App Engine上运行的后端开发Android添加,并且最近激活了OAuth2身份验证。 我的问题是,当我进行全新安装并且用户之前没有使用他的谷歌帐户登录时,我会显示登录对话框,之后他可以通过按Facebook登录按钮登录。在从Facebook接收数据后,我对我的后端进行了授权调用,问题是这不会执行。 如果我重新启动应用并且用户已经使用他的Google帐户登录,那么一切正常。 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方法的片段:
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网站上的教程所示),但由于某种原因,调用根本没有执行。没有凭据的呼叫会引发正确的未经授权的异常。
答案 0 :(得分:0)
云内端点的内置Auth仅适用于Google登录(或OpenID,具体取决于您在创建项目时选择的身份验证类型)。
要与任何其他提供商进行身份验证,您需要编写自定义代码。您可以通过在API参数中传递facebook auth信息来完成此操作。