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

2024-03-01

我最近一直在处理 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? 为什么这作为构建可读软件的一种方式有意义?


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

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

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

微妙的是,即使用户以前从未在设备上使用过该应用程序,您也可以转到步骤 2!例如,如果我访问您的网站并在那里登录,然后安装您的 Android 应用程序。

  1. 应用程序启动,并检索您的用户帐户列表(通过 GET_ACCOUNTS 权限)
  2. 它尝试使用任何帐户连接到 Google Play 服务
  3. Google Play 服务调用 Google 身份验证服务器,发现您已经登录到该应用程序(在本例中是在网络上)
  4. 应用程序获取 onConnected 回调

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Google+ 登录完成登录时出错? 的相关文章

随机推荐

  • 实现 OrientationEventListener 来帮助没有 CameraInfo 的相机问题?

    我需要实施一个OrientationEventListener以使相机正常工作 谷歌发布了一个示例实现onOrientationChanged看起来像这样 Override public void onOrientationChanged
  • 为什么 Fn 派生自 FnMut(FnMut 派生自 FnOnce)?

    如果您查看Rust 官方文档 https doc rust lang org std ops trait Fn html 你看到这个特质Fn源自FnMut 或者 实施Fn 你必须实施FnMut 在那之后FnOnce since FnMut也
  • iOS 音频单元会切断高于某个频率的声音

    我在接收声音 UDP WiFi 时遇到一些问题 我想尽可能清除它 所以一开始我想切断高于某个频率的声音 显然 我从套接字获取了原始数据 然后将其复制到输出缓冲区 我确信应该在那里进行精确的切断 你能建议我吗 我当前的回调代码 static
  • java中的kadane算法

    我在 java 中有以下 Kadane 算法的实现 基本上是找到连续子数组的最大和 String numbers string split int max so far 0 int max ending here 0 for int i 0
  • selenium 是否可以使用 xpath 通过“for”属性找到标签元素?

    selenium 是否可以使用 xpath 通过 for 属性找到标签元素 我正在测试一个连续有 7 个是或否问题的网站 CSS 的完成方式是单击标签而不是输入单选按钮 通常我只是通过文本内容查找元素 但每个问题都有一个 是 和 否 我认为
  • Cassandra - 从集群中删除节点

    我有一个包含三个节点的集群 我需要删除一个节点 在实际删除之前 如何确保要删除的节点中的数据将复制到其他两个节点 这是使用快照完成的吗 我应该如何进行 来自doc http cassandra apache org doc latest o
  • 带有刷新令牌的 JSON Web 令牌身份验证逻辑

    Angular 4 应用程序在浏览器 网站后端 中运行 显示特定用户拥有的服务器数据 服务器 PHP MySQL Zend Framework 3 Doctrine ORM Naming access token 生命周期短 1 分钟 允许
  • 如何在Excel中设置默认的特殊粘贴以仅粘贴值[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的 Excel 中的一个单元格用作用户输入框 如果用户在此单元格中粘贴某些内容 我只想粘贴值而不是格式 有没有办法将粘贴选项的默认值设置
  • Laravel 5.2 模型 $fillable 被忽略?

    我有一个简单的模型IsolatedQuery其中包括一个name and query场地 我已经在中定义了这两个字段 fillable模型的属性 isolatedQueryController store 看起来像这样 public fun
  • 如何在自定义 python-sphinx 指令/扩展中使用现有指令?

    我想创建一个自定义的Directive使用现有指令 code block在这个例子中 在它的实现中 reStructuredText 中的手动等效项是 mydirective py code block py print Hello wor
  • Powershell 中非常大的 XML 文件

    对于非常大的文本文件 我们可以选择使用 StreamReader 和 StreamWriter 然后允许逐行查找 替换 但是 我有一个 XML 文件 需要在其中进行查找 替换并进行更多控制 例如查找 替换特定节点中的值 该节点是具有特定属性
  • Git - 如何自动将目录中的更改推送到另一个分支

    完成问题重写 所以我以为我正在非常简单和直接地解释这个问题 但似乎我过于简单化了 所以这里是所有额外的细节 希望这可以帮助每个人看到这也不是重复的 我有一个存储库 项目 我想在其中自动化将提交从一个分支中的一个目录推送到另一个分支的过程 我
  • 使用“:”(冒号)按属性选择元素

    在我的项目中 有一个库生成元素的情况 我需要从那里选择特定的元素 它恰好包含带有 的属性 换句话说 我最终尝试选择使用 document querySelectorAll xml space 但是 在 Chrome 中测试时 它不起作用 也
  • 无法在 Xcode 10 中查找屏幕比例和意外的物理屏幕方向

    我最近将 Xcode 更新到版本 10 现在我的控制台显示 MyApp 1618 133310 AXMediaCommon Unable to look up screen scale MyApp 1618 133310 AXMediaCo
  • 点击 pageControl 滚动到另一个视图(点击点)

    我已经设置了具有 2 个视图的 PageViewControll 我可以在视图之间移动 并且 pageControl 点 对应于正确的页面 但是点击点还不能滚动到正确的视图 我在这里找到了一些关于如何创建该函数的答案 但无法成功实现以使其工
  • 带有自定义操作的 installshield

    我正在使用 installshield 2012 prime 创建一个基本的 msi 项目 我有两个问题 1 MSI 在创建要安装的应用程序的文件夹和文件后需要运行自定义 exe 只需在安装应用程序时执行一次此操作 2 MSI 还需要告诉正
  • iOS MobileVLCKit 存档问题

    在尝试归档我的项目时 我得到了这个error ld bitcode bundle could not be generated because Users MobileVLCKit MobileVLCKit framework Mobile
  • 如何将 Apigility 与现有 ZF2 应用程序结合使用?

    我有一个带有一些模块的 ZF2 应用程序 我希望允许在我的应用程序中使用具有 Apigility 的现有模块 我尝试使用 Composer 安装这些模块 require php gt 5 3 3 phpoffice phpexcel mon
  • 为映射和/或嵌套对象自定义 Spring @RequestParam 反序列化

    RestController class MyController RequestMapping public void test Container container Spring 默认使用 Dot Notation 来反序列化嵌套的
  • 为什么 Google+ 登录完成登录时出错?

    我最近一直在处理 Android 上的 Google 登录问题 有一件事一直困扰着我 在他们所有官方认可的示例中 没有一个方法专门显示登录过程 每次尝试让某人登录时调用的方法称为resolveSignInError 如下所示 private