إنشاء تجارب مختلطة في تطبيقات Android باستخدام نماذج مستضافة على الجهاز ونماذج مستضافة على السحابة الإلكترونية


يمكنك إنشاء تطبيقات وميزات Android مستندة إلى الذكاء الاصطناعي مع استنتاج هجين باستخدام Firebase AI Logic. يتيح الاستنتاج المختلط تشغيل الاستنتاج باستخدام النماذج على الجهاز فقط عندما تكون متاحة، والرجوع بسلاسة إلى النماذج المستضافة على السحابة الإلكترونية في الحالات الأخرى (والعكس صحيح).

توضّح هذه الصفحة كيفية البدء في استخدام حزمة تطوير البرامج (SDK) الخاصة بالعميل، بالإضافة إلى عرض خيارات وإمكانات إعدادات إضافية.

يُرجى العِلم أنّ الاستدلال على الجهاز فقط من خلال "Firebase AI Logic" متاح لتطبيقات Android التي تستخدم الإصدار 17.10.0 أو إصدار أحدث من حزمة تطوير البرامج (SDK) لـ "Firebase AI Logic" (الإصدار 34.10.0 أو إصدار أحدث من "BoM") والتي تعمل على أجهزة معيّنة. وتخضع هذه الميزة لبنود "حزمة تعلّم الآلة"، بالإضافة إلى البنود الخاصة بجوانب الذكاء الاصطناعي التوليدي في "حزمة تعلّم الآلة".

حالات الاستخدام المقترَحة والإمكانات المتوافقة

حالات الاستخدام المقترَحة

  • يوفّر استخدام نموذج على الجهاز فقط للاستدلال ما يلي:

    • خصوصية محسّنة
    • السياق المحلي
    • الاستدلال بدون تكلفة
    • وظائف بلا إنترنت
  • يوفّر استخدام وظائف النهج المختلط ما يلي:

    • الوصول إلى المزيد من الجمهور من خلال توفير النموذج على الجهاز فقط والسماح بالاتصال بالإنترنت

الإمكانات والميزات المتوافقة للاستنتاج على الجهاز فقط

لا تتيح الاستنتاجات على الجهاز فقط سوى إنشاء النصوص في محادثة واحدة (وليس في محادثة متواصلة)، مع إمكانية بث المحتوى أو عدم بثه. وهو يتيح إمكانات إنشاء النصوص التالية:

احرص على مراجعة قائمة الميزات غير المتاحة بعد للاستنتاج على الجهاز فقط في أسفل هذه الصفحة.

قبل البدء

يُرجى وضع الملاحظات التالية في الاعتبار:

أجهزة Android المتوافقة ونماذجها على الجهاز فقط

بالنسبة إلى الاستدلال على الجهاز فقط (الذي يستخدم Prompt API من حزمة تعلّم الآلة)، يمكنك الاطّلاع على قائمة الأجهزة المتوافقة ونماذجها على الجهاز فقط في مستندات حزمة تعلّم الآلة.

البدء

توضّح خطوات البدء هذه الإعدادات العامة المطلوبة لأي طلب موجَّه تريد إرساله.

الخطوة 1: إعداد مشروع Firebase وربط تطبيقك بـ Firebase

  1. سجِّل الدخول إلى وحدة تحكّم Firebase، ثم اختَر مشروعك على Firebase.

  2. في وحدة تحكّم Firebase، انتقِل إلى خدمات الذكاء الاصطناعي > منطق الذكاء الاصطناعي.

  3. انقر على البدء لإطلاق سير عمل موجَّه يساعدك في إعداد واجهات برمجة التطبيقات المطلوبة والموارد لمشروعك.

  4. اتّبِع التعليمات الظاهرة على الشاشة لتسجيل تطبيقك وإضافة إعدادات Firebase إليه، إذا طُلب منك ذلك.

  5. عندما يُطلب منك اختيار "مقدّم خدمة Gemini API"، ننصحك باختيار Gemini Developer API، الذي يتيح لك البدء بسرعة بدون أي تكلفة.

    في أي وقت لاحق، يمكنك إعداد Agent Platform Gemini API (formerly Vertex AI) (ومتطلباته المتعلقة بالفوترة).

  6. تابِع في سير العمل لإعداد واجهات برمجة التطبيقات والخدمات المرتبطة المطلوبة لتطبيق Firebase AI Logic.

    اعتبارًا من أوائل يوليو 2026، ستفرض هذه المرحلة من سير العمل تلقائيًا استخدام Firebase App Check في AI Logic، وهي خدمة مهمة للمساعدة في حماية Gemini API عند الوصول إليها مباشرةً من تطبيقك. كجزء من عملية البدء (راجِع الخطوات لاحقًا في هذا الدليل)، عليك ضبط App Check مقدّم خدمة تصحيح الأخطاء للتطوير المحلي عند فرض استخدام App Check.

  7. انتقِل إلى الخطوة التالية في هذا الدليل لإضافة حزم تطوير البرامج (SDK) المطلوبة إلى تطبيقك.

