【问题标题】:Using Actions on Google and Google Drive together?同时使用 Actions on Google 和 Google Drive?
【发布时间】:2017-01-27 01:14:54
【问题描述】:

我是一名业余爱好者,学生开发人员正在玩 Google 上的 Actions,在 Google Home 上创建一个简单的“文字冒险”游戏。由于 Google Home 将与玩家对话,而不是与阅读文本的玩家对话,我希望这将创造一种类似于“龙与地下城”角色扮演游戏的体验,让计算机充当“地下城主”。借助 API.AI 和 Google 上的 Actions 提供的自然语言帮助,这似乎很合适,因为玩家可以“自然地”做出回应。 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,并且我已经在控制台中很好地工作了。唯一的问题是在该快速入门中,用户必须单击链接以授权应用程序读取其 Google Drive 帐户中的内容,我不确定如何能够“单击链接”并回馈通过 Google Home 上的语音访问令牌。

有没有办法通过 Google 云端硬盘做到这一点?还是有更好的方法在会话之间提供持久数据?我通常不从事网络开发工作,因此将不胜感激。

【问题讨论】:

    标签: google-drive-api google-oauth actions-on-google


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      1. 您需要获得授权才能访问用户的云端硬盘空间
      2. 您需要对用户的 Home 进行身份验证(这样您就知道此人已经回来了)
      3. 您必须将这两种关系联系起来 - 这样您才能知道与您通话的家庭设备要使用哪个云端硬盘空间

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

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

      • Home 在发送到您的 webhook 的 JSON 中提供 anonymous user identity。如果您使用的是 Actions API 库,则可以使用 getUser().user_id 访问它,或者在 JSON 中的 data.user.user_id 字段中访问它。虽然这类似于浏览器 cookie,但它只存储用户 ID,不能存储其他数据。也没有“本地存储”的概念。从好的方面来说,此 ID 在设备之间是一致的。
      • 您可以请求user information,例如他们的姓名和地址。但它没有任何独特或帐户信息,因此这可能对您没有用处。
      • 您可以实现 OAuth2 服务器 并执行account linking。请注意,这是您需要对 Google 云端硬盘执行的操作的另一面 - 您将提供访问和刷新令牌以验证和授权访问您的帐户,Google Home 设备将发送这些令牌返回给您,以便您可以确定用户是谁。您实际上不需要存储帐户信息 - 您可以使用 JSON Web 令牌 (JWT) 或其他方法提供令牌信息,并让它们以安全的方式存储帐户信息。作为一次性事件,用户将使用 Google Home 应用实际登录您的服务。

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

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

      【讨论】:

      • 啊,我明白了。所以没有办法绕过滚动我自己的用户帐户系统来存储这些东西。看来我还有一些学习要做!与此同时,我将把它标记为已接受的答案。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2017-10-17
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多