Gemini Developer API

واسط برنامه‌سازی کاربردی توسعه‌دهندگان Gemini به شما امکان می‌دهد به مدل‌های Gemini در Google دسترسی داشته باشید و ویژگی‌های هوش مصنوعی زایای پیشرفته را در برنامه‌های Android خود بسازید—ازجمله گپ مکالمه‌ای، تولید تصویر (با Nano Banana)، و تولید نوشتار براساس ورودی نوشتار، تصویر، صدا، و ویدیو.

برای دسترسی به مدل‌های Gemini Pro و Flash، می‌توانید از Gemini Developer API با Firebase AI Logic استفاده کنید. این سرویس به شما امکان می‌دهد بدون نیاز به روش پرداخت (مانند کارت اعتباری) شروع کنید و یک سطح رایگان سخاوتمندانه ارائه می‌دهد. پس‌از اینکه ادغام خود را با یک پایگاه کاربری کوچک تأیید کردید، می‌توانید با ارتقا به سطح پولی، آن را مقیاس‌بندی کنید.

تصویری که نشان می‌دهد برنامه Android بااستفاده از «کیت توسعه نرم‌افزار Firebase Android»
    درخواست‌هایی را به زیرینه Firebase در فضای ابری ارسال می‌کند. درخواست‌ها به
    «میانای برنامه‌سازی کاربردی توسعه‌دهندگان Gemini» هدایت می‌شوند،
    که می‌تواند از مدل‌های Gemini Pro و Flash استفاده کند.
شکل ۱. معماری یکپارچه‌سازی Firebase AI Logic برای دسترسی به Gemini Developer API.

شروع کردن

قبل‌از اینکه مستقیماً از برنامه‌تان با Gemini API تعامل داشته باشید، باید ابتدا چند کار انجام دهید، ازجمله آشنایی با پیام‌واره‌نویسی و همچنین راه‌اندازی Firebase و برنامه‌تان برای استفاده از کیت توسعه نرم‌افزار.

آزمایش با پیام‌واره‌ها

آزمایش کردن پیام‌واره‌ها می‌تواند به شما کمک کند بهترین عبارت‌بندی، محتوا، و قالب را برای برنامه Android خود پیدا کنید. Google AI Studio یک «محیط توسعه یکپارچه» (IDE) است که می‌توانید از آن برای نمونه‌سازی و طراحی پیام‌واره‌ها برای موارد استفاده برنامه‌تان استفاده کنید.

ایجاد پیام‌واره‌های مؤثر برای مورد استفاده شما مستلزم آزمایش‌های گسترده است که بخش مهمی از این فرایند است. می‌توانید درباره درخواست در اسناد Firebase بیشتر بدانید.

وقتی از پیام‌واره‌تان راضی بودید، روی دکمه <> کلیک کنید تا تکه‌کدهای قابل‌افزودن به کدتان را دریافت کنید.

راه‌اندازی پروژه Firebase و متصل کردن برنامه به Firebase

وقتی آماده بودید که از برنامه‌تان با «میانای برنامه‌سازی کاربردی» تماس بگیرید، دستورالعمل‌های «مرحله ۱» در راهنمای شروع به کار Firebase AI Logic را دنبال کنید تا Firebase راه‌اندازی کنید و میاناهای برنامه‌سازی کاربردی و سرویس‌های موردنیاز را فعال کنید.

افزودن وابستگی‌های Gradle

وابستگی‌های Gradle زیر را به واحد برنامه خود اضافه کنید:

کاتلین

dependencies {
  // ... other androidx dependencies

  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:35.0.0"))

  // Add the dependencies for the Firebase AI Logic and App Check libraries
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")
  implementation("com.google.firebase:firebase-appcheck-debug")
}

جاوا

dependencies {
  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:35.0.0"))

  // Add the dependencies for the Firebase AI Logic and App Check libraries
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")
  implementation("com.google.firebase:firebase-appcheck-debug")

  // Required for one-shot operations (to use `ListenableFuture` from Guava Android)
  implementation("com.google.guava:guava:31.0.1-android")

  // Required for streaming operations (to use `Publisher` from Reactive Streams)
  implementation("org.reactivestreams:reactive-streams:1.0.4")
}