الخطوة 2: إضافة حِزم تطوير البرامج (SDK) المطلوبة

تتيح حزمة تطوير البرامج (SDK) لـ Firebase AI Logic على Android (firebase-ai) بالإضافة إلى حزمة تطوير البرامج (SDK) لـ Firebase AI Logic On-Device (firebase-ai-ondevice) الوصول إلى واجهات برمجة التطبيقات للتفاعل مع النماذج التوليدية.

في ملف Gradle للوحدة (على مستوى التطبيق) (مثل <project>/<app-module>/build.gradle.kts)، أضِف التبعيات لمكتبتَي Firebase AI Logic وApp Check لنظام التشغيل Android:

Kotlin

dependencies {
  // ... other androidx dependencies

  // Add the dependencies for the Firebase AI Logic and App Check libraries
  // Note that the on-device SDK is not yet included in the Firebase Android BoM
  implementation("com.google.firebase:firebase-ai:18.0.0")
  implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta06")
  implementation("com.google.firebase:firebase-appcheck-debug:20.0.0")
}

Java

بالنسبة إلى Java، عليك إضافة مكتبتَين إضافيتَين.

dependencies {
  // ... other androidx dependencies

  // Add the dependencies for the Firebase AI Logic and App Check libraries
  // Note that the on-device SDK is not yet included in the Firebase Android BoM
  implementation("com.google.firebase:firebase-ai:18.0.0")
  implementation("com.google.firebase:firebase-ai-ondevice:16.0.0-beta06")
  implementation("com.google.firebase:firebase-appcheck-debug:20.0.0")

  // 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")
}

الخطوة 3: ضبط مقدّم خدمة تصحيح الأخطاء App Check لتطوير التطبيق على الجهاز المحلي

اعتبارًا من أوائل يوليو 2026، سيتم فرض Firebase App Check تلقائيًا لحماية Gemini API كجزء من عملية الإعداد الموجَّهة لـ AI Logic في وحدة التحكّم. للتطوير على الجهاز، عليك ضبط App Check مقدّم خدمة تصحيح الأخطاء لتجاوز عملية التحقّق مع مواصلة فرض إجراءات App Check.

  1. في الإصدار المخصّص لتصحيح الأخطاء، اضبط App Check لاستخدام مصنع مقدّم خدمة تصحيح الأخطاء:

    Kotlin

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

    Java

    FirebaseApp.initializeApp(/*context=*/ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance());
    
  2. احصل على رمز تصحيح الأخطاء:

    1. شغِّل تطبيقك في المحاكي أو على جهازك الاختباري.

    2. ابحث عن الرمز المميّز لتصحيح الأخطاء App Check في سجلّاتك. على سبيل المثال:

      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 الرسمية.

الخطوة 4: التحقّق من توفّر النموذج على الجهاز فقط

باستخدام FirebaseAIOnDevice، تحقَّق مما إذا كان النموذج المتوفّر على الجهاز متاحًا، ونزِّله إذا لم يكن متاحًا.

بعد تنزيل النموذج، ستحافظ ميزة AICore على تحديثه تلقائيًا. يمكنك الاطّلاع على الملاحظات بعد المقتطف لمزيد من التفاصيل حول AICore وإدارة تنزيل النموذج على الجهاز.

Kotlin

val status = FirebaseAIOnDevice.checkStatus()
when (status) {
  OnDeviceModelStatus.UNAVAILABLE -> {
    Log.w(TAG, "On-device model is unavailable")
  }

  OnDeviceModelStatus.DOWNLOADABLE -> {
    FirebaseAIOnDevice.download().collect { status ->
      when (status) {
        is DownloadStatus.DownloadStarted ->
          Log.w(TAG, "Starting download - ${status.bytesToDownload}")

        is DownloadStatus.DownloadInProgress ->
          Log.w(TAG, "Download in progress ${status.totalBytesDownloaded} bytes downloaded")

        is DownloadStatus.DownloadCompleted ->
          Log.w(TAG, "On-device model download complete")

        is DownloadStatus.DownloadFailed ->
          Log.e(TAG, "Download failed ${status}")
      }
    }
  }
  OnDeviceModelStatus.DOWNLOADING -> {
    Log.w(TAG, "On-device model is being downloaded")
  }

  OnDeviceModelStatus.AVAILABLE -> {
    Log.w(TAG, "On-device model is available")
  }
}

