Przejście z wersji wstępnej pakietu SDK Vertex AI w Firebase na pakiety SDK Firebase Logic AI


Firebase AI Logic i jego pakiety SDK klienta były wcześniej nazywane „Vertex AI in Firebase”. Aby lepiej odzwierciedlać nasze rozszerzone usługi i funkcje (np. obsługujemy teraz Gemini Developer API!), zmieniliśmy nazwę naszych usług i przekształciliśmy je w Firebase AI Logic.

Aby bezpiecznie uzyskiwać dostęp do modeli generatywnej AI od Google bezpośrednio z aplikacji mobilnych lub internetowych, możesz teraz wybrać dostawcę „Gemini API” – dostępny od dawna Vertex AI Gemini API lub Gemini Developer API. Oznacza to, że możesz teraz korzystać z Gemini Developer API, która oferuje bezpłatny poziom z rozsądnymi limitami szybkości i limitami wykorzystania.

Omówienie kroków migracji do pakietów SDK Firebase AI Logic

  • Krok 1. Wybierz najlepszego dostawcę „Gemini API” dla swojej aplikacji i przypadków użycia.

  • Krok 2. Włącz wymagane interfejsy API.

  • Krok 3. Zaktualizuj bibliotekę używaną w aplikacji.

  • Krok 4. Zaktualizuj inicjowanie w aplikacji.

  • Krok 5. Zaktualizuj kod w zależności od używanych funkcji.

Krok 1. Wybierz najlepszego dostawcę „Gemini API” dla swojej aplikacji.

W przypadku tej migracji możesz wybrać dostawcę „Gemini API”:

  • Starsze pakiety SDK „Vertex AI in Firebase” mogły używać tylko Vertex AI Gemini API.

  • Nowe pakiety SDK Firebase AI Logic umożliwiają wybór dostawcyGemini API, którego chcesz wywołać bezpośrednio z aplikacji mobilnej lub internetowej – Gemini Developer API lub Vertex AI Gemini API.

Sprawdź różnice między korzystaniem z tych Gemini API dostawców, zwłaszcza pod względem obsługiwanych funkcji, cen i limitów szybkości. Na przykład Gemini Developer API nie obsługuje udostępniania plików za pomocą adresów URL Cloud Storage, ale może być dobrym wyborem, jeśli chcesz skorzystać z bezpłatnego poziomu i rozsądnego limitu.

Krok 2. Włącz wymagane interfejsy API

Aby korzystać z wybranego dostawcy „Gemini API”, sprawdź, czy w projekcie Firebase są włączone wszystkie wymagane interfejsy API.

Pamiętaj, że w projekcie możesz mieć włączonych jednocześnie obu dostawców interfejsów API.

  1. Zaloguj się w Firebasekonsoli, a potem wybierz projekt Firebase.

  2. W konsoli Firebase otwórz stronę Firebase AI Logic.

  3. Kliknij Rozpocznij, aby uruchomić procedurę, która pomoże Ci skonfigurować wymagane interfejsy API i zasoby w projekcie.

  4. Wybierz dostawcę „Gemini API”, którego chcesz używać z pakietami SDK Firebase AI Logic. W każdej chwili możesz skonfigurować i używać innego dostawcy interfejsu API.

    • Gemini Developer API – płatności opcjonalne (dostępne w bezpłatnym planie cenowym Spark)
      Proces w konsoli włączy wymagane interfejsy API i utworzy w projekcie Geminiklucz interfejsu API.
      Nie dodawaj tego klucza interfejsu API Gemini do kodu aplikacji. Więcej informacji

    • Vertex AI Gemini API – wymagane płatności (wymaga planu cenowego Blaze z płatnościami według wykorzystania)
      Proces w konsoli włączy w Twoim projekcie wymagane interfejsy API.

  5. Aby zaktualizować bibliotekę i inicjowanie w aplikacji, postępuj zgodnie z instrukcjami w tym przewodniku migracji.

