我需要通过Android客户端识别向我的端点api发出请求的用户。虽然我能够通过使用gradle和android studio将我的Api和App保持在一个项目中来遵循最佳实践。此外,我能够向我的端点api发送请求并在未经授权的情况下接收响应。
基本上我需要在请求中发送授权令牌作为标头,人们建议,仅仅通过添加“GoogleAccountCredential”实例以及请求就可以完成下面代码中的操作。下面的代码所在的类扩展了android.os.AsyncTask;我一直关注https://cloud.google.com/appengine/docs/java/endpoints/consume_android#using_the_account_picker,但代码片段不是很清楚。
@Override
protected String doInBackground(Pair<Context, String>... params) {
..
MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), credential).setRootUrl("https://myapp.appspot.com/_ah/api/");
..
我有什么:
我的目标
当用户点击表单中的提交时。
Android应该能够找到Google帐户及其凭据,并将其附加到请求中。
如果找不到,则显示帐户选择器视图,以便用户可以选择帐户,如果我们可以在没有用户同意的情况下以静默方式进行,那将是非常好的。
我所拥有的额外方法:
class EndpointsAsyncTask扩展了AsyncTask,Void, 串GT;
void chooseAccount() {
mActivity.startActivityForResult(credential.newChooseAccountIntent(),
REQUEST_ACCOUNT_PICKER);
}
protected String fetchToken() throws IOException {
try {
return GoogleAuthUtil.getToken(mActivity, mEmail, mScope);
} catch (UserRecoverableAuthException userRecoverableException) {
// GooglePlayServices.apk is either old, disabled, or not present
// so we need to show the user some UI in the activity to recover.
userRecoverableException.printStackTrace();
} catch (GoogleAuthException fatalException) {
// Some other type of unrecoverable exception has occurred.
// Report and log the error as appropriate for your app.
}
return null;
}
public void getSettings(){
Log.d(APP, "get Settings ");
settings = mActivity.getSharedPreferences("Api", 0);
credential = GoogleAccountCredential.usingAudience(mActivity,
"server:client_id:Android-clientId.apps.googleusercontent.com");
setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
}
// setSelectedAccountName definition
private void setSelectedAccountName(String accountName) {
SharedPreferences.Editor editor = settings.edit();
editor.putString(PREF_ACCOUNT_NAME, accountName);
editor.commit();
credential.setSelectedAccountName(accountName);
this.accountName = accountName;
}
请注意我的端点服务器端已正确配置并正在运行。 它应该是直截了当的,但我无法解决这个问题,请指出错误或指示我解决这个问题的方向..
感谢阅读。 沙善
答案 0 :(得分:0)
这解决了我的问题。
http://android-developers.blogspot.in/2013/01/verifying-back-end-calls-from-android.html
https://cloud.google.com/appengine/docs/java/endpoints/auth
谢谢, 沙善