我正在编写一个与远程服务器通信的Android应用,我希望允许应用用户使用驻留在手机上的Google凭据登录服务器,即无需用户输入他们的Google密码我应用中的任何地方。例如,如果用户的(Android)手机配置了“someguy@gmail.com”,然后他们安装并运行我的应用程序,我的应用程序将向他们显示一个对话框,说“你想以someguy @的身份登录gmail.com?“,点击确定按钮后,他们已经在我的服务器上建立了一个ID,知道他们的电子邮件地址是someguy@gmail.com,由google自己认证。
我已经找到了关于如何解决这个问题的广泛而多样的部分方法,包括谷歌自己的oauth2文档,但还没有理解如何实现这一切。
我有Android代码,它使用AccountManager来确定给定手机上的哪些Google帐户。我提示用户他们想要使用哪个Google帐户登录,然后我会收到授权令牌。
过去那一点,我几乎在旋转我的车轮。我看过的食谱似乎要求我做这种形式的http get:
http://<myWebServer>.com/_ah/login?continue=<someUrlIChoose>&auth=<authToken>
...(a)不满意,因为它似乎特别对于appengine而且我希望在我选择的任何后端自由运行这个,并且(b)甚至尝试使用appengine,appengine instance I设置似乎根本没有信号,即日志显示现在查询它(我希望someUrlIChoose url会被调用的东西)...因此没有机会被告知有效性令牌。
具体问题包括:
答案 0 :(得分:2)
您必须先导入google-play-services_lib,然后才能使用此代码:
import com.google.android.gms.auth.GoogleAuthUtil;
import com.google.android.gms.auth.UserRecoverableAuthException;
private void gmail_login() {
dialog = ProgressDialog.show(LoginActivity.this, "", getString(R.string.login_loading), true);
AsyncTask task = new AsyncTask() {
@Override
protected Object doInBackground(Object... params) {
getAndUseAuthTokenBlocking();
return null;
}
};
task.execute((Void)null);
}
void getAndUseAuthTokenBlocking() {
try
{
String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email";
AccountManager accountManager = AccountManager.get(this);
Account[] accounts = accountManager.getAccountsByType("com.google");
String token = GoogleAuthUtil.getToken(this, accounts[0].name, AUTH_TOKEN_TYPE);
//token here
}
catch (UserRecoverableAuthException userAuthEx) {
startActivityForResult(userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE);
}catch (Exception e){
DropErrorMsg.drop(this, handler, R.string.connection_error, R.string.error, dialog, false);
}
}
答案 1 :(得分:0)
这是你在寻找的东西吗?
大多数Android应用都有某种服务器端后端,可以持久存储和共享数据。即使是最基本的游戏也需要记住它 球员的高分。当你构建你的后端时,一个问题 你需要解决的是后端代码如何知道它在说什么应用程序 使用它的人是谁。
您可能有HTTP端点用于与客户端通信 应用程序,但服务器端代码如何确定谁发送消息 对吗?毕竟,任何人都可以从任何地方发送HTTP POST请求; 如果他们可以猜测他们的用户,他们会冒充他们的用户吗? 身份?
要求人们输入用户名和用户名是非常不友好的 移动设备上的密码。特别是,如果有人安装了 您的应用程序并授予其使用Internet并了解您的权限 身份,他们不应再被纠缠。
事实证明,Google Play服务现已上市 兼容设备运行Android 2.2或更高版本,提供了很好的 根据Google帐户的使用情况解决此问题。
http://android-developers.blogspot.se/2013/01/verifying-back-end-calls-from-android.html