پیکربندی ارائه‌دهنده اشکال‌زدایی «بررسی برنامه» برای توسعه محلی

از اوایل ژوئیه ۲۰۲۶، به‌عنوان بخشی از گردش کار راه‌اندازی هدایت‌شده برای «منطق هوش مصنوعی» در کنسول Firebase، «بررسی برنامه Firebase» به‌طور خودکار برای محافظت از ‫Gemini API اعمال می‌شود. برای توسعه محلی، باید ارائه‌دهنده اشکال‌زدایی App Check را پیکربندی کنید تا گواهی را دور بزنید و درعین‌حال اجرای App Check را حفظ کنید.

  1. در ساخت اشکال‌زدایی، App Check را پیکربندی کنید تا از کارخانه ارائه‌دهنده اشکال‌زدایی استفاده کند:

    کاتلین

    Firebase.initialize(context = this)
    Firebase.appCheck.installAppCheckProviderFactory(
        DebugAppCheckProviderFactory.getInstance(),
    )
    

    جاوا

    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance());
    
  2. نمودار اشکال‌زدایی خود را دریافت کنید:

    1. برنامه‌تان را در شبیه‌ساز یا در دستگاه آزمایشی‌تان اجرا کنید.

    2. در گزارش‌هایتان به‌دنبال نشان اشکال‌زدایی «بررسی برنامه» بگردید. برای مثال:

      D DebugAppCheckProvider: Enter this debug secret into the allow list
      in the Firebase Console for your project: 123a4567-b89c-12d3-e456-789012345678
      
    3. کد را کپی کنید (برای مثال، 123a4567-b89c-12d3-e456-789012345678).

  3. ثبت کردن کد اشکال‌زدایی با App Check:

    1. در کنسول Firebase، به امنیت > بررسی برنامه > برگه برنامه‌ها بروید.

    2. برنامه‌تان را پیدا کنید، روی منو سرریز () کلیک کنید، و سپس مدیریت نشان‌های اشکال‌زدایی را انتخاب کنید.

    3. برای ثبت کردن کد اشکال‌زدایی، دستورالعمل‌های روی صفحه را دنبال کنید.

برای جزئیات مربوط به ارائه‌دهنده اشکال‌زدایی (ازجمله نحوه دریافت کد اشکال‌زدایی جدید)، اسناد رسمی App Check را بررسی کنید.

راه‌اندازی مدل زایا

با نمونه‌سازی GenerativeModel و مشخص کردن نام مدل شروع کنید:

کاتلین

// Start by instantiating a GenerativeModel and specifying the model name:
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel("gemini-3.5-flash")

جاوا

GenerativeModel firebaseAI = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-3.5-flash");

GenerativeModelFutures model = GenerativeModelFutures.from(firebaseAI);

درباره مدل‌های دردسترس برای استفاده با Gemini Developer API بیشتر بدانید. همچنین می‌توانید درباره پیکربندی پارامترهای مدل بیشتر بدانید.

تعامل با Gemini Developer API از نرم‌افزار

اکنون که Firebase و برنامه‌تان را برای استفاده از کیت توسعه نرم‌افزار راه‌اندازی کرده‌اید، آماده‌اید از برنامه‌تان با Gemini Developer API تعامل برقرار کنید.

تولید نوشتار

برای تولید پاسخ نوشتاری، با پیام‌واره‌تان با generateContent() تماس بگیرید.

کاتلین

scope.launch {
    val response = model.generateContent("Write a story about a magic backpack.")
}

جاوا

Content prompt = new Content.Builder()
        .addText("Write a story about a magic backpack.")
        .build();

ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

تولید نوشتار از تصاویر و رسانه‌های دیگر

