Я ищу способ программно вызвать функциональность импорт/экспорт пожарных из java-кода.
Что я обнаружил до сих пор, так это то, что хороший клиентская библиотека firestore еще не поддерживает вызовы импорта/экспорта. Но более низкий уровень отдых / grpc API их уже поддерживает. Используя Java-библиотека, я попробовал следующее:
Firestore firestoreApi = new Firestore
.Builder(UrlFetchTransport.getDefaultInstance(), new GsonFactory(), null)
.setApplicationName(SystemProperty.applicationId.get())
.build();
GoogleFirestoreAdminV1beta2ImportDocumentsRequest importRequest = new GoogleFirestoreAdminV1beta2ImportDocumentsRequest();
importRequest.setInputUriPrefix(String.format("gs://{}/{}/", BUCKET, image));
GoogleLongrunningOperation operation = firestoreApi
.projects()
.databases()
.importDocuments("projects/" + SystemProperty.applicationId.get() + "/databases/(default)", importRequest)
.execute();
Что, к сожалению, заканчивается отсутствием разрешений при запуске в движке приложения:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 401
{
"code": 401,
"errors": [
{
"domain": "global",
"location": "Authorization",
"locationType": "header",
"message": "Login Required.",
"reason": "required"
}
],
"message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED"
Я не могу заставить официальный путь войти в систему, потому что у построителя firestore нет метода для приема экземпляра AppEngineCredentials.
Я уже проверил клиентскую библиотеку python, которая также не поддерживает эти методы (пока). Кто-нибудь знает, как я могу войти в систему со старым API-интерфейсом или получить клиентскую библиотеку, которая поддерживает эти методы (некоторый язык, который работает на движке приложения, пожалуйста :))
Спасибо за прочтение! Карстен
@JRLtechwriting Большое спасибо! Использование примера с хранилищем данных сработало! Я думаю, что для учетной записи механизма приложения требуются «Администратор импорта и экспорта облачного хранилища данных» и «Агент службы администратора Firebase Admin SDK». Но это второстепенные детали. Кстати: если вы добавите свой комментарий в качестве ответа, я приму его :)




Вы можете адаптировать этот Пример облачного хранилища данных для Cloud Firestore. Посмотрите, как они получают токен доступа здесь:
import com.google.appengine.api.appidentity.AppIdentityService;
import com.google.appengine.api.appidentity.AppIdentityServiceFactory;
// Get an access token to authorize export request
ArrayList<String> scopes = new ArrayList<String>();
scopes.add("https://www.googleapis.com/auth/datastore");
final AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService();
final AppIdentityService.GetAccessTokenResult accessToken =
AppIdentityServiceFactory.getAppIdentityService().getAccessToken(scopes);
connection.addRequestProperty("Authorization", "Bearer " + accessToken.getAccessToken());
Вот пример в Node: firebase.google.com/docs/firestore/solutions/schedule-export. Для Java можно адаптировать этот Пример облачного хранилища данных.