Как служба идентифицирует пользователя?

Вариант использования:

Пользователь делает красивую фотографию и хочет сохранить ее в своем аккаунте Evernote.

введите здесь описание изображения

  1. Пользователь авторизуется с помощью OAuth 2.0. Служба хранит их учетные данные.
  2. Сразу после завершения танца OAuth 2.0 служба вставляет контакт под названием «Сохранить в Evernote».
  3. Затем служба подписывается на обновления на временной шкале этого пользователя, вставляя подписку на коллекцию временной шкалы.
  4. Пользователь активирует контакт. Сохранение в Evernote теперь полностью настроено.
  5. Со временем пользователь делает фотографии.
  6. Пользователь делится фотографией с помощью функции «Сохранить в Evernote». Это делает карточку временной шкалы, связанную с этой фотографией, доступной для сервиса.
  7. Поскольку служба подписана на обновления временной шкалы, в вашу службу отправляется уведомление. Это уведомление ссылается на элемент временной шкалы, содержащий общую фотографию.
  8. Служба проверяет уведомление и использует включенный идентификатор для получения карточки временной шкалы, содержащей фотографию.
  9. Затем служба проверяет элемент временной шкалы и использует идентификатор вложения для получения байтов фотографии.
  10. Сервис загружает фото в Evernote пользователя.
  11. Наконец, служба создает новую карточку временной шкалы и вставляет ее в карточку временной шкалы пользователя с сообщением об успешном выполнении.

Из документации API зеркала следует, что как только пользователь делится элементом временной шкалы, служба получает POST примерно так:

{
  "collection": "timeline",
  "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "operation": "UPDATE",
  "userToken": "harold_penguin",
  "verifyToken": "random_hash_to_verify_referer",
  "userActions": [
    {
      "type": "SHARE"
    }
  ]
}

Является ли userToken значением, которое я получаю при первой аутентификации приложения? Если да, могу ли я использовать это значение для соединения POST, полученного от Glass, с пользователем, сохраненным в моей базе данных? Если нет, то как мне подключить общий ресурс к контакту моей службы с пользователем Glass, чтобы моя служба могла выполнять услуги, специфичные для этого пользователя, от его имени?


person DrewBaumann    schedule 19.04.2013    source источник


Ответы (1)


userToken действительно является полем, которое вы используете для соотнесения уведомления с пользователем, который его инициировал.

Вы устанавливаете userToken при создании подписки для этого пользователя. Любое значение, которое вы указываете при вставке подписки, предоставляется как userToken для всех уведомлений, которые она дает. Это означает, что при создании подписок вы всегда хотите использовать уникальные идентификаторы, которые ваша система может сопоставить с нужным пользователем.

Например:

  1. Джейн проходит аутентификацию с помощью вашего сервиса. Джейн имеет уникальный идентификатор пользователя 42 в вашей базе данных Glassware.
  2. Во время аутентификации вы подписываетесь на ее timeline коллекцию, вставляя эту подписку:

    {
      "collection": "timeline"
      "userToken": "42",
      "callbackUrl": "https://example.com/notify/callback"
    }
    
  3. Джейн делится фотографией с вашей стеклянной посудой.
  4. В вашу службу отправлено уведомление. Это выглядит примерно так:

    {
      "collection": "timeline",
      "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
      "operation": "UPDATE",
      "userToken": "42",
      "userActions": [
        {
          "type": "SHARE"
        }
      ]
    }
    
  5. Ваша стеклянная посуда использует свойство userToken для поиска правильного пользователя: Джейн.

Остальная часть истории продолжается, как вы описываете в своем вопросе.

person mimming    schedule 19.04.2013
comment
Ага! Это очень полезно. Спасибо тебе за пояснение. Я не могу дождаться, чтобы создать больше приложений. У меня есть несколько прототипов, которые я жду, чтобы перейти на следующий уровень. - person DrewBaumann; 20.04.2013
comment
Если пользователь поделится с кому-либо, не получит ли мой Glassware уведомление, поскольку это просто привязка к обновлениям временной шкалы? Если да, то должен ли мой Glassware отправить каждому запрос на получение, чтобы проверить массив получателей элемента временной шкалы, чтобы узнать, включает ли он мой контакт Glassware? - person DrewBaumann; 20.04.2013
comment
@DrewBaumann из чтения developers.google.com/glass/subscriptions похоже, что вы получаете уведомления только элементы временной шкалы вашего приложения или изменения местоположения - person Monica Wilkinson; 21.04.2013
comment
Хорошо, я написал свой код таким образом, что это должно быть спорным вопросом. В любом случае, было бы неплохо получить официальное слово. Я думаю, что @monica права. - person DrewBaumann; 22.04.2013
comment
@DrewBaumann: Моника права. Вы получаете уведомления только об обновлениях временной шкалы для карт, к которым у вас есть доступ. В основном это карты, которые вы вставили, а также карты, которые были созданы путем обмена с вашим контактом. - person mimming; 22.04.2013