【问题标题】:Getting list of Google Photos returned 401 unauthenticated获取 Google 照片列表返回 401 未经身份验证
【发布时间】:2020-01-22 13:34:47
【问题描述】:

我正在开发一款能够显示来自 Google 相册的图片的应用。

问题

当用户在Gmail Permission 中手动撤销我的应用时,就会出现问题。用户执行此操作(撤销权限)后,再次打开应用程序,当应用程序尝试访问 Google 照片中的图像列表时,这是我在 JSON 中收到的错误。

{
  "error": {
    "code": 401,
    "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED"
  }
}

在那之后,我退出并撤销了 Google 登录。我再次登录,出现选择 Gmail 帐户的弹出窗口,但未出现授予应用权限弹出窗口。它应该出现,以便应用可以再次请求用户允许权限。

授予应用权限弹出窗口。

这是我如何使用 Google 登录

val googleSignInOptions =
    GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestScopes(Scope("https://www.googleapis.com/auth/photoslibrary.readonly"))
        .requestEmail()
        .build()
val googleSignInClient = GoogleSignIn.getClient(context, googleSignInOptions!!)

这是我在代码中退出和撤销的方式

googleSignInClient?.signOut()
    ?.addOnCompleteListener {
        //Sign Out Complete
        googleSignInClient?.revokeAccess()?.addOnCompleteListener {
            //Revoke Complete
        }
    }

我的观察

  1. 即使Gmail Permission 页面中的权限已经被撤销,GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(context), Scope(GOOGLE_PHOTOS_READ_SCOPE)) 仍然返回 true。从逻辑上讲,它应该返回 false,因为用户已经撤销了权限。
  2. 即使应用已经从 Google Sign In 中退出,当用户再次登录时,只要过期时间仍在 1 小时内,用户将获得与前一个相同的访问令牌。

一天结束时,我希望能够在用户手动撤销权限后显示授予应用权限弹出窗口。谢谢。

【问题讨论】:

    标签: android google-api google-signin google-photos


    【解决方案1】:

    我已经找到了解决这个问题的方法。

    注销时需要在线程中调用这个函数来清除token。

    GoogleAuthUtil.clearToken(
        context,
        token
    )
    

    总的来说,这就是我退出的方式。

    googleSignInClient.signOut()
        .addOnCompleteListener {
            if (it.isSuccessful) {
                thread {
                    GoogleAuthUtil.clearToken(
                        context,
                        token
                    )
                    googleSignInClient.revokeAccess()
                }
            }
            callBack(it.isSuccessful)
        }
    

    【讨论】:

      猜你喜欢
      • 2017-04-24
      • 1970-01-01
      • 2018-11-13
      • 2021-09-12
      • 2020-10-25
      • 2022-01-17
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      相关资源
      最近更新 更多