Java

Checking for, downloading, and warming up the model is not yet available for Java.

However, all other APIs and interactions in this guide are available for Java.

يُرجى ملاحظة ما يلي بشأن تنزيل النموذج على الجهاز فقط:

  • يعتمد الوقت المستغرَق لتنزيل النموذج على الجهاز فقط على عدة عوامل، بما في ذلك شبكتك.

  • إذا كان الرمز البرمجي يستخدم نموذجًا على الجهاز فقط لإجراء الاستدلال الأساسي أو الاحتياطي، احرص على تنزيل النموذج في وقت مبكر من مراحل نشاط تطبيقك لكي يكون النموذج متاحًا على الجهاز فقط قبل أن يصادف المستخدمون النهائيون الرمز البرمجي في تطبيقك.

  • إذا كان النموذج على الجهاز فقط غير متاح عند تقديم طلب استنتاج على الجهاز فقط، لن تبدأ حزمة تطوير البرامج (SDK) تلقائيًا في تنزيل النموذج على الجهاز فقط. ستعود حزمة SDK إلى النموذج المستضاف على السحابة الإلكترونية أو ستُظهر استثناءً (يمكنك الاطّلاع على تفاصيل حول سلوك أوضاع الاستنتاج).

  • تتولّى AICore (إحدى خدمات نظام Android) إدارة النموذج والإصدار اللذين يتم تنزيلهما، والحفاظ على تحديث النموذج، وما إلى ذلك. يُرجى العِلم أنّه سيتم تنزيل نموذج واحد فقط على الجهاز، لذا إذا كان تطبيق آخر على الجهاز قد نزّل النموذج المتوفّر على الجهاز فقط بنجاح من قبل، سيُظهر هذا الإجراء أنّ النموذج متاح.

تحسين وقت الاستجابة

لتحسين أداء أول طلب استنتاج، يمكنك أن يطلب تطبيقك onDeviceExtension?.warmUp() (متاح حاليًا للغة Kotlin فقط). يؤدي ذلك إلى تحميل النموذج على الجهاز فقط في الذاكرة وتهيئة مكوّنات وقت التشغيل.

الخطوة 5: إعداد الخدمة وإنشاء نسخة من النموذج

انقر على مزوّد خدمة Gemini API لعرض المحتوى والرمز البرمجي الخاصَّين بالمزوّد على هذه الصفحة.

يجب إعداد ما يلي قبل إرسال طلب إلى النموذج.

  1. ابدأ الخدمة لمقدّم واجهة برمجة التطبيقات الذي اخترته.

  2. أنشئ مثيل GenerativeModel، واضبط mode على أحد الخيارات التالية. الأوصاف هنا عامة جدًا، ولكن يمكنك الاطّلاع على تفاصيل حول سلوك هذه الأوضاع في ضبط وضع الاستنتاج.

    • ‫PREFER_ON_DEVICE: محاولة استخدام النموذج على الجهاز فقط، وإلا الرجوع إلى النموذج المستضاف على السحابة الإلكترونية

    • ONLY_ON_DEVICE: محاولة استخدام النموذج المتوفّر على الجهاز فقط، وإلا يتم طرح استثناء.

    • ‫PREFER_IN_CLOUD: محاولة استخدام النموذج المستضاف على السحابة الإلكترونية، وإلا يتم الرجوع إلى النموذج المتوفّر على الجهاز.

    • ONLY_IN_CLOUD: محاولة استخدام النموذج المستضاف على السحابة الإلكترونية، وإلا يتم طرح استثناء.

Kotlin

// Using this SDK to access on-device inference is an Experimental release and requires opt-in
@OptIn(PublicPreviewAPI::class)

// ...

// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "CLOUD_MODEL_NAME",
        onDeviceConfig = OnDeviceConfig(mode = InferenceMode.PREFER_ON_DEVICE)
    )

Java

// Initialize the Gemini Developer API backend service
// Create a GenerativeModel instance with a model that supports your use case
// Set the inference mode (like PREFER_ON_DEVICE to use the on-device model if available)
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
    .generativeModel(
        "CLOUD_MODEL_NAME",
        new OnDeviceConfig(InferenceMode.PREFER_ON_DEVICE)
    );

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

الخطوة 6: إرسال طلب إلى نموذج

يوضّح لك هذا القسم كيفية إرسال أنواع مختلفة من الإدخالات لإنشاء أنواع مختلفة من المخرجات، بما في ذلك:

إنشاء نصّ من إنشاء الذكاء الاصطناعي من إدخال نصي فقط

قبل تجربة هذا النموذج، تأكَّد من إكمال قسم البدء في هذا الدليل.

يمكنك استخدام generateContent() لإنشاء نصّ من إنشاء الذكاء الاصطناعي من طلب يتضمّن نصًا:

Kotlin

// Imports + initialization of Gemini API backend service + creation of model instance

// Provide a prompt that contains text
val prompt = "Write a story about a magic backpack."

// To generate text output, call generateContent with the text input
val response = model.generateContent(prompt)
print(response.text)

Java

// Imports + initialization of Gemini API backend service + creation of model instance

// Provide a prompt that contains text
Content prompt = new Content.Builder()
    .addText("Write a story about a magic backpack.")
    .build();

// To generate text output, call generateContent with the text input
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);

يُرجى العِلم أنّ Firebase AI Logic يتيح أيضًا بث الردود النصية باستخدام generateContentStream (بدلاً من generateContent).

إنشاء نصّ من إنشاء الذكاء الاصطناعي من إدخال نص وصورة (متعدد الوسائط)

قبل تجربة هذا النموذج، تأكَّد من إكمال قسم البدء في هذا الدليل.

يمكنك استخدام generateContent() لإنشاء نصّ من إنشاء الذكاء الاصطناعي من طلب يحتوي على نص وملف صورة واحد كحد أقصى (صورة نقطية فقط)، وذلك من خلال تقديم mimeType لكل ملف إدخال والملف نفسه.

Kotlin

// Imports + initialization of Gemini API backend service + creation of model instance

// Loads an image from the app/res/drawable/ directory
val bitmap: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky)

// Provide a prompt that includes the image specified above and text
val prompt = content {
  image(bitmap)
  text("What developer tool is this mascot from?")
}

// To generate text output, call generateContent with the prompt
val response = model.generateContent(prompt)
print(response.text)

Java

// Imports + initialization of Gemini API backend service + creation of model instance

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);

// Provide a prompt that includes the image specified above and text
Content content = new Content.Builder()
        .addImage(bitmap)
        .addText("What developer tool is this mascot from?")
        .build();

// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
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);

يُرجى العِلم أنّ Firebase AI Logic يتيح أيضًا بث الردود النصية باستخدام generateContentStream (بدلاً من generateContent).

ما هي المهام الأخرى التي يمكن لمساعد Google تنفيذها؟

يمكنك استخدام خيارات وإمكانات إضافية مختلفة لتجاربك المختلطة، وهي:

الميزات غير المتوفّرة بعد للاستدلال على الجهاز فقط

