Firebase AI Logic dan SDK kliennya sebelumnya disebut "Vertex AI in Firebase". Untuk lebih mencerminkan layanan dan fitur yang diperluas (misalnya, kami kini mendukung Gemini Developer API!), kami mengganti nama dan mengemas ulang layanan kami menjadi Firebase AI Logic.
Untuk mengakses model AI generatif Google secara aman langsung dari aplikasi seluler atau web Anda, Anda kini dapat memilih penyedia "Gemini API" — baik Vertex AI Gemini API yang sudah lama tersedia maupun Gemini Developer API yang kini tersedia. Artinya, kini Anda memiliki opsi untuk menggunakan Gemini Developer API, yang menyediakan tingkat tanpa biaya dengan batas tarif dan kuota yang wajar.
Ringkasan langkah-langkah untuk bermigrasi ke SDK Firebase AI Logic
Langkah 1: Pilih penyedia "Gemini API" terbaik untuk aplikasi dan kasus penggunaan Anda.
Langkah 2: Aktifkan API yang diperlukan.
Langkah 3: Perbarui pustaka yang digunakan di aplikasi Anda.
Langkah 4: Perbarui inisialisasi di aplikasi Anda.
Langkah 5: Perbarui kode Anda, bergantung pada fitur yang Anda gunakan.
Langkah 1: Pilih penyedia "Gemini API" terbaik untuk aplikasi Anda
Dengan migrasi ini, Anda dapat memilih penyedia "Gemini API":
SDK "Vertex AI in Firebase" lama hanya dapat menggunakan Vertex AI Gemini API.
SDK Firebase AI Logic baru memungkinkan Anda memilih penyedia "Gemini API" yang ingin dipanggil langsung dari aplikasi seluler atau web Anda – baik Gemini Developer API maupun Vertex AI Gemini API.
Tinjau perbedaan antara penggunaan dua penyedia Gemini API, terutama dalam hal fitur yang didukung, harga, dan batas kecepatan. Sebagai contoh, Gemini Developer API tidak mendukung penyediaan file menggunakan URL Cloud Storage, tetapi mungkin merupakan pilihan yang baik jika Anda ingin memanfaatkan tingkat tanpa biaya dan kuota yang wajar.
Langkah 2: Aktifkan API yang diperlukan
Pastikan semua API yang diperlukan diaktifkan di project Firebase Anda untuk menggunakan penyedia "Gemini API" yang Anda pilih.
Perhatikan bahwa Anda dapat mengaktifkan kedua penyedia API di project Anda secara bersamaan.
Login ke konsol Firebase, lalu pilih project Firebase Anda.
Di konsol Firebase, buka halaman Firebase AI Logic.
Klik Mulai untuk meluncurkan alur kerja terpandu yang membantu Anda menyiapkan API dan resource yang diperlukan untuk project Anda.
Pilih penyedia "Gemini API" yang ingin Anda gunakan dengan SDK Firebase AI Logic. Anda dapat menyiapkan dan menggunakan penyedia API lain nanti, jika Anda mau.
Gemini Developer API — penagihan opsional (tersedia di paket harga Spark tanpa biaya)
Alur kerja konsol akan mengaktifkan API yang diperlukan dan membuat kunci API Gemini di project Anda.
Jangan tambahkan kunci API Gemini ini ke codebase aplikasi Anda. Pelajari lebih lanjut.Vertex AI Gemini API — penagihan diperlukan (memerlukan paket harga Blaze bayar sesuai penggunaan)
Alur kerja konsol akan mengaktifkan API yang diperlukan di project Anda.
Lanjutkan di panduan migrasi ini untuk memperbarui library dan inisialisasi di aplikasi Anda.
Langkah 3: Perbarui library yang digunakan di aplikasi Anda
Perbarui codebase aplikasi Anda untuk menggunakan library Firebase AI Logic.
Swift
Di Xcode, dengan project aplikasi Anda dalam keadaan terbuka, update paket Firebase ke v11.13.0 atau yang lebih baru menggunakan salah satu opsi berikut:
Opsi 1: Update semua paket: Buka File > Packages > Update to Latest Package Versions.
Opsi 2: Perbarui Firebase satu per satu: Buka paket Firebase di bagian yang disebut Package Dependencies. Klik kanan paket Firebase, lalu pilih Update Package.
Pastikan paket Firebase kini menampilkan v11.13.0 atau yang lebih baru. Jika tidak, pastikan Persyaratan Paket yang Anda tentukan mengizinkan update ke v11.13.0 atau yang lebih baru.
Pilih target aplikasi Anda di Project Editor, lalu buka bagian Frameworks, Libraries, and Embedded Content.
Tambahkan library baru: Pilih tombol +, lalu tambahkan FirebaseAI dari paket Firebase.
Setelah Anda selesai memigrasikan aplikasi (lihat bagian lainnya dalam panduan ini), pastikan untuk menghapus library lama:
Pilih FirebaseVertexAI-Preview, lalu tekan tombol —.
Kotlin
Dalam file Gradle modul (level aplikasi) (biasanya
<project>/<app-module>/build.gradle.kts
atau<project>/<app-module>/build.gradle
), ganti dependensi lama (jika berlaku) dengan yang berikut.Perhatikan bahwa mungkin lebih mudah untuk memigrasikan codebase aplikasi Anda (lihat bagian lainnya dalam panduan ini) sebelum menghapus dependensi lama.
// 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") }Sinkronkan project Android Anda dengan file Gradle.
Perhatikan bahwa jika Anda memilih untuk tidak menggunakan Firebase Android BoM, cukup tambahkan
dependensi untuk library firebase-ai
dan setujui versi terbaru
yang disarankan oleh Android Studio.
Java
Dalam file Gradle modul (level aplikasi) (biasanya
<project>/<app-module>/build.gradle.kts
atau<project>/<app-module>/build.gradle
), ganti dependensi lama (jika berlaku) dengan yang berikut.Perhatikan bahwa mungkin lebih mudah untuk memigrasikan codebase aplikasi Anda (lihat bagian lainnya dalam panduan ini) sebelum menghapus dependensi lama.
// 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") }Sinkronkan project Android Anda dengan file Gradle.
Perhatikan bahwa jika Anda memilih untuk tidak menggunakan Firebase Android BoM, cukup tambahkan
dependensi untuk library firebase-ai
dan setujui versi terbaru
yang disarankan oleh Android Studio.
Web
Dapatkan Firebase JS SDK untuk Web versi terbaru menggunakan npm:
npm i firebase@latest
ATAU
yarn add firebase@latest
Di mana pun Anda mengimpor library, perbarui pernyataan impor untuk menggunakan
firebase/ai
.Perhatikan bahwa mungkin lebih mudah untuk memigrasikan codebase aplikasi Anda (lihat bagian lainnya dalam panduan ini) sebelum menghapus impor lama.
// 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
Perbarui untuk menggunakan paket
firebase_ai
dalam filepubspec.yaml
Anda dengan menjalankan perintah berikut dari direktori project Flutter Anda:flutter pub add firebase_ai
Build ulang project Flutter Anda:
flutter run
Setelah Anda selesai memigrasikan aplikasi (lihat bagian yang tersisa dalam panduan ini), pastikan untuk menghapus paket lama:
flutter pub remove firebase_vertexai
Unity
Dukungan untuk Unity tidak tersedia dari "Vertex AI in Firebase".
Pelajari cara memulai Firebase AI Logic SDK untuk Unity.
Langkah 4: Perbarui inisialisasi di aplikasi Anda
Klik penyedia Gemini API untuk melihat konten dan kode khusus penyedia di halaman ini. |
Perbarui cara Anda menginisialisasi layanan untuk penyedia API yang Anda pilih dan
buat instance 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
Dukungan untuk Unity tidak tersedia sejak "Vertex AI in Firebase".
Pelajari cara memulai Firebase AI Logic SDK untuk Unity.
Perhatikan bahwa bergantung pada kemampuan yang Anda gunakan, Anda mungkin tidak selalu
membuat instance GenerativeModel
.
- Untuk mengakses model Imagen,
buat instance
ImagenModel
.
Langkah 5: Perbarui kode Anda, bergantung pada fitur yang Anda gunakan
Langkah ini menjelaskan perubahan yang mungkin diperlukan, bergantung pada fitur yang Anda gunakan.
Jika Anda menggunakan URL Cloud Storage dan beralih menggunakan Gemini Developer API dalam migrasi ini, Anda harus memperbarui permintaan multimodal untuk menyertakan file sebagai data inline (atau menggunakan URL YouTube untuk video).
Beberapa perubahan diperkenalkan untuk SDK "Vertex AI in Firebase" versi GA. Perubahan yang sama ini diperlukan untuk menggunakan SDK Firebase AI Logic. Tinjau daftar berikut untuk mengetahui perubahan yang mungkin perlu Anda lakukan pada kode untuk mengakomodasi penggunaan SDK Firebase AI Logic.
Wajib untuk semua bahasa dan platform
Panggilan fungsi
Jika Anda menerapkan fitur ini sebelum GA, Anda harus memperbarui cara Anda menentukan skema. Sebaiknya tinjau panduan panggilan fungsi yang telah diperbarui untuk mempelajari cara menulis deklarasi fungsi.Membuat output terstruktur (seperti JSON) menggunakan
responseSchema
Jika Anda menerapkan fitur ini sebelum GA, Anda harus memperbarui cara Anda menentukan skema. Sebaiknya tinjau panduan output terstruktur yang baru untuk mempelajari cara menulis skema JSON.Waktu tunggu
- Mengubah waktu tunggu default untuk permintaan menjadi 180 detik.
Wajib diisi berdasarkan platform atau bahasa
Swift
Enumerations
Mengganti sebagian besar jenis
enum
denganstruct
dengan variabel statis. Perubahan ini memungkinkan fleksibilitas yang lebih besar untuk mengembangkan API secara kompatibel mundur. Saat menggunakan pernyataanswitch
, Anda kini harus menyertakan kasusdefault:
untuk mencakup nilai yang tidak diketahui atau tidak ditangani, termasuk nilai baru yang ditambahkan ke SDK pada masa mendatang.Mengganti nama enumerasi
BlockThreshold
menjadiHarmBlockThreshold
; jenis ini sekarang menjadistruct
.Kasus
unknown
danunspecified
telah dihapus dari enumerasi berikut (sekarangstruct
):HarmCategory
,HarmBlockThreshold
,HarmProbability
,BlockReason
, danFinishReason
.Mengganti enumerasi
ModelContent.Part
dengan protokol bernamaPart
untuk memungkinkan jenis baru ditambahkan dengan cara yang kompatibel mundur. Perubahan ini dijelaskan secara lebih mendetail di bagian Bagian konten.
Bagian konten
Menghapus protokol
ThrowingPartsRepresentable
, dan menyederhanakan penginisialisasi untukModelContent
guna menghindari error compiler sesekali. Gambar yang tidak dienkode dengan benar akan tetap memunculkan error saat digunakan digenerateContent
.Mengganti kasus
ModelContent.Part
dengan jenisstruct
berikut yang sesuai dengan protokolPart
:.text
keTextPart
.data
keInlineDataPart
.fileData
keFileDataPart
.functionCall
keFunctionCallPart
.functionResponse
keFunctionResponsePart
Kategori bahaya
- Mengubah
HarmCategory
agar tidak lagi bertingkat dalam jenisSafetySetting
. Jika Anda menyebutnya sebagaiSafetySetting.HarmCategory
,SafetySetting.HarmCategory
tersebut dapat diganti denganHarmCategory
.
- Mengubah
Masukan keselamatan
- Menghapus jenis
SafetyFeedback
, karena tidak digunakan dalam respons apa pun.
- Menghapus jenis
Metadata kutipan
- Mengganti nama properti
citationSources
menjadicitations
diCitationMetadata
.
- Mengganti nama properti
Total karakter yang dapat ditagih
- Mengubah properti
totalBillableCharacters
diCountTokensResponse
menjadi opsional untuk mencerminkan situasi saat tidak ada karakter yang dikirim.
- Mengubah properti
Respons kandidat
- Mengganti nama
CandidateResponse
menjadiCandidate
agar sesuai dengan platform lain.
- Mengganti nama
Konfigurasi pembuatan
- Mengubah properti publik
GenerationConfig
menjadiinternal
. Semuanya tetap dapat dikonfigurasi di penginisialisasi.
- Mengubah properti publik
Kotlin
Enumerations
Mengganti class
enum
dan classsealed
dengan class reguler. Perubahan ini memungkinkan fleksibilitas yang lebih besar untuk mengembangkan API dengan cara yang kompatibel mundur.Mengganti nama enumerasi
BlockThreshold
menjadiHarmBlockThreshold
.Nilai dihapus dari enumerasi berikut:
HarmBlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
, danFinishReason
.
Metode blob
- Mengganti nama semua metode yang menyertakan
Blob
sebagai bagian dari namanya untuk menggunakanInlineData
sebagai gantinya.
- Mengganti nama semua metode yang menyertakan
Setelan keamanan
- Mengubah kolom
method
menjadi nullable.
- Mengubah kolom
Class durasi
- Menghapus semua penggunaan class
Duration
Kotlin, dan menggantinya denganlong
. Perubahan ini memberikan interoperabilitas yang lebih baik dengan Java.
- Menghapus semua penggunaan class
Metadata kutipan
- Membungkus semua kolom yang sebelumnya dideklarasikan di
CitationMetadata
ke dalam class baru yang disebutCitation
. Kutipan dapat ditemukan dalam daftar yang disebutcitations
diCitationMetadata
. Perubahan ini memungkinkan penyelarasan jenis yang lebih baik di seluruh platform.
- Membungkus semua kolom yang sebelumnya dideklarasikan di
Menghitung token
- Mengubah kolom
totalBillableCharacters
menjadi nullable.
- Mengubah kolom
Total karakter yang dapat ditagih
- Mengubah properti
totalBillableCharacters
diCountTokensResponse
menjadi opsional untuk mencerminkan situasi saat tidak ada karakter yang dikirim.
- Mengubah properti
Membuat instance model
- Memindahkan parameter
requestOptions
ke akhir daftar parameter agar selaras dengan platform lain.
- Memindahkan parameter
Live API
Menghapus nilai
UNSPECIFIED
untuk class enumResponseModality
. Sebagai gantinya, gunakannull
.Mengganti nama
LiveGenerationConfig.setResponseModalities
menjadiLiveGenerationConfig.setResponseModality
.Menghapus class
LiveContentResponse.Status
, dan sebagai gantinya, menyusun kolom status sebagai propertiLiveContentResponse
.Menghapus class
LiveContentResponse
, dan sebagai gantinya, menyediakan subkelasLiveServerMessage
yang cocok dengan respons dari model.Mengubah
LiveModelFutures.connect
agar menampilkanListenableFuture<LiveSessionFutures>
, bukanListenableFuture<LiveSession>
.
Java
Enumerations
Mengganti class
enum
dan classsealed
dengan class reguler. Perubahan ini memungkinkan fleksibilitas yang lebih besar untuk mengembangkan API dengan cara yang kompatibel mundur.Mengganti nama enumerasi
BlockThreshold
menjadiHarmBlockThreshold
.Nilai dihapus dari enumerasi berikut:
HarmBlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
, danFinishReason
.
Metode blob
- Mengganti nama semua metode yang menyertakan
Blob
sebagai bagian dari namanya untuk menggunakanInlineData
sebagai gantinya.
- Mengganti nama semua metode yang menyertakan
Setelan keamanan
- Mengubah kolom
method
menjadi nullable.
- Mengubah kolom
Class durasi
- Menghapus semua penggunaan class
Duration
Kotlin, dan menggantinya denganlong
. Perubahan ini memberikan interoperabilitas yang lebih baik dengan Java.
- Menghapus semua penggunaan class
Metadata kutipan
- Membungkus semua kolom yang sebelumnya dideklarasikan di
CitationMetadata
ke dalam class baru yang disebutCitation
. Kutipan dapat ditemukan dalam daftar yang disebutcitations
diCitationMetadata
. Perubahan ini memungkinkan penyelarasan jenis yang lebih baik di seluruh platform.
- Membungkus semua kolom yang sebelumnya dideklarasikan di
Menghitung token
- Mengubah kolom
totalBillableCharacters
menjadi nullable.
- Mengubah kolom
Total karakter yang dapat ditagih
- Mengubah properti
totalBillableCharacters
diCountTokensResponse
menjadi opsional untuk mencerminkan situasi saat tidak ada karakter yang dikirim.
- Mengubah properti
Membuat instance model
- Memindahkan parameter
requestOptions
ke akhir daftar parameter agar selaras dengan platform lain.
- Memindahkan parameter
Live API
Menghapus nilai
UNSPECIFIED
untuk class enumResponseModality
. Sebagai gantinya, gunakannull
.Mengganti nama
LiveGenerationConfig.setResponseModalities
menjadiLiveGenerationConfig.setResponseModality
.Menghapus class
LiveContentResponse.Status
, dan sebagai gantinya, menyusun kolom status sebagai propertiLiveContentResponse
.Menghapus class
LiveContentResponse
, dan sebagai gantinya, menyediakan subkelasLiveServerMessage
yang cocok dengan respons dari model.Mengubah
LiveModelFutures.connect
agar menampilkanListenableFuture<LiveSessionFutures>
, bukanListenableFuture<LiveSession>
.
Mengubah berbagai metode builder Java agar kini menampilkan instance classnya dengan benar, bukan
void
.
Web
Enumerations
- Nilai dihapus dari enumerasi berikut:
HarmCategory
,BlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
, danFinishReason
.
- Nilai dihapus dari enumerasi berikut:
Alasan pemblokiran
- Mengubah
blockReason
diPromptFeedback
menjadi opsional.
- Mengubah
Perubahan hanya diperlukan jika Anda mulai menggunakan Gemini Developer API (bukan Vertex AI Gemini API):
Setelan keamanan
- Menghapus penggunaan
SafetySetting.method
yang tidak didukung.
- Menghapus penggunaan
Data inline
- Menghapus penggunaan
InlineDataPart.videoMetadata
yang tidak didukung.
- Menghapus penggunaan
Dart
Enumerations
- Nilai dihapus dari enumerasi berikut:
HarmCategory
,HarmProbability
,BlockReason
, danFinishReason
.
- Nilai dihapus dari enumerasi berikut:
Bagian data
- Mengganti nama
DataPart
menjadiInlineDataPart
, dan fungsistatic
data
menjadiinlineData
agar selaras dengan platform lain.
- Mengganti nama
Opsi permintaan
- Menghapus
RequestOptions
karenatimeout
tidak berfungsi. Fitur ini akan ditambahkan kembali dalam waktu dekat, tetapi akan dipindahkan ke jenisGenerativeModel
agar sesuai dengan platform lain.
- Menghapus
Urutan penghentian
- Mengubah parameter
stopSequences
diGenerationConfig
agar bersifat opsional dan ditetapkan secara default kenull
, bukan array kosong.
- Mengubah parameter
Kutipan
- Mengganti nama properti
citationSources
menjadicitations
diCitationMetadata
. JenisCitationSource
diganti namanya menjadiCitation
agar sesuai dengan platform lain.
- Mengganti nama properti
Jenis, metode, dan properti publik yang tidak diperlukan
- Jenis, metode, dan properti berikut yang tidak sengaja diekspos telah dihapus:
defaultTimeout
,CountTokensResponseFields
,parseCountTokensResponse
,parseEmbedContentResponse
,parseGenerateContentResponse
,parseContent
,BatchEmbedContentsResponse
,ContentEmbedding
,EmbedContentRequest
, danEmbedContentResponse
.
- Jenis, metode, dan properti berikut yang tidak sengaja diekspos telah dihapus:
Menghitung token
- Menghapus kolom tambahan dari fungsi
countTokens
yang tidak lagi diperlukan. Hanyacontents
yang diperlukan.
- Menghapus kolom tambahan dari fungsi
Membuat instance model
- Memindahkan parameter
systemInstruction
ke akhir daftar parameter agar selaras dengan platform lain.
- Memindahkan parameter
Fungsi penyematan
- Menghapus fungsi penyematan yang tidak didukung (
embedContent
danbatchEmbedContents
) dari model.
- Menghapus fungsi penyematan yang tidak didukung (
Unity
Dukungan untuk Unity tidak tersedia dari "Vertex AI in Firebase".
Pelajari cara memulai Firebase AI Logic SDK untuk Unity.
Kemungkinan error terkait migrasi
Saat bermigrasi untuk menggunakan Firebase AI Logic versi GA, Anda mungkin mengalami error jika belum menyelesaikan semua perubahan yang diperlukan seperti yang dijelaskan dalam panduan migrasi ini.
Error 403: Requests to this API firebasevertexai.googleapis.com ... are blocked.
Jika Anda menerima error 403 yang menyatakan
Requests to this API firebasevertexai.googleapis.com ... are blocked.
,
biasanya berarti kunci API Firebase di file atau objek konfigurasi Firebase Anda tidak memiliki API yang diperlukan dalam daftar yang diizinkannya untuk produk yang sedang Anda coba gunakan.
Pastikan kunci Firebase API yang digunakan oleh aplikasi Anda memiliki semua API yang diperlukan yang disertakan dalam daftar yang diizinkan "pembatasan API" kunci. Untuk Firebase AI Logic, kunci API Firebase Anda minimal harus memiliki Firebase AI Logic API dalam daftar yang diizinkannya. API ini seharusnya telah otomatis ditambahkan ke daftar yang diizinkan untuk kunci API Anda saat Anda mengaktifkan API yang diperlukan di konsol Firebase.
Anda dapat melihat semua kunci API di panel APIs & Services > Credentials di Google Cloud console.
Memberikan masukan tentang pengalaman Anda dengan Firebase AI Logic