إشعار المختبِرين بشأن الإصدارات الجديدة

تسمح لك حِزم تطوير البرامج (SDK) الاختيارية لميزة "توزيع التطبيقات من Firebase" لنظامي التشغيل iOS وAndroid بعرض إرسال تنبيهات داخل التطبيق إلى المختبِرين عند توفُّر إصدارات جديدة من تطبيقك التثبيت. يوضّح هذا الدليل كيفية استخدام حزم تطوير البرامج (SDK) لنظامي التشغيل iOS وAndroid لتوزيع التطبيقات. لإنشاء تنبيهات إصدار جديد وتخصيصها للمختبِرين.

قبل البدء

أضِف Firebase إلى مشروع Android إذا لم يسبق لك إجراء ذلك.

الخطوة 1: تفعيل واجهة برمجة التطبيقات App Distribution Tester API

  1. اختَر مشروعك في وحدة تحكُّم Google Cloud

  2. ضمن Firebase App Testers API، انقر على تفعيل.

الخطوة 2: إضافة App Distribution إلى تطبيقك

تتألف حزمة تطوير برامج Android لتوزيع التطبيقات من مكتبتَين:

  • firebase-appdistribution-api - مكتبة واجهة برمجة التطبيقات فقط، التي يمكنك تضمينها في جميع إصدارات الإصدارات.
  • firebase-appdistribution: تنفيذ حزمة تطوير البرامج (SDK) بالكامل (اختياري)

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

يُرجى توضيح التبعية لحزمة تطوير البرامج (SDK) الخاصة بميزة "توزيع التطبيقات" في Android في الوحدة (على مستوى التطبيق) ملف Gradle (عادةً <project>/<app-module>/build.gradle.kts أو <project>/<app-module>/build.gradle). لتجنب تضمين حزمة SDK الكاملة بوظيفة التحديث الذاتي للتطبيق في إصدارات Play. إضافة تبعية مكتبة واجهة برمجة التطبيقات فقط إلى جميع إنشاء الصيغ يجب عدم إضافة عملية تنفيذ حزمة تطوير البرامج (SDK) الكاملة إلى خيارات المنتج المخصّصة حصريًا لاختبار الإصدار التجريبي.

dependencies {
    // ADD the API-only library to all variants
    implementation("com.google.firebase:firebase-appdistribution-api:16.0.0-beta13")

    // ADD the full SDK implementation to the "beta" variant only (example)
    betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta13")
}

هل تبحث عن وحدة مكتبة خاصة بلغة Kotlin؟ بدءًا من إصدار تشرين الأول (أكتوبر) 2023، يمكن أن يعتمد كل من مطوري Kotlin وJava على وحدة المكتبة الرئيسية (للحصول على التفاصيل، راجع الأسئلة الشائعة حول هذه المبادرة).

الخطوة 3: ضبط التنبيهات داخل التطبيق

توفِّر حزمة تطوير البرامج (SDK) لنظام التشغيل Android لميزة "توزيع التطبيقات" الطرق التالية من أجل الإعداد: تنبيهات الإصدارات داخل التطبيق للمختبِرين:

  • يشير هذا المصطلح إلى إعدادات أساسية للتنبيه تتضمّن تحديثًا مُعدًّا مسبقًا للتطبيق. ومربّعات حوار تسجيل الدخول لعرضها للمختبِرين
  • إعداد تنبيه متقدم يسمح لك بتخصيص المستخدم من واجهة pyplot.

إذا كنت تستخدم حزمة تطوير البرامج (SDK) الخاصة بنظام التشغيل Android لميزة "توزيع التطبيقات" للمرة الأولى، ننصحك باستخدام الإعداد الأساسي.

الإعداد الأساسي

استخدام updateIfNewReleaseAvailable لعرض تنبيهات تفعيل مسبقة الإعداد إلى المختبرين الذين لم يفعّلوا التنبيهات بعد، ثم تحقق مما إذا كانت إنشائه. عند استدعائها، تؤدي الطريقة التسلسل التالي:

  1. يتحقّق مما إذا كان المختبِر قد فعّل التنبيهات. في حال لم يفعّل المختبِر بعد تطلب الطريقة من المُختبِر تسجيل الدخول إلى App Distribution باستخدام حساباتهم على Google.

  2. يتم البحث عن الإصدارات المتاحة حديثًا ليثبّتها المختبِر.

  3. يتم عرض تنبيه مُعد مسبقًا يطلب من المختبِر التحديث.

  4. إذا كان الإصدار الجديد هو تنسيق "مجموعة حزمات تطبيق Android" (AAB)، تتم إعادة توجيه المختبِر إلى Google Play لإكمال عملية التحديث

    إذا كان الإصدار الجديد هو تطبيق Android PacKage (APK)، فإن حزمة SDK ينزِّل الإصدار الجديد في الخلفية وسيطلب من المختبِر تثبيته عند اكتمال التنزيل. ترسل حزمة تطوير البرامج (SDK) إشعارات بشأن تقدّم عملية التنزيل. للمستخدم باستخدام NotificationManager. يمكنك أيضًا إضافة مستوى تقدُّمك الخاص من خلال إرفاق معالِج onProgressUpdate بـ updateIfNewReleaseAvailable مهمة.

يمكنك الاتصال بـ updateIfNewReleaseAvailable في أي وقت داخل التطبيق. بالنسبة على سبيل المثال، يمكنك الاتصال بـ updateIfNewReleaseAvailable خلال onResume للنشاط الرئيسي للتطبيق.

يتحقق المثال التالي مما إذا كان المختبِر قد فعّل التنبيهات إمكانية الوصول إلى إصدار جديد. في حال استيفاء هذه الشروط، سيتم عرض مربّع حوار عندما يكون الإصدار متاحًا للتثبيت:

Kotlin+KTX

// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
val firebaseAppDistribution = FirebaseAppDistribution.getInstance()
firebaseAppDistribution.updateIfNewReleaseAvailable()
    .addOnProgressListener { updateProgress ->
      // (Optional) Implement custom progress updates in addition to
      // automatic NotificationManager updates.
    }
    .addOnFailureListener { e ->
      // (Optional) Handle errors.
      if (e is FirebaseAppDistributionException) {
        when (e.errorCode) {
          Status.NOT_IMPLEMENTED -> {
            // SDK did nothing. This is expected when building for Play.
          }
          else -> {
            // Handle other errors.
          }
        }
      }
    }

Java

// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
FirebaseAppDistribution firebaseAppDistribution = FirebaseAppDistribution.getInstance();
firebaseAppDistribution.updateIfNewReleaseAvailable()
    .addOnProgressListener(updateProgress -> {
      // (Optional) Implement custom progress updates in addition to
      // automatic NotificationManager updates.
    })
    .addOnFailureListener(e -> {
      // (Optional) Handle errors.
      if (e instanceof FirebaseAppDistributionException) {
        switch (((FirebaseAppDistributionException)e).getErrorCode()) {
          case NOT_IMPLEMENTED:
            // SDK did nothing. This is expected when building for Play.
            break;
          default:
            // Handle other errors.
            break;
        }
      }
    });

التهيئة المتقدمة

الإعدادات المتقدّمة لتسجيل الدخول

تمنحك الطريقتان signInTester وisTesterSignedIn مزيدًا من المرونة تخصيص تجربة تسجيل الدخول للمختبِرين لتتناسب بشكل أفضل مع شكل تطبيقك ومضمونه

يتحقّق المثال التالي مما إذا سبق للمختبِر تسجيل الدخول إلى حسابه حساب مختبِر توزيع التطبيقات يتيح لك هذا اختيار عرض تسجيل الدخول إلى واجهة المستخدم فقط للمختبِرين الذين لم يسجّلوا الدخول بعد. بعد سجّل المختبِر الدخول، يمكنك بعد ذلك الاتصال بـ updateIfNewReleaseAvailable للتحقق ما إذا كان يمكن للمختبِر الوصول إلى إصدار جديد أم لا.

Kotlin+KTX

// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn) {
    // Start your sign-in UI here.
}

// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn) {
    firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener {
        // Handle failed update.
    }
}

Java

// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn()) {
    // Start your sign-in UI here.
}

// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn()) {
    firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener( e -> {
        // Handle failed update.
    });
}

من واجهة مستخدم تسجيل الدخول، عندما يختار المختبِر المتابعة، يمكنك الاتصال بالرقم signInTester():

Kotlin+KTX

firebaseAppDistribution.signInTester().addOnSuccessListener {
  // Handle successful sign-in.
}.addOnFailureListener {
  // Handle failed sign-in.
});

Java

firebaseAppDistribution.signInTester().addOnSuccessListener( unused -> {
  // Handle successful sign-in.
}).addOnFailureListener(e -> {
  // Handle failed sign-in.
});

إعدادات التحديث المتقدّم

تمنحك الطريقتان checkForNewRelease وupdateApp مزيدًا من المرونة تخصيصها عندما يُطلب من المختبِر التحديث. يمكنك أيضًا تخصيص مربّع حوار مُعَدّ مسبقًا للتحديث ومؤشر تقدم التنزيل ليتمكّنوا من أن تتطابق مع شكل تطبيقك ومظهره

يُرجى العِلم أنّ updateApp لا يوفّر مؤشرًا حول مستوى تقدّم عملية التنزيل. يعني ذلك أنك بحاجة إلى تنفيذ مؤشر التقدم الخاص بك باستخدام NotificationManager، أو نوع من عرض الحالة داخل التطبيق، أو غير ذلك الخاص بك.

يتحقق المثال التالي مما إذا كان الإصدار الجديد متاحًا ثم تعرض واجهة مستخدم مخصصة. قبل الاتصال بـ checkForNewRelease وupdateApp، عليك التأكد من تسجيل دخول المختبِر باستخدام الإعدادات المتقدّمة لتسجيل الدخول

Kotlin+KTX

firebaseAppDistribution.checkForNewRelease().addOnSuccessListener { release ->
    if (release != null) {
        // New release available. Start your update UI here.
    }
}.addOnFailureListener {
    // Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
    // if built for Play.
}

Java

firebaseAppDistribution.checkForNewRelease().addOnSuccessListener(release -> {
    if (release != null) {
        // New release available. Start your update UI here.
    }
}).addOnFailureListener(e -> {
    // Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
    // if built for Play.
});

عندما يختار المختبِر متابعة التحديث من واجهة مستخدم التحديث، اتصل updateApp():

Kotlin+KTX

firebaseAppDistribution.updateApp()
    .addOnProgressListener { updateState ->
      // Use updateState to show update progress.
    }

Java

firebaseAppDistribution.updateApp()
    .addOnProgressListener(updateState -> {
      // Use updateState to show update progress.
    });

الخطوة 4: إنشاء عملية التنفيذ واختبارها

أنشئ تطبيقك واختبِر عملية التنفيذ من خلال في توزيع البنية إلى المختبِرين باستخدام "وحدة تحكُّم Firebase".

انتقل إلى دليل تحديد المشاكل وحلّها في ما يتعلّق بتوزيع التطبيقات للحصول على المساعدة بشأن المشاكل الشائعة، مثل:

  • المختبِر لا يتلقّى تنبيهات داخل التطبيق
  • يُطلب من المختبِر تسجيل الدخول إلى Google أكثر من مرة.