همچنین می‌توانید از پیام‌واره‌ای که شامل نوشتار به‌علاوه تصاویر یا رسانه‌های دیگر است نوشتار تولید کنید. وقتی با generateContent() تماس می‌گیرید، می‌توانید رسانه را به‌عنوان داده‌های درون‌خطی ارسال کنید.

برای مثال، برای استفاده از یک بیت‌مپ، از نوع محتوای image استفاده کنید:

کاتلین

scope.launch {
    val response = model.generateContent(
        content {
            image(bitmap)
            text("what is the object in the picture?")
        }
    )
}

جاوا

Content content = new Content.Builder()
        .addImage(bitmap)
        .addText("what is the object in the picture?")
        .build();

ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

برای ارسال فایل صوتی، از نوع محتوای inlineData استفاده کنید:

کاتلین

scope.launch {
    val contentResolver = applicationContext.contentResolver
    contentResolver.openInputStream(audioUri).use { stream ->
        stream?.let {
            val bytes = it.readBytes()

            val prompt = content {
                inlineData(bytes, "audio/mpeg") // Specify the appropriate audio MIME type
                text("Transcribe this audio recording.")
            }

            val response = model.generateContent(prompt)
        }
    }
}

جاوا

ContentResolver resolver = applicationContext.getContentResolver();

try (InputStream stream = resolver.openInputStream(audioUri)) {
    File audioFile = new File(new URI(audioUri.toString()));
    int audioSize = (int) audioFile.length();
    byte[] audioBytes = new byte[audioSize];
    if (stream != null) {
        stream.read(audioBytes, 0, audioBytes.length);
        stream.close();

        // Provide a prompt that includes audio specified earlier and text
        Content prompt = new Content.Builder()
                .addInlineData(audioBytes, "audio/mpeg")  // Specify the appropriate audio MIME type
                .addText("Transcribe what's said in this audio recording.")
                .build();

        // To generate text output, call `generateContent` with the prompt
        ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
        Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
            @Override
            public void onSuccess(GenerateContentResponse result) {
                String text = result.getText();
                Log.d(TAG, (text == null) ? "" : text);
            }
            @Override
            public void onFailure(Throwable t) {
                Log.e(TAG, "Failed to generate a response", t);
            }
        }, executor);
    } else {
        Log.e(TAG, "Error getting input stream for file.");
        // Handle the error appropriately
    }
} catch (IOException e) {
    Log.e(TAG, "Failed to read the audio file", e);
} catch (URISyntaxException e) {
    Log.e(TAG, "Invalid audio file", e);
}

و برای ارائه فایل ویدیو، به استفاده از نوع محتوای inlineData ادامه دهید:

کاتلین

scope.launch {
    val contentResolver = applicationContext.contentResolver
    contentResolver.openInputStream(videoUri).use { stream ->
        stream?.let {
            val bytes = it.readBytes()

            val prompt = content {
                inlineData(bytes, "video/mp4") // Specify the appropriate video MIME type
                text("Describe the content of this video")
            }

            val response = model.generateContent(prompt)
        }
    }
}

جاوا

ContentResolver resolver = applicationContext.getContentResolver();

try (InputStream stream = resolver.openInputStream(videoUri)) {
    File videoFile = new File(new URI(videoUri.toString()));
    int videoSize = (int) videoFile.length();
    byte[] videoBytes = new byte[videoSize];
    if (stream != null) {
        stream.read(videoBytes, 0, videoBytes.length);
        stream.close();

        // Provide a prompt that includes video specified earlier and text
        Content prompt = new Content.Builder()
                .addInlineData(videoBytes, "video/mp4")
                .addText("Describe the content of this video")
                .build();

        // To generate text output, call generateContent with the prompt
        ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
        Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
            @Override
            public void onSuccess(GenerateContentResponse result) {
                String resultText = result.getText();
                System.out.println(resultText);
            }

            @Override
            public void onFailure(Throwable t) {
                t.printStackTrace();
            }
        }, executor);
    }
} catch (IOException e) {
    e.printStackTrace();
} catch (URISyntaxException e) {
    e.printStackTrace();
}

