يمكنك دمج App Distribution في عملية إنشاء تطبيق Android باستخدام المكوّن الإضافي App Distribution لنظام Gradle. يتيح لك المكوّن الإضافي تحديد المختبِرين وملاحظات الإصدار في ملف Gradle الخاص بتطبيقك، ما يتيح لك ضبط عمليات التوزيع لأنواع الإصدارات المختلفة من تطبيقك.
يوضّح هذا الدليل كيفية توزيع حِزم APK على المختبِرين باستخدام المكوّن الإضافي App Distribution Gradle.
قبل البدء
أضِف Firebase إلى مشروع Android الخاص بك، في حال لم يسبق لك إجراء ذلك.
إذا لم تكن تستخدم أي منتجات أخرى من Firebase، ما عليك سوى إنشاء مشروع وتسجيل تطبيقك. ومع ذلك، إذا قررت استخدام منتجات إضافية في المستقبل، تأكَّد من إكمال جميع الخطوات الواردة في الصفحة المرتبطة أعلاه.
افتح صفحة App Distribution في وحدة تحكّم Firebase. اختَر مشروع Firebase عندما يُطلب منك ذلك، ثم اختَر تطبيقك باستخدام أداة التبديل بين التطبيقات، وانقر على البدء.
الخطوة 1: إعداد مشروع Android
في ملف Gradle على مستوى الجذر (على مستوى المشروع) (
<project>/build.gradle.ktsأو<project>/build.gradle)، أضِف المكوّن الإضافي App Distribution لنظام Gradle كأحد التبعيات:Kotlin
plugins { // ... id("com.android.application") version "7.3.0" apply false // Make sure that you have the Google services Gradle plugin dependency id("com.google.gms.google-services") version "4.5.0" apply false // Add the dependency for the App Distribution Gradle plugin id("com.google.firebase.appdistribution") version "5.3.0" apply false }
Groovy
plugins { // ... id 'com.android.application' version '7.3.0' apply false // Make sure that you have the Google services Gradle plugin dependency id 'com.google.gms.google-services' version '4.5.0' apply false // Add the dependency for the App Distribution Gradle plugin id 'com.google.firebase.appdistribution' version '5.3.0' apply false }
في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً
<project>/<app-module>/build.gradle.ktsأو<project>/<app-module>/build.gradle)، أضِف المكوّن الإضافي App Distribution لنظام Gradle:Kotlin
plugins { id("com.android.application") // Make sure that you have the Google services Gradle plugin id("com.google.gms.google-services") // Add the App Distribution Gradle plugin id("com.google.firebase.appdistribution") }
Groovy
plugins { id 'com.android.application' // Make sure that you have the Google services Gradle plugin id 'com.google.gms.google-services' // Add the App Distribution Gradle plugin id 'com.google.firebase.appdistribution' }
إذا كنت تستخدم خادمًا وكيلاً أو جدار حماية تابعًا لشركة، أضِف سمة نظام Java التالية التي تتيح لـ App Distribution تحميل إصداراتك إلى Firebase:
-Djavax.net.ssl.trustStore=/path/to/truststore -Djavax.net.ssl.trustStorePassword=password
الخطوة 2: المصادقة باستخدام Firebase
قبل استخدام مكوّن Gradle الإضافي، عليك أولاً المصادقة باستخدام مشروعك على Firebase بإحدى الطرق التالية. يبحث المكوّن الإضافي Gradle تلقائيًا عن بيانات الاعتماد من واجهة سطر الأوامر في Firebase في حال عدم استخدام أي طريقة مصادقة أخرى.
الخطوة 3: ضبط خصائص التوزيع
في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً
<project>/<app-module>/build.gradle.kts أو
<project>/<app-module>/build.gradle)، اضبط App Distribution من خلال إضافة
قسم firebaseAppDistribution واحد على الأقل.
على سبيل المثال، لتوزيع إصدار release على المختبِرين، اتّبِع التعليمات التالية:
Kotlin
import com.google.firebase.appdistribution.gradle.firebaseAppDistribution android { // ... buildTypes { getByName("release") { firebaseAppDistribution { artifactType = "APK" releaseNotesFile = "/path/to/releasenotes.txt" testers = "ali@example.com, bri@example.com, cal@example.com" } } } // ... }
Groovy
android { // ... buildTypes { release { firebaseAppDistribution { artifactType="APK" releaseNotesFile="/path/to/releasenotes.txt" testers="ali@example.com, bri@example.com, cal@example.com" } } } // ... }
يمكنك ضبط App Distribution لأنواع الإصدارات وصيغ المنتجات.
على سبيل المثال، لتوزيع إصدارات debug وrelease في نكهات المنتج "demo" و "full"، اتّبِع التعليمات التالية:
Kotlin
import com.google.firebase.appdistribution.gradle.firebaseAppDistribution android { // ... buildTypes { getByName("debug") {...} getByName("release") {...} } flavorDimensions += "version" productFlavors { create("demo") { dimension = "version" firebaseAppDistribution { releaseNotes = "Release notes for demo version" testers = "demo@testers.com" } } create("full") { dimension = "version" firebaseAppDistribution { releaseNotes = "Release notes for full version" testers = "full@testers.com" } } } // ... }
Groovy
android { // ... buildTypes { debug {...} release {...} } flavorDimensions "version" productFlavors { demo { dimension "version" firebaseAppDistribution { releaseNotes="Release notes for demo version" testers="demo@testers.com" } } full { dimension "version" firebaseAppDistribution { releaseNotes="Release notes for full version" testers="full@testers.com" } } } // ... }
استخدِم المَعلمات التالية لضبط التوزيع:
| App Distribution مَعلمات الإصدار | |
|---|---|
appId
|
رقم تعريف تطبيق Firebase الخاص بتطبيقك مطلوب فقط إذا لم يكن لديك
المكوّن الإضافي Gradle لخدمات Google مثبّتًا. يمكنك العثور على رقم تعريف التطبيق في ملف appId="1:1234567890:android:321abc456def7890" |
serviceCredentialsFile
|
المسار إلى ملف JSON للمفتاح الخاص لحساب الخدمة. مطلوب فقط في حال استخدام مصادقة حساب الخدمة. |
artifactType
|
يحدّد نوع ملف تطبيقك. يمكن ضبطها على
|
artifactPath
|
المسار المطلق لملف APK أو AAB الذي تريد تحميله |
releaseNotes أو releaseNotesFile |
ملاحظات الإصدار لهذا الإصدار يمكنك تحديد ملاحظات الإصدار مباشرةً أو مسار ملف نص عادي. |
testers أو testersFile |
عناوين البريد الإلكتروني للمختبِرين الذين تريد توزيع الإصدارات عليهم يمكنك تحديد المختبِرين كقائمة قيم مفصولة بفاصلة لعناوين البريد الإلكتروني: testers="ali@example.com, bri@example.com, cal@example.com" أو يمكنك تحديد المسار إلى ملف يحتوي على قائمة قيم مفصولة بفاصلة لعناوين البريد الإلكتروني: testersFile="/path/to/testers.txt" |
groups أو groupsFile |
مجموعات المختبِرين التي تريد توزيع الإصدارات عليها (راجِع
إدارة المختبِرين).
يتم تحديد المجموعات باستخدام يمكنك تحديد المجموعات كقائمة قيم مفصولة بفاصلة لأسماء المجموعات المستعارة: groups="qa-team, android-testers" أو يمكنك تحديد المسار إلى ملف يحتوي على قائمة قيم مفصولة بفاصلة لعناوين البريد الإلكتروني البديلة للمجموعة: groupsFile="/path/to/tester-groups.txt" |
testDevices أو testDevicesFile |
الأجهزة الاختبارية التي تريد إجراء اختبارات وكيل اختبار التطبيقات عليها يمكنك تحديد أجهزة الاختبار كقائمة مفصولة بفواصل منقوطة لمواصفات الأجهزة: testDevices="model=shiba,version=34,locale=en,orientation=portrait" أو يمكنك تحديد المسار إلى ملف يحتوي على قائمة بمواصفات الأجهزة مفصولة بفواصل منقوطة: testDevicesFile="/path/to/testDevices.txt" |
testUsername |
اسم المستخدم لتسجيل الدخول تلقائيًا أثناء اختبارات وكيل اختبار التطبيقات. |
testPassword أو testPasswordFile |
كلمة المرور لتسجيل الدخول تلقائيًا أثناء اختبارات وكيل اختبار التطبيقات. أو يمكنك تحديد المسار إلى ملف نص عادي يحتوي على كلمة مرور: testPasswordFile="/path/to/testPassword.txt" |
testUsernameResource |
اسم المورد لحقل اسم المستخدم لتسجيل الدخول تلقائيًا أثناء اختبارات وكيل اختبار التطبيقات. |
testPasswordResource |
اسم المورد لحقل كلمة المرور لتسجيل الدخول التلقائي الذي سيتم استخدامه أثناء اختبارات وكيل اختبار التطبيقات. |
testNonBlocking |
في حال ضبط هذا الخيار عند إجراء اختبارات وكيل اختبار التطبيقات، سيبدأ الأمر الاختبارات ثم يعود على الفور بدلاً من انتظار اكتمالها. للاطّلاع على نتائج الاختبار، يُرجى الانتقال إلى وحدة تحكُّم Firebase. إذا لم يتم ضبط هذه العلامة، سيتم حظر الأمر إلى أن تكتمل الاختبارات، وسيتم الخروج برمز تعذُّر في حال تعذُّر أي من الاختبارات. |
resultsBucket
|
حزمة Google Cloud Storage (GCS) مخصّصة يتم فيها تخزين نتائج الاختبارات. وفي حال ترك هذا الحقل فارغًا، يتم استخدام الحزمة التلقائية. يجب أن يكون المستودع مملوكًا لمشروع تم تفعيل الفوترة فيه، ويؤدي تحديد مستودع إلى فرض رسوم فوترة مقابل مساحة التخزين المستخدَمة. |
stacktrace
|
تتم طباعة تتبُّع تسلسل استدعاء الدوال البرمجية لاستثناءات المستخدمين. ويساعد ذلك في تحديد المشاكل وحلّها. |
الخطوة 4: توزيع تطبيقك على المختبِرين
أخيرًا، لتجميع تطبيقك التجريبي ودعوة المختبِرين، يمكنك إنشاء الهدفين
BUILD-VARIANTوappDistributionUploadBUILD-VARIANTباستخدام برنامج تضمين Gradle لمشروعك، حيث يمثّل BUILD-VARIANT نوع المنتج الاختياري ونوع الإصدار الذي ضبطته في الخطوة السابقة. لمزيد من المعلومات حول صيغ المنتج، يُرجى الاطّلاع على ضبط تنويعات التصميم.على سبيل المثال، لتوزيع تطبيقك باستخدام تنويعة التصميم
release، نفِّذ الأمر التالي:./gradlew assembleRelease appDistributionUploadRelease
أو إذا تمت المصادقة باستخدام حساب Google ولم تقدّم بيانات الاعتماد في ملف إصدار Gradle، يمكنك تضمين المتغيّر
FIREBASE_TOKEN:export FIREBASE_TOKEN=1/a1b2c3d4e5f67890 ./gradlew --stop // Only needed for environment variable changes ./gradlew assembleRelease appDistributionUploadRelease
يمكنك أيضًا إلغاء القيم المحدّدة في ملف
build.gradleمن خلال تمرير وسيطات سطر الأوامر في شكل--<property-name>=<property-value>. على سبيل المثال:لتحميل إصدار مخصص لتصحيح الأخطاء إلى App Distribution، اتّبِع الخطوات التالية:
./gradlew bundleDebug appDistributionUploadDebug --artifactType="APK"لدعوة مختبِرين إضافيين أو إزالة مختبِرين حاليين من مشروعك على Firebase، اتّبِع الخطوات التالية:
./gradlew appDistributionAddTesters --projectNumber=<project_number> --emails="anothertester@email.com, moretesters@email.com"./gradlew appDistributionRemoveTesters --projectNumber=<project_number> --emails="anothertester@email.com, moretesters@email.com"بعد إضافة مختبِر إلى مشروعك على Firebase، يمكنك إضافته إلى إصدارات فردية. لن يتمكّن المختبِرون الذين تتم إزالتهم من الوصول إلى الإصدارات في مشروعك، ولكن قد يظل بإمكانهم الوصول إلى إصداراتك لفترة زمنية محدّدة.
يمكنك أيضًا تحديد المختبِرين باستخدام
--file="/path/to/testers.txt"بدلاً من--emails.تقبل أيضًا مهمتا
appDistributionAddTestersوappDistributionRemoveTestersالوسيطات التالية:
projectNumber: رقم مشروعك على FirebaseserviceCredentialsFile: المسار إلى ملف بيانات اعتماد خدمة Google. هذه هي الوسيطة نفسها التي يستخدمها إجراء التحميل.
يُخرج المكوّن الإضافي لنظام Gradle الروابط التالية بعد تحميل الإصدار. تساعدك هذه الروابط في إدارة البرامج الثنائية والتأكّد من حصول المختبِرين والمطوّرين الآخرين على الإصدار الصحيح:
firebase_console_uri- رابط إلى وحدة تحكّم Firebase يعرض إصدارًا واحدًا يمكنك مشاركة هذا الرابط مع مطوّرين آخرين في مؤسستك.-
testing_uri: رابط يؤدي إلى الإصدار في تجربة المختبِر (تطبيق Android مدمج) يتيح للمختبِرين الاطّلاع على ملاحظات الإصدار وتثبيت التطبيق على أجهزتهم. ويجب أن يكون لدى المختبِر إذن الوصول إلى الإصدار ليتمكّن من استخدام الرابط. -
binary_download_uri: رابط موقَّع ينزّل الملف الثنائي للتطبيق (ملف APK أو AAB) ويثبّته مباشرةً تنتهي صلاحية الرابط بعد ساعة واحدة.
بعد توزيع الإصدار، يصبح متاحًا في لوحة بيانات App Distribution في وحدة تحكّم Firebase لمدة 150 يومًا (خمسة أشهر). عندما يتبقى 30 يومًا على انتهاء صلاحية الإصدار، يظهر إشعار بانتهاء الصلاحية في كل من وحدة التحكّم وقائمة الإصدارات الخاصة بالمختبِر على جهازه الاختباري.
يتلقّى المختبِرون الذين لم تتم دعوتهم لاختبار التطبيق دعوات عبر البريد الإلكتروني للبدء، ويتلقّى المختبِرون الحاليون إشعارات عبر البريد الإلكتروني تفيد بأنّ إصدارًا جديدًا جاهز للاختبار (يُرجى قراءة دليل إعداد المختبِر للحصول على تعليمات حول كيفية تثبيت التطبيق التجريبي). يمكنك مراقبة حالة كل مختبِر، سواء قَبِل الدعوة أم لا، وسواء نزّل التطبيق أم لا، في وحدة تحكّم Firebase.
أمام المختبِرين 30 يومًا لقبول دعوة اختبار التطبيق قبل انتهاء صلاحيتها. عندما يتبقّى 5 أيام على انتهاء صلاحية الدعوة، يظهر إشعار بانتهاء الصلاحية في وحدة تحكّم Firebase بجانب المختبِر في الإصدار. يمكن تجديد الدعوة من خلال إعادة إرسالها باستخدام القائمة المنسدلة في صف المختبِر.
الخطوات التالية
يمكنك تنفيذ الملاحظات داخل التطبيق لجمع الملاحظات من المختبِرين حول تطبيقك (بما في ذلك لقطات الشاشة).
تعرَّف على كيفية عرض تنبيهات داخل التطبيق للمختبِرين عندما تتوفّر إصدارات جديدة من تطبيقك لتثبيتها.
انتقِل إلى الدرس التطبيقي حول ترميز مجموعة حزمات تطبيق Android للتعرّف على كيفية توزيع إصدارات مجموعة حزمات التطبيق خطوة بخطوة.
تعرَّف على أفضل الممارسات لتوزيع تطبيقات Android على مختبِري تأكيد الجودة باستخدام CI/CD.