gpt4 book ai didi

android - 适用于安卓的谷歌加号 : Invalid Credentials

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:56:36 26 4
gpt4 key购买 nike

在连接到 Google+ 后,我正在使用以下代码获取访问 token ,以获取个人资料信息和电子邮件:

String sAccessToken = GoogleAuthUtil.getToken(this,mPlusClient.getAccountName() + "",
"oauth2:" + Scopes.PLUS_PROFILE + "
https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/userinfo.email");

我没有存储和尝试重新使用此访问 token 。相反,我每次都要求访问 token ,期待一个新的(不同的) token ,这样我就不需要检查它是否过期等。

但我每次请求时都得到相同的访问 token 。我卸载了该应用程序,清除了 Google+ 应用程序 的数据,但我仍然获得相同的访问 token 。

实际问题是,使用此访问 token 会出现 401 错误 - "message": "Invalid Credentials"

{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}

这是浏览器的响应。

在设备上,我在 Logcat 中得到了这个:

02-25 02:09:46.919: W/System.err(3022): java.io.FileNotFoundException: https://www.googleapis.com/oauth2/v1/userinfo
02-25 02:09:46.929: W/System.err(3022): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:521)
02-25 02:09:46.929: W/System.err(3022): at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:258)
02-25 02:09:46.929: W/System.err(3022): at com.example.gmaillogin.MainActivity$connectAsyncTask.doInBackground(MainActivity.java:269)
02-25 02:09:46.929: W/System.err(3022): at com.example.gmaillogin.MainActivity$connectAsyncTask.doInBackground(MainActivity.java:1)
02-25 02:09:46.929: W/System.err(3022): at android.os.AsyncTask$2.call(AsyncTask.java:185)
02-25 02:09:46.929: W/System.err(3022): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
02-25 02:09:46.929: W/System.err(3022): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
02-25 02:09:46.929: W/System.err(3022): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
02-25 02:09:46.929: W/System.err(3022): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
02-25 02:09:46.929: W/System.err(3022): at java.lang.Thread.run(Thread.java:1019)

第 269 行:

urlConnection = (HttpURLConnection) url.openConnection();

完整代码:

URL url = new URL("https://www.googleapis.com/oauth2/v1/userinfo");
String sAccessToken = GoogleAuthUtil.getToken(
MainActivity.this,
mPlusClient.getAccountName() + "",
"oauth2:" + Scopes.PLUS_PROFILE + "
https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/userinfo.email");

Log.d("sAccessToken = ", "" + sAccessToken);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestProperty("Authorization", "Bearer "
+ sAccessToken);

BufferedReader r = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream(), "UTF-8"));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
line = total.toString();

编辑:

这肯定是因为Access Token过期了。这是预料之中的,但我认为我每次打电话都会得到一个新的访问 token 。

但如前所述here :

If the android device already has an auth token (for the particular GData service you're trying to access), it will be returned to you

所以,我必须这样做:

if (server indicates token is invalid) {
// invalidate the token that we found is bad so that GoogleAuthUtil won't
// return it next time (it may have cached it)
GoogleAuthUtil.invalidateToken(Context, String)(context, token);
// consider retrying getAndUseTokenBlocking() once more
return;
}

喜欢docs

但是如何检查访问 token 是否过期或无效?

通过捕获异常 - 是唯一的解决方案吗?

实际上异常是 java.io.FileNotFoundException 这没有意义。

最佳答案

此处涵盖基础知识:您是否通过指定应用程序包名称和证书(测试或产品)的 SHA-1 指纹,为您的 Android 应用程序创建了 register a Google APIs Console project 和 OAuth 2.0 客户端 ID?

401 无效凭据消息通常是由于未配置 API 控制台项目或其中一项设置无效所致。

专门针对 Google+ SDK 完成设置过程的步骤如下:https://developers.google.com/+/mobile/android/getting-started

编辑

PlusClient 可以自动为您处理 token 。我建议使用 PlusClient 提供的方法并允许客户端管理 token 而不是手动执行。如果您需要通过 PlusClient 获取电子邮件或个人资料数据,请参阅 PlusClient.loadPerson(),对于电子邮件 PlusClient.getAccountName(),更多详细信息请参见 https://developers.google.com/+/mobile/android/people

关于android - 适用于安卓的谷歌加号 : Invalid Credentials,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15216550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com