به‌همین ترتیب، می‌توانید اسناد PDF (application/pdf) و نوشتار ساده (text/plain) را نیز با ارسال «نوع MIME» مربوطه به‌عنوان پارامتر ارسال کنید.

گپ چندنوبتی

همچنین می‌توانید از مکالمه‌های چندنوبتی پشتیبانی کنید. گپی را با تابع startChat() مقداردهی اولیه کنید. می‌توانید به‌صورت اختیاری سابقه پیام را به مدل ارائه دهید. سپس تابع sendMessage() را برای ارسال پیام‌های گپ فراخوانی کنید.

کاتلین

val chat = model.startChat(
    history = listOf(
        content(role = "user") { text("Hello, I have 2 dogs in my house.") },
        content(role = "model") { text("Great to meet you. What would you like to know?") }
    )
)

scope.launch {
    val response = chat.sendMessage("How many paws are in my house?")
}

جاوا

Content.Builder userContentBuilder = new Content.Builder();
userContentBuilder.setRole("user");
userContentBuilder.addText("Hello, I have 2 dogs in my house.");
Content userContent = userContentBuilder.build();

Content.Builder modelContentBuilder = new Content.Builder();
modelContentBuilder.setRole("model");
modelContentBuilder.addText("Great to meet you. What would you like to know?");
Content modelContent = modelContentBuilder.build();

List<Content> history = Arrays.asList(userContent, modelContent);

// Initialize the chat
ChatFutures chat = model.startChat(history);

// Create a new user message
Content.Builder messageBuilder = new Content.Builder();
messageBuilder.setRole("user");
messageBuilder.addText("How many paws are in my house?");

Content message = messageBuilder.build();

// Send the message
ListenableFuture<GenerateContentResponse> response = chat.sendMessage(message);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        String resultText = result.getText();
        System.out.println(resultText);
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

تولید تصویر در Android با Nano Banana

بیشتر بدانید

مدل‌های تصویر Gemini (یا مدل‌های Nano Banana) می‌توانند با بهره‌گیری از دانش جهانی و استدلال، تصاویر تولید و ویرایش کنند. این مدل‌ها تصاویر مرتبط با بافت تولید می‌کنند و بروندادهای نوشتار و تصویر را به‌طور یکپارچه ترکیب یا درهم‌تنیده می‌کنند. همچنین می‌توانند تصاویر دقیق با توالی‌های نوشتاری طولانی تولید کنند و از ویرایش تصویری مکالمه‌ای با حفظ بافت پشتیبانی می‌کنند.

این راهنما نحوه استفاده از مدل‌های تصویر Gemini (مدل‌های Nano Banana) را بااستفاده از Firebase AI Logic SDK برای Android شرح می‌دهد. جزئیات بیشتری درباره تولید تصویر با Gemini در اسناد Firebase پیدا کنید.

میانای کاربری «استودیو هوش مصنوعی Google» که فیلد ورودی نوشتاری را با پیام‌واره «تصویری ابرواقع‌گرایانه از تی‌رکس با کوله‌پشتی آبی که در جنگلی پیشاتاریخی پرسه می‌زند» نشان می‌دهد و تصویر تولیدشده تی‌رکس در جنگل با کوله‌پشتی آبی را نشان می‌دهد.
شکل ۲. از Google AI Studio برای پالایش پیام‌واره‌های تولید تصویر Nano Banana برای برنامه Android خود استفاده کنید

راه‌اندازی مدل زایا

GenerativeModel را نمونه‌سازی کنید و نام مدل «تصویر Gemini» را مشخص کنید (مثل gemini-3.1-flash-image). سپس، responseModalities را پیکربندی کنید تا هم TEXT و هم IMAGE را دربرگیرد تا نوشتار و تصویر درهم‌تنیده تولید کند. اگر TEXT را مستثنا کنید، مدل فقط تصویر برمی‌گرداند.

کاتلین

