Как получить токен доступа Oauth для FCM v1? Нет сервера - PullRequest
0 голосов
/ 06 октября 2019

У меня есть старый проект, в котором серверная часть полностью обрабатывается Firebase (у меня нет выделенного сервера). Раньше я использовал почтальон для отправки тематических сообщений через FCM на конечную точку fcm.googleapis.com/fcm/send с заголовком Authorization : key=<myKey>

. Теперь она выдает ошибку 403, когда я проверяю документацию firebase ,Я узнал, что приложения, использующие устаревший HTTP-API FCM, должны рассмотреть возможность перехода на HTTP v1 API

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

 Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

Iзастрял в том, как создать этот ключ авторизации для моего проекта, чтобы я мог использовать его для запуска сообщений с помощью почтальона или запроса curl

Я выполнил следующий фрагмент кода в своем проекте Android

       private  void getAccessToken()  {
                String[] SCOPES = {"https://www.googleapis.com/auth/firebase.messaging"};
                GoogleCredential googleCredential = null;
                googleCredential = GoogleCredential
                        .fromStream(streamFromAsset("service-account.json"))
                        .createScoped(Arrays.asList(SCOPES));
                googleCredential.refreshToken();
                 return googleCredential.getAccessToken();
         }

и этот код дал мне токен доступа, подобный ya29.ElqKBGN2Ri_Uz...HnS_uNreA

Теперь я мог отправлять сообщения от почтальона, используя этот токен.

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

Используйте свои учетные данные Firebase вместе с клиентской библиотекой API Google для вашего предпочитаемого языка для получения краткосрочного токена доступа OAuth 2.0 :

Жетон недолговечный. Если бы у меня был сервер, серверный код автоматически получал бы новый токен всякий раз, когда токен истекал. Поскольку у меня нет сервера, нужно ли каждый раз вручную генерировать токен? Для какого лога токен будет действителен? Как правильно сделать это в моем случае?

Заранее спасибо!

1 Ответ

1 голос
/ 06 октября 2019

... мне нужно каждый раз вручную генерировать токен?

Да, так как срок действия токена истекает.

Для того, как лог токен будет действительным?

Из моего опыта, время (по умолчанию) может варьироваться от 30 минут до 1 часа. Тем не менее, я бы посоветовал не устанавливать точный таймер. См. Также OAuth2 и Google API: срок действия токена доступа?

Как правильно сделать это в моем случае?

Хорошо. Правильный способ - настроить сервер, выделенный для этой задачи. Однако, если вы делаете это вручную , то то, что вы сделали в своем посте, - это самый простой способ (я думаю), что это сработает.

...