【问题标题】:OAuth 2.0 on AndroidAndroid 上的 OAuth 2.0
【发布时间】:2018-08-17 19:34:18
【问题描述】:

我想创建一个简单的应用来检查新推出的 Google Photos Library API (https://developers.google.com/photos/library/guides/get-started) 的功能。 但是,我在尝试获取专辑列表时遇到 401 错误。我在 API 控制台中启用了照片库 API,并且在我的应用程序中我使用以下代码请求访问此范围:

    val GOOGLE_PHOTOS_SCOPE = Scope("https://www.googleapis.com/auth/photoslibrary.readonly")
    if (!GoogleSignIn.hasPermissions(
                    GoogleSignIn.getLastSignedInAccount(this),
                    GOOGLE_PHOTOS_SCOPE)) {
        GoogleSignIn.requestPermissions(
                this,
                1,
                GoogleSignIn.getLastSignedInAccount(this),
                GOOGLE_PHOTOS_SCOPE)
    } else {
        Log.d(TAG, "Permission granted")

        (application as QuizApp).photosLibraryApi.getAlbumList().enqueue(
                object: retrofit2.Callback<ResponseBody> {
                    override fun onFailure(call: Call<ResponseBody>?, t: Throwable?) {
                        Log.e(TAG, "FAIL ${t.toString()}", t)
                    }

                    override fun onResponse(call: Call<ResponseBody>?, response: Response<ResponseBody>?) {
                        Log.d(TAG, "Success ${response.toString()}")
                    }

                }
        )
    }

我想我需要以某种方式从 credentials.json 文件中提供我的 client_id 和 project_id,但我不知道该怎么做。以前有人做过吗?任何提示什么是执行 Google 的 OAuth2.0 的最佳方法?

【问题讨论】:

    标签: android oauth-2.0 kotlin google-photos


    【解决方案1】:

    使用 Google 帐户登录后(这是异步操作,因此您需要一个监听器 - 请参阅 Google 登录文档),您可以获得授权码。您需要使用此代码交换访问令牌,然后将此访问令牌作为参数传递给您的所有 Google Photos API 调用。 我只是使用像 OKHTTP(在 Android 上)这样的库来构建 api 请求以获取此访问令牌,是的,您需要您的客户端密钥。 注意:JAVA 代码,当然你也可以在 Kotlin 中用不同的语法做同样的事情。

    OkHttpClient client = new OkHttpClient();
            RequestBody requestBody = new FormEncodingBuilder()
                    .add("grant_type", "authorization_code")
                    .add("client_id", CLIENT_AUTH_KEY_WEB)
                    .add("client_secret", CLIENT_SECRET)
                    .add("redirect_uri", "")
                    .add("code", ACTUAL AUTHORISATION CODE AFTER LOGIN)
                    .build();
            final Request request = new Request.Builder()
                    .url("https://www.googleapis.com/oauth2/v4/token")
                    .post(requestBody)
                    .build();
    

    在此之后(并且您需要启用侦听器以了解成功或失败 - 请参阅 OKHTTP 文档),然后您可以使用访问令牌来访问 API。 当然,正如我看到您正在使用的那样,它也应该与 RetroFit 一起使用,但我没有使用该库的经验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-01
      • 2011-07-22
      • 2018-04-09
      • 1970-01-01
      • 2013-05-01
      • 2014-03-30
      • 2017-11-22
      • 1970-01-01
      相关资源
      最近更新 更多