Krok 3. Zaktualizuj bibliotekę używaną w aplikacji.

Zaktualizuj kod aplikacji, aby korzystać z biblioteki Firebase AI Logic.

Swift

  1. Po otwarciu projektu aplikacji w Xcode zaktualizuj pakiet Firebase do wersji 11.13.0 lub nowszej, korzystając z jednej z tych opcji:

    • Opcja 1: zaktualizuj wszystkie pakiety: kliknij Plik > Pakiety > Zaktualizuj do najnowszych wersji pakietów.

    • Opcja 2. Zaktualizuj Firebase osobno: w sekcji Zależności pakietu znajdź pakiet Firebase. Kliknij prawym przyciskiem myszy pakiet Firebase, a następnie wybierz Update Package (Zaktualizuj pakiet).

  2. Sprawdź, czy pakiet Firebase ma teraz wersję 11.13.0 lub nowszą. Jeśli nie, sprawdź, czy określone wymagania dotyczące pakietu umożliwiają aktualizację do wersji 11.13.0 lub nowszej.

  3. Wybierz cel aplikacji w edytorze projektu, a potem otwórz sekcję Frameworks, Libraries, and Embedded Content (Frameworki, biblioteki i treści osadzone).

  4. Dodaj nową bibliotekę: kliknij przycisk +, a następnie dodaj FirebaseAI z pakietu Firebase.

  5. Po zakończeniu migracji aplikacji (patrz pozostałe sekcje tego przewodnika) usuń starą bibliotekę:
    wybierz FirebaseVertexAI-Preview, a następnie naciśnij przycisk .

Kotlin

  1. pliku Gradle modułu (na poziomie aplikacji) (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle) zastąp stare zależności (w odpowiednich przypadkach) tymi poniżej.

    Pamiętaj, że przed usunięciem starej zależności łatwiej będzie przenieść bazę kodu aplikacji (patrz pozostałe sekcje tego przewodnika).

    // BEFORE
    dependencies {
      implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")
    }
    
    
    // AFTER
    dependencies {
      // Import the BoM for the Firebase platform
      implementation(platform("com.google.firebase:firebase-bom:33.16.0"))
    
      // Add the dependency for the Firebase AI Logic library
      // When using the BoM, you don't specify versions in Firebase library dependencies
      implementation("com.google.firebase:firebase-ai")
    }
  2. Zsynchronizuj projekt na Androida z plikami Gradle.

Pamiętaj, że jeśli nie chcesz używać Firebase Android BoM, po prostu dodaj zależność dla biblioteki firebase-ai i zaakceptuj najnowszą wersję sugerowaną przez Android Studio.

Java

  1. pliku Gradle modułu (na poziomie aplikacji) (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle) zastąp stare zależności (w odpowiednich przypadkach) tymi poniżej.

    Pamiętaj, że przed usunięciem starej zależności łatwiej będzie przenieść bazę kodu aplikacji (patrz pozostałe sekcje tego przewodnika).

    // BEFORE
    dependencies {
      implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")
    }
    
    
    // AFTER
    dependencies {
      // Import the BoM for the Firebase platform
      implementation(platform("com.google.firebase:firebase-bom:33.16.0"))
    
      // Add the dependency for the Firebase AI Logic library
      // When using the BoM, you don't specify versions in Firebase library dependencies
      implementation("com.google.firebase:firebase-ai")
    }
  2. Zsynchronizuj projekt na Androida z plikami Gradle.

Pamiętaj, że jeśli nie chcesz używać Firebase Android BoM, po prostu dodaj zależność dla biblioteki firebase-ai i zaakceptuj najnowszą wersję sugerowaną przez Android Studio.

