Отсутствие полей в учетной записи службы Google. Ошибка JSON при использовании администратора Firebase SDK. - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь реализовать базу данных firebase в реальном времени, используя Kraet admin SDK для PHP 7.0.Я установил composer и все зависимости, необходимые для реализации, но я сталкиваюсь с одной ошибкой типа

**Fatal error: Uncaught Kreait\Firebase\Exception\InvalidArgumentException:
/var/www/html/cabgotel/google-service-account.json could not be parsed to a Service Account:
The following fields are missing/empty in the Service Account specification:
project_id, client_id, client_email, private_key in /var/www/html/cabgotel/vendor/kreait/firebase-php/src/Firebase/ServiceAccount.php:164 Stack trace:
#0 /var/www/html/cabgotel/firebase.php(42): Kreait\Firebase\ServiceAccount::fromJsonFile('/var/www/html/c...')
#1 {main} thrown in /var/www/html/cabgotel/vendor/kreait/firebase-php/src/Firebase/ServiceAccount.php on line 164**

Я скачал файл json учетной записи службы и добавил его в тот же каталог.И я даже проверил значения внутри файла, чтобы узнать, относится ли это к тому же проекту Firebase.

Ниже приведен код, который я использую для этого:

<!DOCTYPE html>
<html>
<head>
    <title></title>

<script src="https://www.gstatic.com/firebasejs/5.8.6/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.8.6/firebase.js"></script>


<script>

  var config = {
    apiKey: "AIzaSyCfGmNSdx5uabtQMGgEjtcz_BL8y_Tm4II",
    authDomain: "auth_domain",
    databaseURL: "my_db_url",
    projectId: "my_project_id",
    storageBucket: "my_project_id_storage_bucket",
    messagingSenderId: "sender_id"
  };
  firebase.initializeApp(config);
</script>

</head>
<body>

</body>
</html>

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

require __DIR__.'/vendor/autoload.php';

use Kreait\Firebase;
use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;

// This assumes that you have placed the Firebase credentials in the same directory
// as this PHP file.
$serviceAccount = ServiceAccount::fromJsonFile(__DIR__.'/google-service-account.json');

$firebase = (new Factory)
    ->withServiceAccount($serviceAccount)
    ->withDatabaseUri('https://my_project.firebaseio.com')
    ->create();

$database = $firebase->getDatabase();

$newPost = $database
    ->getReference('https://my_project.firebaseio.com')
    ->push([
        'lan' => '10.77',
        'lat' => '88.99'
    ]);

$newPost->getKey(); // => -KVr5eu8gcTv7_AHb-3-
$newPost->getUri(); // => https://my-project.firebaseio.com/blog/posts/-KVr5eu8gcTv7_AHb-3-

$newPost->getChild('lan')->set('11.211');
$newPost->getValue(); // Fetches the data from the realtime database
$newPost->remove();

Пожалуйста, помогите.

1 Ответ

2 голосов
/ 09 марта 2019

Есть два файла, и они совершенно разные:

  1. google-services.json предназначен для использования в приложениях Android, которые вы отправляете своим пользователям, и содержит только данные конфигурации, которые используются клиентскими SDK Firebase для поиска проекта на серверах Google.

  2. Сервисная учетная запись JSON, которая содержит пару открытого и закрытого ключей, которая предоставляет коду административный (неограниченный) доступ к вашему проекту.

Сообщение об ошибке для меня читается как код может найти файл, но не может найти некоторые обязательные поля внутри файла. Возможно, вы скачали учетную запись службы JSON с вкладки «Учетные записи службы» в консоли Firebase, как показано в документации по добавлению Firebase в ваше приложение .

...