Как подключить приложение xamarin для Android к базе данных Cloud Firestore db - PullRequest
1 голос
/ 08 марта 2019

Я пробовал много способов, как на нескольких сайтах, но безуспешно, я пытался подключить его с помощью Google.Cloud.Firestore и Google.Apis.Storage.v1 пакетов Nuget. Код приведен ниже.

Google.Cloud.Firestore.FirestoreDb db = Google.Cloud.Firestore.FirestoreDb.Create("test");
        CollectionReference collection = db.Collection("users");
        DocumentReference document = await collection.AddAsync(new { email = "xamemail@12", name = "xamemail" });

Когда я попробовал этот код, произошло одно исключение, например, переменная окружения GOOGLE_APPLICATION_CREDENTIALS не установлена, затем я установил GOOGLE_APPLICATION_CREDENTIALS в моей системе Windows, а также в коде, как показано ниже.

System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", @"C:\\path-to-json", EnvironmentVariableTarget.Machine);

Показывает еще одну ошибку: файл не найден в пути, но он там, и я установил разрешение для пути.

Если кто-то там может помочь в этом, кто-нибудь, уже использующий xamarin - cloud firestore db в ваших проектах?

Обратите внимание, что это не база данных реального времени Firebase, я могу подключиться.

1 Ответ

0 голосов
/ 22 мая 2019

Насколько я понял, вы не можете использовать учетные данные по умолчанию (GOOGLE_APPLICATION_CREDENTIALS) в приложении на устройстве, поскольку оно не сможет найти путь к файлу, расположенному на вашем ПК. Я нашел этот код, который, как мне кажется, должен работать (но до сих пор мне не удалось с ним справиться - я получил исключение, поэтому я надеюсь, что мой ответ может помочь вдохновить кого-то другого найти решение для этого)

using Google.Cloud.Firestore;
using Google.Cloud.Firestore.V1;
using Google.Apis.Auth.OAuth2;
using Grpc.Auth;
using Grpc.Core;

...    

//First Pack your Jason fil into a Jason string. 
//Fore security reasons I'm not sure this is a good idea, but it is what I could think of
string jsonCred = @”{ Your Json cred file  (Replace “ with ‘) }”;

// Get you credential. As far as I have understood it must be scoped.
var credential = GoogleCredential.FromJson(jsonCred).CreateScoped(FirestoreClient.DefaultScopes);

// Create a channel and add the channel to the Firestore client
Channel channel = new Channel(FirestoreClient.DefaultEndpoint.Host, FirestoreClient.DefaultEndpoint.Port, credential.ToChannelCredentials());
FirestoreClient client = FirestoreClient.Create(channel);

// Then I think it should be possible to call.
FirestoreDb db = FirestoreDb.Create(projectId, client);

Но пока я в очереди:

FirestoreClient client = FirestoreClient.Create(channel):

Я получаю это исключение:

System.TypeLoadException: установка VTable типа Google.Cloud.Firestore.V1.FirestoreClientImpl завершилась неудачно в Google.Cloud.Firestore.V1.FirestoreClient.Create (канал Grpc.Core.Channel, Google.Cloud.Firestore.V1.FirestoreSettings настройки) [0x0000c] в T: \ src \ github \ google-cloud-dotnet \ releasebuild \ apis \ Google.Cloud.Firestore.V1 \ Google.Cloud.Firestore.V1 \ FirestoreClient.cs: 622 в Padlelogg.DataHandler.SaveToFireStore [T] (коллекция System.String, System.Collections.Generic.List`1 [T] Datalist) [0x00072] в C: \ Users \ rad \ Documents \ Xamarin projects \ Padlelogg 2.10 \ Padlelogg \ Data \ DataHandler.cs: 360}

Это исключение мне пока не удалось разрешить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...