Web

  1. Pobierz najnowszą wersję pakietu Firebase JS SDK na potrzeby internetu za pomocą npm:

    npm i firebase@latest

    LUB

    yarn add firebase@latest
  2. W miejscach, w których zaimportowano bibliotekę, zaktualizuj instrukcje importowania, aby używać zamiast niej firebase/ai.

    Pamiętaj, że przed usunięciem starych importów może być łatwiej przenieść bazę kodu aplikacji (patrz pozostałe sekcje tego przewodnika).

    // BEFORE
    import { initializeApp } from "firebase/app";
    import { getVertexAI, getGenerativeModel } from "firebase/vertexai-preview";
    
    
    // AFTER
    import { initializeApp } from "firebase/app";
    import { getAI, getGenerativeModel } from "firebase/ai";

Dart

  1. Zaktualizuj plik pubspec.yaml, aby używać pakietu firebase_ai, uruchamiając to polecenie w katalogu projektu Flutter:

    flutter pub add firebase_ai
  2. Ponownie skompiluj projekt Fluttera:

    flutter run
  3. Po zakończeniu migracji aplikacji (patrz pozostałe sekcje tego przewodnika) usuń stary pakiet:

    flutter pub remove firebase_vertexai

Unity

Pomoc dotycząca Unity nie była dostępna w przypadku „Vertex AI in Firebase”.

Dowiedz się, jak zacząć korzystać z pakietu Firebase AI Logic SDK dla Unity.

Krok 4. Zaktualizuj inicjację w aplikacji

Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod dostawcy.

Zaktualizuj sposób inicjowania usługi dla wybranego dostawcy interfejsu API i utwórz instancję GenerativeModel.

Swift


import FirebaseAI

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-2.5-flash")

Kotlin


// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
                        .generativeModel("gemini-2.5-flash")

Java


// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-2.5-flash");

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

Web


import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(ai, { model: "gemini-2.5-flash" });

Dart


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
      FirebaseAI.googleAI().generativeModel(model: 'gemini-2.5-flash');

Unity

Pomoc dotycząca Unity nie była dostępna w przypadku „Vertex AI in Firebase”.

Dowiedz się, jak zacząć korzystać z pakietu Firebase AI Logic SDK dla Unity.

Pamiętaj, że w zależności od używanej funkcji nie zawsze możesz utworzyć instancję GenerativeModel.

Krok 5. Zaktualizuj kod w zależności od używanych funkcji

W tym kroku opisujemy zmiany, które mogą być wymagane w zależności od używanych funkcji.

  • Jeśli używasz Cloud Storage adresów URL i w ramach tej migracji, musisz zaktualizować żądania multimodalne, aby uwzględniały pliki jako dane wbudowane (lub używać adresów URL YouTube w przypadku filmów).Gemini Developer API

  • W wersjach GA pakietów SDK „Vertex AI in Firebase” wprowadziliśmy kilka zmian. Te same zmiany są wymagane w przypadku korzystania z pakietów SDK.Firebase AI Logic Zapoznaj się z tymi listami, aby sprawdzić, czy musisz wprowadzić w kodzie jakieś zmiany, aby umożliwić korzystanie z Firebase AI Logic SDK.

Wymagany w przypadku wszystkich języków i platform

  • Wywoływanie funkcji
    Jeśli ta funkcja została wdrożona przed udostępnieniem ogólnym, musisz zaktualizować sposób definiowania schematu. Aby dowiedzieć się, jak pisać deklaracje funkcji, zapoznaj się z aktualnym przewodnikiem po wywoływaniu funkcji.

  • Generowanie danych strukturalnych (np. JSON) za pomocą funkcji responseSchema
    Jeśli ta funkcja została wdrożona przed udostępnieniem jej w wersji ogólnodostępnej, musisz zaktualizować sposób definiowania schematu. Aby dowiedzieć się, jak pisać schematy JSON, zapoznaj się z nowym przewodnikiem po danych strukturalnych.

  • Limit czasu

    • Zmieniono domyślny limit czasu oczekiwania na żądania na 180 sekund.

Wymagane w zależności od platformy lub języka

