#php #google-cloud-firestore
# #php #google-облако-firestore
Вопрос:
Я новичок в Firebase / Firestore. Я создал 2 проекта, которые обращаются к одним и тем же данным в Firestore. Один находится в Android, а другой — в веб-приложении на php. Я могу получить доступ к данным в приложении для Android, но в приложении PHP мне пришлось создать ключ API на странице учетных данных. Сначала я хочу использовать Firestore на пробной основе, но не могу получить доступ к документам. Выдает ошибку
Неустранимая ошибка: неперехваченное исключение RuntimeException: средство выборки учетных данных не реализует интерфейс Google AuthUpdateMetadataInterface в C:xampphtdocsFirestoreProjectvendorgoogleauthsrcFetchAuthTokenCache.php:190 Трассировка стека: #0 C:xampphtdocsFirestoreProjectvendorgooglegaxsrcCredentialsWrapper.php (197): GoogleAuthFetchAuthTokenCache->updateMetadata(массив, ‘https://firesto …’) #1 [внутренняя функция]: Google ApiCore CredentialsWrapper-> Google ApiCore{закрытие}(Объект(стандартный класс)) #2 C:xampphtdocsFirestoreProjectvendorgrpcgrpcsrclibServerStreamingCall.php (44): GrpcCall-> startBatch(массив) #3 C:xampphtdocsFirestoreProjectvendorgrpcgrpcsrclibBaseStub.php (364): Grpc ServerStreamingCall->пуск(объект(Google Cloud Firestore V1 BatchGetDocumentsRequest), Массив, Массив) #4 C:xampphtdocsFirestoreProjectvendorgrpcgrpcsrclibBaseStub.php(589): GrpcBaseStub->Grpc{закрытие}(‘/google.firesto …’, объект (Google Cloud Firestore V1 BatchGetDocumentsRequest), Массив, Массив, массив) #5 C:xampphtdocsFirestoreProjectve в C:xampphtdocsFirestoreProjectvendorgoogleauthsrcFetchAuthTokenCache.php в строке 190
Я установил composer и обновил зависимости и gRPC.
Мой index.php чтение файла
<?php
session_start();
require_once 'vendor/autoload.php';
require_once "Firestore.php";
$apiKey = 'WWWWWWWWWWWWWWWWWWWWWW';
$url ='https://console.firebase.google.com/project/prject-ID/firestore?
key=Aasdads';
$fs = new Firestore('Users');
print_r($fs->getDocument('9427349073'));
return;
?>
Мой Firestore.php чтение файла
<?php
use GoogleCloudCoreExceptionGoogleException;
use GoogleCloudFirestoreFirestoreClient;
class Firestore
{
protected $db;
protected $name; // $name is name of collection
public function __construct(string $collection) // $collection =
// 'Users'
{
if (isset($this)) {
try {
$this->db = new FirestoreClient([
'projectId' => 'XXXXXXXXXXXXXXXXXXX'
]);
$this->name = $collection;
} catch (GoogleException $e) {
print_r($e->getMessage());
}
}else{
}
}
public function getDocument(string $name) // $name is name of document
{
return $this->db->collection($this->name)->document($name)-
>snapshot()->data();
}
}
?>
Я попытался активировать страницу учетных данных, но они запрашивают кредитную карту для выставления счетов, чтобы начать пробную версию, которой у меня нет. Не можем ли мы протестировать базу данных без активации учетных данных? В чем разница между тестированием и использованием на пробной основе?
Пожалуйста, помогите
с уважением
Санджиш
Я сделал test.php файл после создания учетной записи службы и указания на ключ.файл json в командной строке с использованием набора GOOGLE_APPLICATION_CREDENTIALS
<?php
require_once 'vendor/autoload.php';
session_start();
use GoogleCloudFirestoreFirestoreClient;
initialize();
function initialize()
{
// Create the Cloud Firestore client
$db = new FirestoreClient([
'projectId' => 'Valbhai-xxx'
]);
$usersRef = $db->collection('Users'); // This works
$snapshot = $usersRef->documents(); // This does not work , gives
// the same error
foreach ($snapshot as $user) {
printf('User: %s' . PHP_EOL, $user->client_name());
}
}
?>
Комментарии:
1. Привет, вы определили свои учетные данные, как указано в быстром запуске PHP firestore, PHP — это серверное программное обеспечение, и для использования Firestore необходимо использовать учетные данные учетной записи службы
2. Я последовал твоему совету , Ян , и создал учетную запись сервиса . Это сработало. Большое спасибо
3. Частично это сработало . $usersRef = $db-> коллекция (‘Пользователи’); -> Это работает, но $doc = $usersRef-> documents(); выдает ту же ошибку
4. Можете ли вы обновить код в своем вопросе, чтобы понять, что работает, а что нет?
Ответ №1:
Я воспроизвел вашу проблему на своем компьютере и заметил, что это связано с тем, что PHP игнорирует переменную среды GOOGLE_APPLICATION_CREDENTIALS
, поскольку она не определена для пользовательского Apache (или httpd). чтобы исправить это, я изменил инициализацию, используя этот блок кода
$db = new FirestoreClient([
'keyFilePath' => '/path/to/credentials.json',
'projectId' => 'my-project-id'
]);
С keyFilePath
помощью (этот параметр задокументирован здесь ) библиотека Firestore будет искать учетные данные GCP, используя строку пути вместо переменной среды
Комментарии:
1. FirestoreClient() принимает только 1 параметр, а не 2
2. @SANJISHKUMAR вы уверены? у вас была возможность протестировать его?
keyFilePath
задокументировано в исходном коде