val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
    modelName = "gemini-3.1-flash-image",
    // Configure the model to respond with images (required) and text (optional)
    generationConfig = generationConfig {
        responseModalities = listOf(
            ResponseModality.TEXT,
            ResponseModality.IMAGE
        )
    }
)

جاوا

GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI()).generativeModel(
        "gemini-3.1-flash-image",
        // Configure the model to respond with text and images (required)
        new GenerationConfig.Builder()
                .setResponseModalities(Arrays.asList(ResponseModality.TEXT, ResponseModality.IMAGE))
                .build()
);
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

تولید کردن تصویر (ورودی فقط نوشتار)

می‌توانید با ارائه پیام‌واره فقط نوشتاری به مدل Gemini دستور دهید که تصویر تولید کند:

کاتلین

scope.launch {
    // Provide a text prompt instructing the model to generate an image
    val prompt =
        "A hyper realistic picture of a t-rex with a blue bag pack roaming a pre-historic forest."
    // To generate image output, call `generateContent` with the text input
    val generatedImageAsBitmap: Bitmap? = model.generateContent(prompt)
        .candidates.first().content.parts.filterIsInstance<ImagePart>()
        .firstOrNull()?.image
}

جاوا

// Provide a text prompt instructing the model to generate an image
Content prompt = new Content.Builder()
        .addText("Generate an image of the Eiffel Tower with fireworks in the background.")
        .build();
// To generate an image, call `generateContent` with the text input
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        // iterate over all the parts in the first candidate in the result object
        for (Part part : result.getCandidates().get(0).getContent().getParts()) {
            if (part instanceof ImagePart) {
                ImagePart imagePart = (ImagePart) part;
                // The returned image as a bitmap
                Bitmap generatedImageAsBitmap = imagePart.getImage();
                break;
            }
        }
    }
    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

ویرایش تصاویر (ورودی نوشتار و تصویر)

می‌توانید از مدل Gemini بخواهید تصاویر موجود را با ارائه نوشتار و یک یا چند تصویر در پیام‌واره‌تان ویرایش کند:

کاتلین

scope.launch {
    // Provide a text prompt instructing the model to edit the image
    val prompt = content {
        image(bitmap)
        text("Edit this image to make it look like a cartoon")
    }
    // To edit the image, call `generateContent` with the prompt (image and text input)
    val generatedImageAsBitmap: Bitmap? = model.generateContent(prompt)
        .candidates.first().content.parts.filterIsInstance<ImagePart>().firstOrNull()?.image
    // Handle the generated text and image
}

جاوا

// Provide an image for the model to edit
Bitmap bitmap = BitmapFactory.decodeResource(resources, R.drawable.scones);
// Provide a text prompt instructing the model to edit the image
Content promptcontent = new Content.Builder()
        .addImage(bitmap)
        .addText("Edit this image to make it look like a cartoon")
        .build();
// To edit the image, call `generateContent` with the prompt (image and text input)
ListenableFuture<GenerateContentResponse> response = model.generateContent(promptcontent);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        // iterate over all the parts in the first candidate in the result object
        for (Part part : result.getCandidates().get(0).getContent().getParts()) {
            if (part instanceof ImagePart) {
                ImagePart imagePart = (ImagePart) part;
                Bitmap generatedImageAsBitmap = imagePart.getImage();
                break;
            }
        }
    }
    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

تکرار و ویرایش کردن تصویرها ازطریق گپ چندنوبتی

برای رویکردی مکالمه‌ای در ویرایش تصویر، می‌توانید از گپ چند نوبتی استفاده کنید. این کار امکان می‌دهد درخواست‌های پیگیری برای اصلاح ویرایش‌ها بدون نیاز به ارسال مجدد تصویر اصلی انجام شود.

ابتدا گپی با startChat() شروع کنید و درصورت تمایل سابقه پیام را ارائه دهید. سپس، برای پیام‌های بعدی از sendMessage() استفاده کنید:

کاتلین