Swift

  • Wyliczenia

    • Zastąpiliśmy większość typów enum typami struct ze zmiennymi statycznymi. Ta zmiana zapewnia większą elastyczność w zakresie rozwoju interfejsu API w sposób zgodny wstecznie. Podczas używania instrukcji switch musisz teraz uwzględnić default:, aby obejmować nieznane lub nieobsługiwane wartości, w tym nowe wartości, które zostaną dodane do pakietu SDK w przyszłości.

    • Zmieniono nazwę wyliczenia BlockThreshold na HarmBlockThreshold. Ten typ jest teraz struct.

    • Usunięto przypadki unknownunspecified z tych wyliczeń (obecnie struct): HarmCategory, HarmBlockThreshold, HarmProbability, BlockReasonFinishReason.

    • Zastąpiliśmy wyliczenie ModelContent.Part protokołem o nazwie Part, aby umożliwić dodawanie nowych typów w sposób zgodny wstecznie. Ta zmiana jest szczegółowo opisana w sekcji Części treści.

  • Elementy treści

    • Usunięto protokół ThrowingPartsRepresentable i uproszczono inicjatory dla ModelContent, aby uniknąć sporadycznych błędów kompilatora. Obrazy, które nie są prawidłowo zakodowane, nadal będą powodować błędy podczas używania w generateContent.

    • Zastąpiliśmy przypadki ModelContent.Part tymi typami struct zgodnymi z protokołem Part:

      • .text do TextPart
      • .data do InlineDataPart
      • .fileData do FileDataPart
      • .functionCall do FunctionCallPart
      • .functionResponse do FunctionResponsePart
  • Kategoria szkodliwości

    • Zmieniono element HarmCategory, aby nie był już zagnieżdżony w typie SafetySetting. Jeśli używasz nazwy SafetySetting.HarmCategory, możesz ją zastąpić nazwą HarmCategory.
  • Opinie dotyczące bezpieczeństwa

    • Usunięto typ SafetyFeedback, ponieważ nie był używany w żadnej z odpowiedzi.
  • Metadane cytowania

    • Zmieniliśmy nazwę właściwości citationSources na citationsCitationMetadata.
  • Łączna liczba znaków podlegających rozliczeniu

    • Zmieniono właściwość totalBillableCharactersCountTokensResponse, aby była opcjonalna, co odzwierciedla sytuacje, w których nie są wysyłane żadne znaki.
  • Odpowiedź kandydata

    • Nazwa CandidateResponse została zmieniona na Candidate, aby była zgodna z innymi platformami.
  • Konfiguracja generowania

    • Zmieniono właściwości publiczne GenerationConfig na internal. Wszystkie te ustawienia można nadal konfigurować w inicjatorze.

Kotlin

  • Wyliczenia

    • Zastąpiono zajęcia enumsealed zwykłymi zajęciami. Ta zmiana zapewnia większą elastyczność w zakresie rozwoju interfejsu API w sposób zgodny wstecznie.

    • Zmieniono nazwę wyliczenia BlockThreshold na HarmBlockThreshold.

    • Usunięto wartości z tych wyliczeń: HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReasonFinishReason.

  • Metody obiektu blob

    • W nazwach wszystkich metod, które zawierały Blob, zamieniliśmy ten ciąg znaków na InlineData.
  • Ustawienia bezpieczeństwa

    • Pole method zostało zmienione na dopuszczające wartość null.
  • Klasa czasu trwania

    • Usunięto wszystkie użycia klasy Duration w Kotlinie i zastąpiono je klasą long. Ta zmiana zapewnia lepszą interoperacyjność z Javą.
  • Metadane cytowania

    • Wszystkie pola zadeklarowane wcześniej w CitationMetadata zostały umieszczone w nowej klasie o nazwie Citation. Cytaty znajdziesz na liście o nazwie citationsCitationMetadata. Ta zmiana pozwala lepiej dopasować typy na różnych platformach.
  • Licz tokeny

    • Pole totalBillableCharacters zostało zmienione na dopuszczające wartość null.
  • Łączna liczba znaków podlegających rozliczeniu

    • Zmieniono właściwość totalBillableCharactersCountTokensResponse, aby była opcjonalna, co odzwierciedla sytuacje, w których nie są wysyłane żadne znaki.
  • Tworzenie instancji modelu

    • Przeniesiono parametr requestOptions na koniec listy parametrów, aby był zgodny z innymi platformami.
  • Live API

    • Usunięto wartość UNSPECIFIED z klasy wyliczeniowej ResponseModality. Zamiast tego użyj null.

    • Zmieniono nazwę LiveGenerationConfig.setResponseModalities na LiveGenerationConfig.setResponseModality.

    • Usunęliśmy klasę LiveContentResponse.Status, a zamiast tego zagnieździliśmy pola stanu jako właściwości klasy LiveContentResponse.

    • Usunęliśmy klasę LiveContentResponse i zamiast niej udostępniliśmy podklasy LiveServerMessage, które pasują do odpowiedzi z modelu.

    • Zmieniono LiveModelFutures.connect, aby zwracać ListenableFuture<LiveSessionFutures> zamiast ListenableFuture<LiveSession>.

