Как реализовать мобильное приложение для синхронизации практически в реальном времени с поддержкой авторизации с помощью API push-уведомлений Google / Microsoft? - PullRequest
0 голосов
/ 07 октября 2019

Google и Microsoft предоставляют остальные API для взаимодействия со своими службами, такими как Outlook и Google Calendar. Они оба предоставляют возможность «наблюдать» за ресурсами от имени пользователя службы и затем инициировать push-уведомление при изменении ресурса, которое затем может быть обработано через веб-крючок (который может быть функцией Google Cloud или функцией Azure). .

Например, предположим, что я создаю мобильное приложение, которое синхронизируется с Календарем Google. В соответствии с документацией , предоставленной Google, можно отправить запрос "наблюдения" (https://developers.google.com/calendar/v3/push#watch-response), который возвращает следующие данные:

{
  "kind": "api#channel",
  "id": "01234567-89ab-cdef-0123456789ab"", // ID you specified for this channel.
  "resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
  "resourceUri": "https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events", // Version-specific ID of the watched resource.
  "token": "target=myApp-myCalendarChannelDest", // Present only if one was provided.
  "expiration": 1426325213000, // Actual expiration time as Unix timestamp (in ms), if applicable.
}

Теперь этот ответ отсервер означает, что приложение успешно подписалось на этот ресурс, и Google отправит push-уведомление на веб-крючок (домен которого был отправлен в запросе на просмотр). При срабатывании уведомлений на веб-крючок будет отправлено следующее:

POST https://example.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: 4ba78bf0-6a47-11e2-bcfd-0800200c9a66
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT
X-Goog-Resource-ID:  ret08u3rv24htgh289g
X-Goog-Resource-URI: https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events
X-Goog-Resource-State:  exists
X-Goog-Message-Number: 10

Теперь все это имеет смысл, но есть несколько вещей, которые мне не понятны:

  1. Как мой веб-крючок может понять, чтозапрос поступил от Google?

  2. Как webhook узнает, что запрос «связан» с конкретным авторизованным пользователем? И как сервер webhook может получить информацию в почтовом запросе? и отправить его на конкретное мобильное устройство, которое отправило запрос на просмотр?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...