В моем приложении поток выглядит так:
- Если
access_token
не определено, перенаправьте пользователя на страницу Google, где он предоставляет доступ к вашему приложению, получая доступ к своим данным Google. Это возвращает код авторизации вашему приложению.
- Используйте код авторизации, чтобы получить
access_token
и refresh_token
. Вам также следует сохранить возвращенное значение expires_in
, которое сообщает вам, когда истекает срок действия access_token
и больше не может использоваться.
- Всякий раз, когда вам нужно получить доступ к API, вы можете проверить свою БД, если срок действия
access_token
истек - если это так, используйте refresh_token
, чтобы получить новый access_token
до доступа к API.
Я не сталкивался с какими-либо проблемами, делая это таким образом - что касается пользователя, ему нужно предоставить доступ только один раз, а затем приложение позаботится об аутентификации.
Это должно решить вашу проблему, потому что приложение программно продолжает повторную аутентификацию, основываясь на том, что пользователь изначально предоставляет доступ к вашему приложению, и вам не нужно ничего делать вручную. На самом деле, я не уверен, что есть какой-то другой способ сделать это, потому что для повторного выполнения процесса OAuth пользователь должен сидеть перед устройством, чтобы вручную предоставить доступ. В этом смысл сохранения access_token
и refresh_token
в вашей базе данных.