scope.launch {
    // Create the initial prompt instructing the model to edit the image
    val prompt = content {
        image(bitmap)
        text("Edit this image to make it look like a cartoon")
    }
    // Initialize the chat
    val chat = model.startChat()
    // To generate an initial response, send a user message with the image and text prompt
    var response = chat.sendMessage(prompt)
    // Inspect the returned image
    var generatedImageAsBitmap: Bitmap? = response
        .candidates.first().content.parts.filterIsInstance<ImagePart>().firstOrNull()?.image
    // Follow up requests do not need to specify the image again
    response = chat.sendMessage("But make it old-school line drawing style")
    generatedImageAsBitmap = response
        .candidates.first().content.parts.filterIsInstance<ImagePart>().firstOrNull()?.image
}

جاوا

// Provide an image for the model to edit
Bitmap bitmap = BitmapFactory.decodeResource(resources, R.drawable.scones);
// Initialize the chat
ChatFutures chat = model.startChat();
// Create the initial prompt instructing the model to edit the image
Content prompt = new Content.Builder()
        .setRole("user")
        .addImage(bitmap)
        .addText("Edit this image to make it look like a cartoon")
        .build();
// To generate an initial response, send a user message with the image and text prompt
ListenableFuture<GenerateContentResponse> response = chat.sendMessage(prompt);
// Extract the image from the initial response
ListenableFuture<Bitmap> initialRequest = Futures.transform(response,
        result -> {
            for (Part part : result.getCandidates().get(0).getContent().getParts()) {
                if (part instanceof ImagePart) {
                    ImagePart imagePart = (ImagePart) part;
                    return imagePart.getImage();
                }
            }
            return null;
        }, executor);
// Follow up requests do not need to specify the image again
ListenableFuture<GenerateContentResponse> modelResponseFuture = Futures.transformAsync(
        initialRequest,
        generatedImage -> {
            Content followUpPrompt = new Content.Builder()
                    .addText("But make it old-school line drawing style")
                    .build();
            return chat.sendMessage(followUpPrompt);
        }, executor);
// Add a final callback to check the reworked image
Futures.addCallback(modelResponseFuture, new FutureCallback<GenerateContentResponse>() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        for (Part part : result.getCandidates().get(0).getContent().getParts()) {
            if (part instanceof ImagePart) {
                ImagePart imagePart = (ImagePart) part;
                Bitmap generatedImageAsBitmap = imagePart.getImage();
                break;
            }
        }
    }
    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

ملاحظات و محدودیت‌ها

ملاحظات و محدودیت‌های زیر را درنظر داشته باشید:

  • قالب برونداد: تصاویر به‌عنوان PNG با حداکثر ابعاد ۱۰۲۴ پیکسل تولید می‌شوند.
  • انواع ورودی: این مدل از ورودی‌های صوتی یا ویدیویی برای تولید تصویر پشتیبانی نمی‌کند.
  • پشتیبانی از زبان: برای بهترین عملکرد، از زبان‌های زیر استفاده کنید: انگلیسی (en)، اسپانیایی مکزیکی (es-mx)، ژاپنی (ja-jp)، چینی ساده‌شده (zh-cn)، و هندی (hi-in).
  • مشکلات تولید:
    • تولید تصویر ممکن است همیشه راه‌اندازی نشود و گاهی اوقات منجر به برونداد فقط نوشتاری شود. سعی کنید صریحاً درخواست برونداد تصویر کنید (برای مثال، «تصویری تولید کن»، «هم‌زمان با پیش رفتن، تصویر ارائه کن»، «تصویر را به‌روز کن»).
    • این مدل ممکن است تولید را در نیمه راه متوقف کند. دوباره امتحان کنید یا پیام‌واره دیگری را امتحان کنید.
    • این مدل ممکن است نوشتار را به‌صورت تصویر تولید کند. به‌طور صریح درخواست برونداد نوشتاری کنید (برای مثال، «نوشتار روایی همراه با تصویرسازی تولید کن»).

برای جزئیات بیشتر، مستندات Firebase را ببینید.

مراحل بعدی

پس‌از راه‌اندازی برنامه‌تان، مراحل بعدی زیر را درنظر بگیرید: