我最近一直在处理 Android 上的 Google+ 登录问题,有一件事一直困扰着我。
在他们所有官方认可的示例中,没有一个方法专门显示登录过程。每次尝试让某人登录时调用的方法称为resolveSignInError(),如下所示:
private void resolveSignInError() {
if (mConnectionResult.hasResolution()) {
try {
mIntentInProgress = true;
mConnectionResult.startResolutionForResult(this, RC_SIGN_IN);
Log.d("mGoogleApiClient ", mGoogleApiClient.toString());
} catch (IntentSender.SendIntentException e) {
mIntentInProgress = false;
mGoogleApiClient.connect();
}
}
}
该方法还依赖于有一个mConnectionResult,它是在onconnectionfailure方法中设置的
public void onConnectionFailed(ConnectionResult result) {
if (!result.hasResolution()) {
GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this,
0).show();
return;
}
if (!mIntentInProgress) {
// Store the ConnectionResult for later usage
mConnectionResult = result;
if (mSignInClicked) {
// The user has already clicked 'sign-in' so we attempt to
// resolve all
// errors until the user is signed in, or they cancel.
resolveSignInError();
}
}
}
因此,整个计划都是围绕着至少一次登录失败展开的。
有谁知道为什么没有一种方法可以直接登录 google plus?
为什么这作为构建可读软件的一种方式有意义?
原因是设备无法知道您是否确实需要登录 - 登录实际上更像是访问某个设施(就像您可能访问位置一样),而不是输入用户名和密码。基本流程是:
- 连接Google Play服务,查看该应用是否已获得授权。
- 如果有,则连接成功。
- 如果不是,则连接失败。
如果您随后想要登录,请执行连接结果解析。
微妙的是,即使用户以前从未在设备上使用过该应用程序,您也可以转到步骤 2!例如,如果我访问您的网站并在那里登录,然后安装您的 Android 应用程序。
- 应用程序启动,并检索您的用户帐户列表(通过 GET_ACCOUNTS 权限)
- 它尝试使用任何帐户连接到 Google Play 服务
- Google Play 服务调用 Google 身份验证服务器,发现您已经登录到该应用程序(在本例中是在网络上)
- 应用程序获取 onConnected 回调
因此,没有登录方法的原因是登录状态实际上是远程的 - 它位于 Google 服务器上,而不是设备本身。因此,流程必须是异步的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)