【发布时间】:2015-10-15 23:42:41
【问题描述】:
我需要通过 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/");
..
我有什么:
- 我有一个名为 ExpandedListViewActivity 的活动
- 另一件事是 ExpandedListAdaptor,它动态地填充视图(表单)。
我的目标
当用户点击表单中的提交时。
Android 应该能够找到 google 帐户及其凭据并将其附加到请求中。
如果没有找到,则显示帐户选择器视图,以便用户选择帐户,如果我们可以在未经用户同意的情况下静默进行操作,那就太好了。
我拥有的额外方法:
类 EndpointsAsyncTask 扩展 AsyncTask、Void、 字符串>
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;
}
请注意我的端点服务器端已正确配置和运行。 它应该是直截了当的,但我无法解决这个问题,请指出错误或告诉我解决这个问题的方向..
感谢阅读。 沙申克
【问题讨论】:
-
安卓专家,请帮忙
-
在文档cloud.google.com/appengine/docs/java/endpoints/…这里“TicTacToeSample”代表什么,是API Name吗? settings = getSharedPreferences("TicTacToeSample", 0);
标签: android google-app-engine android-asynctask google-oauth google-cloud-endpoints