Sonos SMAPI: ошибки AuthTokenExpired игнорируются в ответах getLastUpdate и getMediaUri - PullRequest
0 голосов
/ 31 марта 2020

Мы интегрируем Sonos API. Мы решили не использовать токен refre sh, и поэтому наши токены будут действовать в течение 1 года, пока пользователю не потребуется повторная авторизация.

Во время моих тестов я успешно получаю всплывающее окно повторной авторизации, когда ошибка AuthTokenExpired возвращается, пока просматриваю (в ответ на getMetadata).

Но каждый раз, когда ошибка возвращается из вызова getMediaMetadata, я получаю сообщение об ошибке по умолчанию «Невозможно воспроизвести радиостанцию». Вместо этого я ожидаю увидеть всплывающее окно повторной авторизации.

Цитирование из Документации Sonos о токенах аутентификации :

Если вы не внедрили токены refre sh, когда срок действия токена истечет, верните ошибку Client.AuthTokenExpired, чтобы указать, что пользователь должен вручную войти в систему и снова пройти аутентификацию. Сообщение журнала - это строка, помещенная в сообщения журнала для этого кода ошибки.

Вот проблемный диалог c между нашим сервером SMAPI и приложением / динамиком Sonos:

31/03/2020 14:24:27 641 SonosApi    Request http://www.sonos.com/Services/1.1#getMediaMetadata  "<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
  <credentials xmlns="http://www.sonos.com/Services/1.1">
    <deviceId>78-28-CA-9F-86-8E:8</deviceId>
    <deviceProvider>Sonos</deviceProvider>
    <loginToken>
      <token>1fa35465a-6bbc-4cf4-b46f-0e12be5b3216</token>
      <householdId>Sonos_W6VyCDwgI8ZadAWceKQ1avPrtd</householdId>
    </loginToken>
  </credentials>
  <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://dev8.local.st-corp.fr:8001/SonosService.svc</To>
  <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.sonos.com/Services/1.1#getMediaMetadata</Action>
</s:Header>
<s:Body>
  <getMediaMetadata xmlns="http://www.sonos.com/Services/1.1">
    <id>14740</id>
  </getMediaMetadata>
</s:Body>
</s:Envelope>"


31/03/2020 14:24:27 875 SonosApi    Reply   "<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
  <s:Fault>
    <faultcode>s:Client.AuthTokenExpired</faultcode>
    <faultstring xml:lang="fr-FR">The token is expired</faultstring>
  </s:Fault>
</s:Body>
</s:Envelope>"

Редактировать:

Ссылаясь на обновленную документацию и ваш ответ, я должен возвращать только ошибку AuthTokenExpired в вызовах getMetadata и getMediaUri.

Но что я должен ответить на вызов, зная getMediaMetadata что маркер доступа устарел?

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

  1. getMediaMetadata (каков будет ответ, зная, что токен уже истек?)
  2. getMediaUri (здесь следует обрабатывать AutTokenExpired)

Исправьте меня, если я ошибаюсь, но чтобы Создайте вызов getMediaUri, клиент Sonos использует идентификатор, полученный из последнего вызова getMediaMetadata, который я не могу предоставить, потому что токен п уже истек. Не лучше ли сначала обработать AuthTokenExpired в getMediaMetadata?

С уважением

1 Ответ

0 голосов
/ 04 апреля 2020

Вызовы (getMetadata) и getMediaURI будут учитывать ошибку AuthTokenExpired. Процедура повторной авторизации для этих вызовов работает, как описано в разделе Истекающие маркеры аутентификации с истекшим сроком действия в документации Использование маркеров аутентификации . Я обновлю документацию, чтобы отразить это.

Если это не работает, отправьте диагностику c для ее отладки. См. support.sonos.com / s / article / 141 для получения инструкций. Скопируйте свой диагностический номер c и отправьте его по электронной почте на номер developer-feedback@sonos.com вместе с временным окном, идентификатором домохозяйства Sonos и своим именем пользователя StackOverflow.

Вы упомянули это при отправке ошибки в ответ на getMediaURI, вы получаете сообщение об ошибке, но ваш пример показывает вызов getMediaMetadata.

Sonos не запускает мастер повторной авторизации, когда ваш сервер возвращает ошибку AuthTokenExpired для getLastUpdate. Когда громкоговоритель Sonos выполняет вызов getMediaMetadata и он не работает, воспроизведение не начинается. Пользователь также увидит, что воспроизведение не удалось.

...