بما أنّها إصدار تجريبي، لا تتوفّر جميع إمكانات النماذج المستندة إلى السحابة الإلكترونية للاستدلال على الجهاز فقط. الميزات التالية غير متاحة بعد للاستدلال على الجهاز فقط (ولكنّها متاحة عادةً للاستدلال المستند إلى السحابة الإلكترونية).

  • جارٍ إنشاء الصور

    • يمكن الرجوع إلى النموذج المستضاف على السحابة الإلكترونية، ولكن سيؤدي وضع ONLY_ON_DEVICE إلى ظهور استثناء.
  • إنشاء نص من أنواع ملفات الصور المدخلة غير Bitmap (صورة تم تحميلها في الذاكرة)

    • يمكن الرجوع إلى النموذج المستضاف على السحابة الإلكترونية، ولكن سيؤدي استخدام وضع ONLY_ON_DEVICE إلى حدوث خطأ.
  • إنشاء نصّ من إنشاء الذكاء الاصطناعي من ملف إدخال يحتوي على صور فقط بالنسبة إلى الاستدلال على الجهاز فقط، يجب تقديم نص كجزء من الطلب المتعدد الوسائط.

    • يمكن الرجوع إلى النموذج المستضاف على السحابة الإلكترونية، ولكن سيؤدي وضع ONLY_ON_DEVICE إلى ظهور استثناء.
  • إنشاء نصّ من إنشاء الذكاء الاصطناعي من أكثر من ملف صورة واحد

    • يمكن الرجوع إلى النموذج المستضاف على السحابة الإلكترونية، ولكن سيؤدي وضع ONLY_ON_DEVICE إلى ظهور استثناء.
  • إنشاء نص من ملفات صوتية وفيديوهات ومستندات (مثل ملفات PDF)

    • يمكن الرجوع إلى النموذج المستضاف على السحابة الإلكترونية، ولكن سيؤدي استخدام وضع ONLY_ON_DEVICE إلى حدوث خطأ.
  • توفير الملفات باستخدام عناوين URL في الطلبات المتعددة الوسائط للاستدلال على الجهاز فقط، يجب تقديم صورة واحدة بتنسيق Bitmap.

    • إذا قدّمت عنوان URL لملف باستخدام fileData (FileDataPart)، يمكن أن يعود إلى النموذج المستضاف على السحابة الإلكترونية (سيؤدي وضع ONLY_ON_DEVICE إلى ظهور استثناء).
    • إذا ضمّنت عنوان URL مباشرةً في طلب نصي، لن يتم تلقائيًا الرجوع إلى النموذج المستضاف على السحابة الإلكترونية (يتم تجاهل عناوين URL المضمّنة من قِبل النموذج على الجهاز فقط).
  • إرسال طلبات تتجاوز 4,000 رمز مميّز (أو ما يقرب من 3,000 كلمة باللغة الإنجليزية)

    • يمكن الرجوع إلى النموذج المستضاف على السحابة الإلكترونية، ولكن سيؤدي وضع ONLY_ON_DEVICE إلى ظهور استثناء.
  • محادثة مترابطة

    • لا يعود تلقائيًا إلى النموذج المستضاف على السحابة الإلكترونية (يجمع الاستنتاج على الجهاز فقط سجلّ الطلبات في طلب نصي واحد، وبما أنّ النموذج على الجهاز فقط لا يميّز بين الأدوار ويرى السجلّ كرسالة واحدة، لن يكون دقيقًا مثل النموذج المستضاف على السحابة الإلكترونية).
    • إذا أردت استخدام ميزة المحادثات المتعددة الأدوار، ننصحك باستخدام وضع ONLY_IN_CLOUD.
  • تزويد النموذج بأدوات لمساعدته في إنشاء ردوده (مثل استدعاء الدوال، وتنفيذ الرموز البرمجية، وسياق عناوين URL، والتحقّق من المصادر باستخدام Google Search، والتحقّق من المصادر باستخدام Google Maps)

    • لا يتم الرجوع تلقائيًا إلى النموذج المستضاف على السحابة الإلكترونية. إذا أردت استخدام أدوات، ننصحك باستخدام الوضع ONLY_IN_CLOUD.

لا تعرض ميزة تتبُّع استخدام الذكاء الاصطناعي في وحدة تحكّم Firebase أي بيانات حول الاستدلال على الجهاز فقط (بما في ذلك سجلّات الجهاز). ومع ذلك، يمكن مراقبة أي استنتاج يستخدم نموذجًا مستضافًا على السحابة الإلكترونية تمامًا مثل الاستنتاجات الأخرى من خلال Firebase AI Logic.

قيود إضافية

بالإضافة إلى ما سبق، فإنّ الاستدلال على الجهاز فقط له القيود التالية (مزيد من المعلومات في مستندات حزمة تعلّم الآلة):

  • يجب أن يستخدم المستخدم النهائي لتطبيقك جهازًا متوافقًا لإجراء الاستدلال على الجهاز فقط.

  • لا يمكن لتطبيقك تشغيل الاستدلال على الجهاز إلا عندما يكون في المقدّمة.

  • تم التحقّق من صحة اللغتين الإنجليزية والكورية فقط للاستدلال على الجهاز فقط.

  • الحد الأقصى لعدد الرموز المميّزة المسموح بها لطلب الاستنتاج على الجهاز فقط بالكامل هو 4,000 رمز مميّز. إذا كان من المحتمل أن تتجاوز طلباتك هذا الحدّ، تأكَّد من ضبط وضع استنتاج يمكنه استخدام نموذج مستضاف على السحابة الإلكترونية.

  • ننصحك بتجنُّب حالات استخدام الاستنتاج على الجهاز فقط التي تتطلّب مخرجات طويلة (أكثر من 256 رمزًا مميزًا).

  • تفرض AICore (وهي خدمة تابعة لنظام التشغيل Android تدير النماذج على الجهاز فقط) حصة استدلال لكل تطبيق. وسيؤدي تقديم عدد كبير جدًا من طلبات البيانات من واجهة برمجة التطبيقات خلال فترة قصيرة إلى ظهور الرد ErrorCode.BUSY. إذا ظهر لك هذا الخطأ، ننصحك باستخدام خوارزمية الرقود الأسي الثنائي لإعادة محاولة إرسال الطلب. ويمكن أيضًا عرض ErrorCode.PER_APP_BATTERY_USE_QUOTA_EXCEEDED إذا تجاوز أحد التطبيقات حصة طويلة المدة (مثل الحصة اليومية).


تقديم ملاحظات حول تجربتك مع "Firebase AI Logic"