在 Google 和 Google 上使用 Actions 一起开车?

Using Actions on Google and Google Drive together?

我是一名业余爱好者学生开发者,在 Google 上使用 Actions 在 Google 主页上创建一个简单的 "text adventure" 游戏。由于 Google Home 将与玩家交谈而不是玩家阅读文本,我希望这将创造一种类似于 "Dungeons and Dragons" 角色扮演游戏的体验,其中计算机作为 "Dungeon Master." API.AI 提供的自然语言帮助和 Google 上的操作似乎很合适,因为玩家可以回应 "naturally." Here's an example of an Amazon Alexa skill that does essentially what I'm going for.

然而,每次我启动游戏时,它总是一个新游戏。我想在用户的 Google 驱动器上托管的 JSON 文件中存储一个包含用户之前状态的游戏存档——因为我只是一个学生,只是为了好玩,所以我实际上并没有有一个官方网站或除了免费的 Heroku 服务器之外的任何东西我是 运行 应用程序的来源,使存储保存在我这边几乎是不可能的。

我已经完成了 Google Drive REST quickstart for Node.js,我已经在控制台中正常工作了。唯一的问题是在该快速入门中,用户必须单击 link 以授权应用程序读取其 Google Drive 帐户中的内容,我不确定我如何能够"click a link" 并通过 Google 主页上的语音返回访问令牌。

有没有办法通过 Google Drive 来做到这一点?或者是否有更好的方法在会话之间提供持久数据?我通常不从事 Web 开发工作,因此将不胜感激。

坏消息是您将无法摆脱用户使用其网络浏览器授权您的应用程序访问其云端硬盘的需要。

好消息是您只需执行一次。当您的应用程序请求授权时,它应该指定 "offline",这将导致您获得刷新令牌。您应该将其保存在用户数据库中的某个位置。每当您需要访问用户的云端硬盘时,您都可以使用保存的刷新令牌来请求访问令牌,一切顺利。

你有几个问题需要在这里解决,虽然它们看起来相关,但它们并不像你希望的那样相关:

  1. 您需要获得访问用户云端硬盘的权限space
  2. 你需要验证用户的主页(所以你知道这个人已经回来了)
  3. 您必须连接这两种关系 - 这样您就知道要为与您通话的家庭设备使用什么驱动器 space

您已经找到 (1) 的答案,如前所述,您需要使用浏览器让他们授权您访问他们的云端硬盘。然后,您将存储刷新令牌,以便将来访问它。

但这只是问题的一部分。 Home 不让您直接访问用户的 Google 帐户,因此您必须管理自己的帐户机制并将其绑定到 Home。这里有一些解决方案:

  • 主页提供 anonymous user identity 在 JSON 发送到您的 webhook。如果您使用的是 Actions API 库,则可以使用 getUser().user_id 访问它,或者在 JSON 的 data.user.user_id 字段中访问它。虽然这类似于浏览器 cookie,但它仅存储用户 ID,不能存储其他数据。也没有"local storage"的概念。从好的方面来说,这个 ID 在不同设备上是一致的。
  • 您可以要求 user information 例如他们的姓名和地址。但它没有任何唯一信息或帐户信息,因此这可能对您没有用。
  • 您可以实施 OAuth2 服务器 并执行 account linking。请注意,这是您需要对 Google Drive 执行的操作的 另一面 - 您将提供访问和刷新令牌以验证和授权对您帐户的访问,以及Google 家用设备会将这些令牌发回给您,以便您确定用户是谁。您实际上不需要存储帐户信息 - 您可以使用 JSON Web 令牌 (JWT) 或其他方法提供令牌信息,并让它们以安全的方式存储帐户信息。用户将使用 Google Home 应用程序作为 one-time 事件实际 sign-in 您的服务。

为了处理 (3),您可能认为 (1) 可以让您获得令牌,而 (2) 的 OAuth 解决方案需要您分发令牌。两者可以结合吗?好吧……可能吧,但这并不那么简单。您不能只将 Google OAuth2 端点提供给 Home - 他们会明确阻止它,您需要控制您的 OAuth2 端点。但是,您可能能够构建代理端点 - 但我还没有探讨这样做的安全隐患。

我认为您的方向是正确的 - 使用云端硬盘是存储用户信息的好地方。使用 Home 的帐户链接为您提供了一个他们必须访问您的网站以验证和授权他们的 Home 的地方,您可以使用它为他们的云端硬盘做同样的事情。