Java

  • Wyliczenia

    • Zastąpiono zajęcia enumsealed zwykłymi zajęciami. Ta zmiana zapewnia większą elastyczność w zakresie rozwoju interfejsu API w sposób zgodny wstecznie.

    • Zmieniono nazwę wyliczenia BlockThreshold na HarmBlockThreshold.

    • Usunięto wartości z tych wyliczeń: HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReasonFinishReason.

  • Metody obiektu blob

    • W nazwach wszystkich metod, które zawierały Blob, zamieniliśmy ten ciąg znaków na InlineData.
  • Ustawienia bezpieczeństwa

    • Pole method zostało zmienione na dopuszczające wartość null.
  • Klasa czasu trwania

    • Usunięto wszystkie użycia klasy Duration w Kotlinie i zastąpiono je klasą long. Ta zmiana zapewnia lepszą interoperacyjność z Javą.
  • Metadane cytowania

    • Wszystkie pola zadeklarowane wcześniej w CitationMetadata zostały umieszczone w nowej klasie o nazwie Citation. Cytaty znajdziesz na liście o nazwie citationsCitationMetadata. Ta zmiana pozwala lepiej dopasować typy na różnych platformach.
  • Licz tokeny

    • Pole totalBillableCharacters zostało zmienione na dopuszczające wartość null.
  • Łączna liczba znaków podlegających rozliczeniu

    • Zmieniono właściwość totalBillableCharactersCountTokensResponse, aby była opcjonalna, co odzwierciedla sytuacje, w których nie są wysyłane żadne znaki.
  • Tworzenie instancji modelu

    • Przeniesiono parametr requestOptions na koniec listy parametrów, aby był zgodny z innymi platformami.
  • Live API

    • Usunięto wartość UNSPECIFIED z klasy wyliczeniowej ResponseModality. Zamiast tego użyj null.

    • Zmieniono nazwę LiveGenerationConfig.setResponseModalities na LiveGenerationConfig.setResponseModality.

    • Usunęliśmy klasę LiveContentResponse.Status, a zamiast tego zagnieździliśmy pola stanu jako właściwości klasy LiveContentResponse.

    • Usunęliśmy klasę LiveContentResponse i zamiast niej udostępniliśmy podklasy LiveServerMessage, które pasują do odpowiedzi z modelu.

    • Zmieniono LiveModelFutures.connect, aby zwracać ListenableFuture<LiveSessionFutures> zamiast ListenableFuture<LiveSession>.

  • Zmieniono różne metody konstruktora Java, aby zwracały instancję swojej klasy zamiast void.

Web

  • Wyliczenia

    • Usunięto wartości z tych wyliczeń: HarmCategory, BlockThreshold, HarmProbability, HarmSeverity, BlockReasonFinishReason.
  • Przyczyna blokady

    • Zmieniono blockReasonPromptFeedback na opcjonalne.

