2017-01-27 3 views
1

Я студент-разработчик хобби, играющий с действиями в Google, чтобы создать простую игру «текстовое приключение» в Google Домой. Поскольку Google Home будет говорить с игроком, а не с игроком, читающим текст, я надеюсь, что это создаст опыт, похожий на ролевую игру «Подземелья и драконы», а компьютер работает как «Мастер подземелий». С помощью естественного языка, предлагаемого API.AI и Действиями в Google, это казалось хорошим подспорьем, так как игрок может ответить «естественно». Here's an example of an Amazon Alexa skill that does essentially what I'm going for.Использование действий на Google и Google Диске вместе?

Однако каждый раз, когда я загружаю игру, это всегда новая игра. Я хотел бы сохранить сохраненную игру с предыдущим состоянием пользователя в файле JSON, размещенном на Google Диске пользователя. Поскольку я всего лишь студент, делающий это для удовольствия, у меня фактически нет официального сайта или чего-либо кроме бесплатный сервер Heroku. Я запускаю приложение, поэтому сохранение сохранности в моем конце практически невозможно.

Я прошел через Google Drive REST quickstart for Node.js, и я получил то, что работает в консоли просто отлично. Единственная проблема в этом быстром старте, пользователь должен щелкнуть ссылку, чтобы авторизовать приложение, чтобы прочитать материал в своей учетной записи Google Диска, и я не уверен, как я смогу «щелкнуть ссылку» и вернуть токен доступа через голос в Google Домой.

Есть ли способ сделать это с помощью Google Диска? Или есть лучший способ обеспечить постоянную передачу данных между сеансами? Обычно я не работаю в веб-разработке, поэтому любая помощь будет оценена по достоинству.

ответ

1

У вас есть несколько проблем, которые нужно решать здесь, и в то время как они, кажется, связаны между собой, они не так родственный, как вы могли бы надеяться:

  1. Вы должны получить разрешение на доступ диске пользователя
  2. необходимо пройти проверку подлинности пользователя Home (так что вы знаете, этот человек вернулся)
  3. вы должны соединить два отношения - так что вы знаете, что места на диске, чтобы использовать для домашнего устройства, которое разговаривает с вами

Вы уже нашли ответы на (1), и, как уже отмечалось, вам нужно будет использовать браузер для авторизации доступа к своему Диску. Затем вы сохраните токен обновления и сможете получить к нему доступ в будущем.

Но это только часть проблемы. Home не предоставляет вам доступ к учетной записи пользователя Google напрямую, поэтому вам придется управлять своим собственным механизмом учета и привязать его к дому. Существует несколько решений здесь:

  • Дом предоставляет anonymous user identity в JSON, отправленном на ваш веб-сайт. Вы можете получить доступ к этому, используя getUser().user_id, если вы используете библиотеку API действий или получаете доступ к этому в поле data.user.user_id в JSON. Хотя это похоже на файл cookie браузера, он сохраняет только идентификатор пользователя и не может хранить дополнительные данные. Также нет понятия «локальное хранилище». С положительной стороны, этот идентификатор согласован между устройствами.
  • Вы можете запросить user information, например их имя и адрес. Но у него нет ничего уникального или информации об учетной записи, так что это, вероятно, вам не пригодится.
  • Вы можете реализовать сервер OAuth2 и сделать account linking. Обратите внимание, что это другая сторона из того, что вам нужно сделать с Google Диском - вы будете предоставлять токены доступа и обновления для проверки подлинности и авторизации доступа к своей учетной записи, а устройство Google Home отправит эти токены обратно вам вы можете определить, кто такой пользователь. Вам фактически не нужно хранить информацию об учетной записи - вы можете предоставлять информацию токена, используя JSON Web Tokens (JWT) или другие методы, и иметь их безопасную учетную информацию. Пользователи будут использовать приложение Google Home для фактического входа в вашу службу в качестве одноразового события.

Для управления (3) вы можете думать, что (1) позволяет вам получать токены, а решение OAuth для (2) требует раздачи жетонов. Можно ли объединить два? Ну ... наверное, но это не так просто. Вы не можете просто предоставить конечным точкам Google OAuth2 Home - они явно блокируют это, и вам нужно контролировать конечные точки OAuth2. Тем не менее, вы можете создавать конечные точки прокси-сервера, но я не изучил последствия этого для безопасности.

Я думаю, что вы на правильном пути - с помощью Drive это хорошее место для хранения информации о пользователях. Использование ссылок на главную страницу позволяет вам найти место, где они должны прийти на ваш веб-сайт, чтобы пройти аутентификацию и авторизацию своего дома, и вы можете использовать это, чтобы сделать то же самое для своего Диска.

+0

А, я вижу. Таким образом, нет возможности обойти мою собственную систему учетных записей пользователей, чтобы сохранить этот материал. Похоже, мне еще предстоит научиться! Тем временем я собираюсь отметить это как принятый ответ. Благодарю. – Jay2645

2

Плохая новость заключается в том, что вы не сможете уйти от необходимости использовать свой веб-браузер для авторизации своего приложения для доступа к своему Диску.

Хорошей новостью является то, что вам нужно сделать это только один раз. Когда ваше приложение запрашивает аутсорсинг, оно должно указывать «offline», что приведет к тому, что вам будет дан токен обновления. Вы должны сохранить это где-нибудь в своей базе данных пользователей. Всякий раз, когда вам нужно получить доступ к Диску пользователя, вы можете использовать сохраненный токен обновления, чтобы запросить токен доступа, и вам хорошо идти.

Смежные вопросы