为什么Google+登录完成登录时出现错误



我最近一直在处理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这一事实,它在on连接失败方法

中设置
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 +吗?为什么这作为一种构建可读软件的方式是有意义的?

原因是设备无法知道您是否真的需要登录-登录实际上更像是访问设施(就像您可能使用位置一样),而不是输入用户名和密码。基本流程为:

  1. 连接到Google Play服务,查看应用程序是否已授权。
  2. 如果是,则连接成功。
  3. 如果不是,连接失败。

如果您想要登录,则执行连接结果解析。

微妙的是,即使用户以前从未在设备上使用过该应用程序,你也可能会进入步骤2 !例如,如果我登录到你的网站,然后安装你的android应用。

  1. 应用程序启动,并检索你的用户帐户列表(通过GET_ACCOUNTS权限)
  2. 它尝试连接到Google Play服务与任何帐户
  3. Google Play服务调用到Google认证服务器,发现你已经登录到该应用程序(在这种情况下,在web上)
  4. 应用程序获得onConnected回调

所以没有登录方法的原因是登录状态实际上是远程的——它存在于Google服务器上,而不是设备本身。因此,流必须是异步的。

我知道这个线程是非常古老的。更新,因为这是每次出现在谷歌。现在google play store API v8.4发布了,onConnectionFailed做了它必须做的事情。

查看此链接https://github.com/googlesamples/google-services/blob/master/android/signin/app/src/main/java/com/google/samples/quickstart/signin/SignInActivity.java

这是一个很普通的例子https://developers.google.com/+/mobile/android/sign-in:

There is method

`@Override
public void onConnected(Bundle connectionHint) {
  mSignInClicked = false;
  Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show();
}`

第一步有https://developers.google.com/+/mobile/android/getting-started

相关内容

  • 没有找到相关文章

最新更新