Zmiany są wymagane tylko wtedy, gdy zaczynasz używać znaku Gemini Developer API (zamiast znaku Vertex AI Gemini API):

  • Ustawienia bezpieczeństwa

    • Usunięto użycia nieobsługiwanego znaku SafetySetting.method.
  • Dane w treści

    • Usunięto użycia nieobsługiwanego znaku InlineDataPart.videoMetadata.

Dart

  • Wyliczenia

    • Usunęliśmy wartości z tych wyliczeń: HarmCategory, HarmProbability, BlockReasonFinishReason.
  • Część danych

    • Zmieniliśmy nazwę funkcji DataPart na InlineDataPart, a funkcji static data na inlineData, aby była zgodna z innymi platformami.
  • Opcje żądania

    • Usunięto RequestOptions, ponieważ timeout nie działało. W najbliższej przyszłości zostanie ona ponownie dodana, ale zostanie przeniesiona do typu GenerativeModel, aby pasować do innych platform.
  • Sekwencje zatrzymania

    • Zmieniono parametr stopSequencesGenerationConfig tak, aby był opcjonalny i domyślnie przyjmował wartość null zamiast pustej tablicy.
  • Cytowania

    • Zmieniliśmy nazwę właściwości citationSources na citationsCitationMetadata. Typ CitationSource został zmieniony na Citation w celu zachowania zgodności z innymi platformami.
  • Niepotrzebne typy, metody i właściwości publiczne

    • Usunęliśmy te typy, metody i właściwości, które zostały udostępnione nieumyślnie: defaultTimeout, CountTokensResponseFields, parseCountTokensResponse, parseEmbedContentResponse, parseGenerateContentResponse, parseContent, BatchEmbedContentsResponse, ContentEmbedding, EmbedContentRequestEmbedContentResponse.
  • Licz tokeny

    • Usunięto dodatkowe pola z funkcji countTokens, które nie są już potrzebne. Wystarczy tylko contents.
  • Tworzenie instancji modelu

    • Przeniesiono parametr systemInstruction na koniec listy parametrów, aby był zgodny z innymi platformami.
  • Funkcja umieszczania

    • Usunięto z modelu nieobsługiwaną funkcję osadzania (embedContentbatchEmbedContents).

Unity

Pomoc dotycząca Unity nie była dostępna w przypadku „Vertex AI in Firebase”.

Dowiedz się, jak zacząć korzystać z pakietu Firebase AI Logic SDK dla Unity.

Możliwe błędy związane z migracją

Podczas migracji do wersji GA usługi Firebase AI Logic możesz napotkać błędy, jeśli nie wprowadzisz wszystkich wymaganych zmian opisanych w tym przewodniku.

Błąd 403: Requests to this API firebasevertexai.googleapis.com ... are blocked.

Jeśli otrzymasz błąd 403 z komunikatem Requests to this API firebasevertexai.googleapis.com ... are blocked., zwykle oznacza to, że klucz interfejsu Firebase API w pliku lub obiekcie konfiguracyjnym Firebase nie ma wymaganego interfejsu API na liście dozwolonych interfejsów API dla usługi, której próbujesz użyć.

Sprawdź, czy klucz interfejsu API Firebase używany przez aplikację ma wszystkie wymagane interfejsy API na liście dozwolonych „Ograniczenia interfejsu API”. W przypadku Firebase AI Logic klucz interfejsu API Firebase musi mieć na liście dozwolonych co najmniej interfejs API Firebase AI Logic. Ten interfejs API powinien zostać automatycznie dodany do listy dozwolonych klucza API, gdy włączysz wymagane interfejsy API w konsoli Firebase.

Wszystkie klucze interfejsu API możesz wyświetlić w sekcji Interfejsy API i usługi > Dane logowania w konsoli Google Cloud.


Prześlij opinię o korzystaniu z usługi Firebase AI Logic