Google 端点 - Android GoogleAuthIOException Tic Tac Toe - 删除了 clientIds

2023-12-08

我下载了 Google Endpoints Tic Tac Toe 示例 - Java 中的服务器代码。

为了快速运行它,我从 API 定义中删除了 clientId,这样我就可以快速看到它在 API Explorer 中运行:

@Api(name = "tictactoe", version = "v1")
public class ScoresV1
{
...

我可以使用 API Explorer 运行以下方法,打开 OAuth 并使用我的 Gmail 帐户进行身份验证。我可以在调试器中看到设置为该帐户的“用户”对象:

@ApiMethod(name = "scores.list")
@SuppressWarnings("unchecked")
public List<Score> list(@Nullable @Named("limit") String limit,
        @Nullable @Named("order") String order, User user)
        throws OAuthRequestException, IOException
{
    ...

然后我继续生成 Android 客户端(clientId 仍被删除)。我还下载了官方安卓应用程序获取 UI 类和 res 文件(帐户选择器和游戏界面)。

这就是我被困住的地方。当在真实的 Android 设备上运行时,TictactoeActivity 中的以下代码抛出了 GoogleAuthIOException:

    @Override
    protected ScoreCollection doInBackground(Void... unused)
    {
        ScoreCollection scores = null;
        try
        {
            scores = service.scores().list().execute();
        }
        catch (IOException e)
        {
            e.printStackTrace();

这是例外情况:

02-21 16:38:47.051: D/TicTacToe(6151): com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException
02-21 16:38:47.051: D/TicTacToe(6151):  at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:286)
02-21 16:38:47.051: D/TicTacToe(6151):  at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:858)
...

进一步深入研究源代码,我发现 GoogleAuthUtil.getToken() 中的这段代码引发了根异常,这有点无济于事:

com.google.android.gms.auth.GoogleAuthException: Unknown

现在,我在本地开发服务器上的 ScoreV1.list() 处设置了一个断点,在使用 API Explorer 进行测试时命中了该断点,但 Android 客户端甚至没有命中服务器就失败了。现在,在本地开发服务器上设置“-a 0.0.0.0”以接受传入连接。我已经检查过该 URL 也正确,并且我可以从手机运行以下 URL Chrome 浏览器(由于没有设置用户,它给了我一个身份验证错误,但没关系):

http://192.168.2.23:8888/_ah/api/tictactoe/v1/score?limit=1&order=1

所以我知道网络正在运行并且手机可以访问它。我还验证了 AndroidManifest.xml 具有以下权限集:

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />

下面的代码显示了 TicTacToe.java 中的 URL 和路径:

    public static final String DEFAULT_ROOT_URL = "http://192.168.2.23:8888/_ah/api/";

/**
 * The default encoded service path of the service. This is determined when
 * the library is generated and normally should not be changed.
 * 
 * @since 1.7
 */
public static final String DEFAULT_SERVICE_PATH = "tictactoe/v1/";

/**
 * The default encoded base URL of the service. This is determined when the
 * library is generated and normally should not be changed.
 */
public static final String DEFAULT_BASE_URL = DEFAULT_ROOT_URL
        + DEFAULT_SERVICE_PATH;
...

现在,真正让我困惑的是,即使我将 DEFAULT_ROOT_URL 更改为随机的内容(例如 5.5.5.5),我也会得到完全相同的 GoogleAuthIOException!当主机无法访问时,我希望得到不同的异常......

另外,我尝试将服务器部署到生产环境,并将 URL 重新指向 [myapp].appspot.com 地址 - 结果相同。服务器日志从未记录传入的请求。

事实上,我现在真的陷入困境了。请帮忙!太感谢了!!!


该错误很可能是由于您的 Android 应用程序和 Cloud Endpoints API 之间未发生授权所致。

由于我无法完全访问您的实际 Endpoint API 注释和 Android 代码,因此我建议您仔细查看以下几点:

  • 确保您已使用以下内容正确注释您的 Cloud Endpoints APIclientIds and audiences。 Android Audience 值与 Web Client Id 的值相同。

  • 确保您已部署更新的 API 并重新生成 Endpoints API 源以包含在您的 Android 应用程序中。

  • 最后,在 Android 源代码中,您必须使用 GoogleAccountCredential.usingAudience(...) 构建 GoogleAccountCredential 的实例,然后在调用端点 API 时使用此凭证对象。例如端点构建器采用 HTTP 传输、GSON 工厂和凭证。不要将最后一个参数(即 Credential)保留为空。

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

Google 端点 - Android GoogleAuthIOException Tic Tac Toe - 删除了 clientIds 的相关文章

  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 从休眠乐观锁定异常中恢复

    我有一个这样的方法 Transactional propagation Propagation REQUIRES NEW public void doSomeWork Entity entity dao loadEntity do some
  • Android 中的 OpenGL 缩小

    我正在使用 3D 对象并渲染它并通过扩展 GLSurfaceView 实现渲染器来显示它 问题是如何通过捏合和捏合进行缩小 下面是我的班级 package com example objLoader import java nio Byte
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • 在 Java 中通过 XSLT 分解 XML

    我需要转换具有嵌套 分层 表单结构的大型 XML 文件
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • 安卓。 CalendarView...一次仅显示一个月的日历

    我正在使用 CalendarView 其中我想一次仅查看一个月的日历并滚动查看下个月 但 CalendarView 一次显示所有月份 下面是我的代码
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • 使用 Play Integrity API 时,Firebase 电话身份验证会出现缺少客户端标识符错误

    使用 Firebase 电话身份验证注册 登录时 身份验证流程始终会启动 reCAPTCHA 流程 并在返回应用程序后发出missing client identifier error 我的设置之前适用于设备验证 安全网络 API 除了我的
  • Lombok @Builder 不创建不可变对象?

    在很多网站上 我看到 lombok Builder 可以用来创建不可变的对象 https www baeldung com lombok builder singular https www baeldung com lombok buil
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • Android 标记如何实现拖放?

    你好 我正在 Android 中开发 MapView 应用程序 我有三个标记 我希望稍后能够使用 Google Map API getlocation function 为了尝试一下 我想使用拖放功能移动标记 然后检查位置 任何人都可以通过
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • 何时在 hibernate 中使用 DiscriminatorValue 注解

    在 hibernate 中使用 DiscriminatorValue 注释的最佳场景是什么以及何时 这两个链接最能帮助我理解继承概念 http docs oracle com javaee 6 tutorial doc bnbqn html
  • HTTP 基本身份验证 + 访问令牌?

    我正在开发一个 REST API 计划将其与 Web 和 IOS 应用程序一起使用 我打算让这个 API 在一段时间内保持私有 私有意味着我只希望我的 Web 应用程序和 ios 应用程序访问该 API 我已经阅读了许多不同的身份验证方法
  • try-with-resources 中出现死代码警告,但翻译后的 try-catch-finally 中没有出现死代码警告

    以下代码使用try 有资源 https docs oracle com javase specs jls se7 html jls 14 html jls 14 20 3Java 8 中引入的构造 偶尔抛出 方法被声明为抛出一个偶尔的异常

随机推荐

  • Chrome 中的“Access-Control-Allow-Origin 不允许 Origin null”。为什么? [复制]

    这个问题在这里已经有答案了 我正在开发一些 Javascript 以在我的 PC 上本地运行 我正在使用 jQuery CSV 插件 http plugins jquery com project csv 将 csv 文件加载到 javas
  • 将函数名称存储在数据库中然后执行

    我正在制作一种 CMS 系统 该系统在网页的各个部分中工作 并将每个部分作为不同的条目存储到 MySQL 数据库的表中 当用户第一次设置页面时 PHP 脚本调用一个名为addsection name content 将该部分添加到数据库中
  • Delphi:等待bat脚本运行结束

    我有bat 文件 可以进行一些操作 如何从 Delphi 运行该文件并等待 直到它停止 像这样的东西 procedure TForm1 Button1Click Sender TObject begin Starting bat file
  • Git:如何重置远程 Git 存储库以删除所有提交?

    如何重置远程和本地 Git 存储库以删除所有提交 我想以当前的 Head 作为初始提交重新开始 完全重置 删除 git本地目录 重新创建 git 存储库 cd project directory git init add some file
  • 如何从数组中返回随机值?

    我正在使用 jQuery 验证插件 并希望在成功时返回一个随机值 现在我正在尝试使用 var success message new Array success message 0 Good success message 1 Ok suc
  • pygame 让球互相弹开

    我试图让球互相弹开 我尝试使用reflect 方法 但由于某种原因不起作用 为了检测球 我使用了groupcollide 既然我想不出更好的方法 也许这是错误的 import pygame import random class Ball
  • 为什么我的 Python 合并排序这么慢?

    我在理解这种行为时遇到了一些困难 我正在使用 timeit module 测量执行时间并得到以下结果10000 cycles Merge 1 22722930395 气泡 0 810706578175 选择 0 469924766812 这
  • 根据可变的用户定义路径从关闭的工作簿复制数据

    我已经用尽了我的搜索能力来寻找解决方案 以下是我想做的事情的概述 用户打开启用宏的 Excel 文件 立即提示用户输入或选择所需工作簿的文件路径 他们需要选择两个文件 并且文件名可能不一致 输入文件位置后 第一个文件选择的第一个工作表将被复
  • 将列表转换为“转置”列表

    这可能是一个初学者问题 但我不知道如何寻找答案 因为我无法 命名 问题 我有 2 个列表或 2 个列表的元组 xxx time1 time2 time3 yyy value1 value2 value3 zzz xxx yyy 现在我想为每
  • iOS 4.3 库的 xcode4 文档

    我安装了 xcode4 并在 Organizer 我可以看到的文档iOS 4 3 库 Mac OS X 10 6 库 and Xcode 4 0 开发者库 但是 当我离线时 我无法访问 iOS 库文档 我得到加载网址时出错您没有连接到互联网
  • 什么控制PhoneGap是否打开外部浏览器/Safari?

    有时PhoneGap在Safari中打开网页 有时在其UIWebView中打开网页 是什么控制的 From PhoneGap支持普通网络吗 https github com callback callback ios blob master
  • Cron 表达式:在 ASP.Net Core 中每天运行一次任务

    我的asp net core程序需要收集前一天访问网站的所有IP 当一天结束时 我需要将 IP 列表输出到 txt 文件 因此 程序应该每天运行一次保存 IP 列表的方法 我应该如何设计它 在我看来 我会在startup cs并设置Task
  • 以编程方式包含在项目中

    我们如何使用代码将文件包含在项目中 我想包含这个文件 我也想要这样的等价物 在代码中 可能吗 您可以通过几种方法来做到这一点 命令行 devenv 命令 File AddExistingSolutionItem完整路径 文件名 项目文件 项
  • 将 Excel 批量转换为文本分隔文件

    您好 我在处理将 Excel 电子表格转换为 txt 文件时遇到问题 我想要做的是创建一个宏 它可以将一个文件夹中的所有 xls 文件转换为 txt 文件 目前正在处理的代码 Sub Combined Application Display
  • 按子列表的值对 LIst 列表进行排序

    private List
  • OmniFaces ViewScoped bean 的内存影响?

    据我了解 ViewScoped bean 仅在发生以下情况之一时才会被销毁 1 JSF 向另一个页面发送 POST 请求 其中包含类似
  • 在 Groovy 中查找方法的名称

    Groovy 有没有办法找出被调用方法的名称 def myMethod println This method is called method methodName 这与鸭子类型相结合将允许非常简洁 并且可能难以阅读 的代码 Groovy
  • 为什么数据库上有“关系”而不是仅仅使用SQL的连接?

    我总是在数据库文章或教程中看到 在他们使用数据库的任何地方 他们都使用一种称为关系的东西 我立即想到那些带有字段名称列表的小盒子 一个字段用一条线连接到另一个盒子中的另一个字段 我不是数据库方面的专家 正如您可能知道的那样 但我使用过的一点
  • 通过vc++编程获取主板唯一ID号

    主板是否有唯一的 ID 或 OEM 原始设备制造商 编号 如果有 我如何通过 vc 编程获得它 任何提示或帮助表示赞赏 In this sample 更换Win32 OperatingSystem and Name在代码中添加到您感兴趣的代
  • Google 端点 - Android GoogleAuthIOException Tic Tac Toe - 删除了 clientIds

    我下载了 Google Endpoints Tic Tac Toe 示例 Java 中的服务器代码 为了快速运行它 我从 API 定义中删除了 clientId 这样我就可以快速看到它在 API Explorer 中运行 Api name