У меня есть старый проект, в котором серверная часть полностью обрабатывается 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 :
Жетон недолговечный. Если бы у меня был сервер, серверный код автоматически получал бы новый токен всякий раз, когда токен истекал. Поскольку у меня нет сервера, нужно ли каждый раз вручную генерировать токен? Для какого лога токен будет действителен? Как правильно сделать это в моем случае?
Заранее спасибо!