Я создаю приложение для Android, которое будет использовать Google AutoML Vision API. Я ищу способ получить токен постоянного доступа или сгенерировать их в коде, чтобы мне не нужно было использовать gcloud каждый раз, когда я хочу использовать свое приложение. Как бы я поступил так?
Я создал модель AutoML, настроил свою учетную запись службы и закодировал свое приложение в Android Studio, чтобы оно отправляло запрос к API с помощью Volley. Проблема в том, что они требуют, чтобы вы генерировали и передавали токен доступа с помощью gcloud. Я могу сгенерировать токен и вставить его в свой код, но он длится всего час, а затем истекает. REST API требует токен доступа, как показано ниже.
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-
token)"
Я рассмотрел эту проблему по-разному. Например, некоторые клиентские библиотеки Google для Java и облачные приложения Google показывают, как добавить учетные данные учетной записи службы в код. Я не совсем понимаю, как добавить файл ключа Json в код при запуске с телефона. Я также читал, что можно использовать Firebase, но я не знаю, каков будет процесс для этого.
В настоящее время я открою gcloud на своем компьютере, сгенерирую токен доступа, вставлю его в мой код и запустите приложение следующим образом с заголовком, и это вернет желаемые результаты в течение часа до истечения срока действия кода доступа.
@Override
public Map<String, String> getHeaders() throws AuthFailureError{
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer " + accesstoken);
return headers;
}
Мне бы хотелось, чтобы это было автономное приложение, которое может работать на телефоне Android. Каков наилучший способ сделать это?
UPDATE:
Мне удалось добавить файл в Android Studio, а затем использовать некоторые функции для получения токена доступа, и он, похоже, работает в эмуляторе. Я не уверен, насколько безопасен этот метод, потому что файл json с ключом должен быть закрытым.
InputStream is = getAssets().open("app.json");
GoogleCredentials credentials =
GoogleCredentials.fromStream(i).createScoped(Lists.newArrayList(scope));
credentials.refreshIfExpired();
AccessToken accesstoken = credentials.getAccessToken();