يمكنك دمج 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 في نكهتَي المنتج "تجريبي" و "كامل"، اتّبِع التعليمات التالية:
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 مطلوب فقط إذا لم يكن لديك المكوّن الإضافي في خدمات Google لأداة Gradle مثبَّتًا. يمكنك العثور على رقم تعريف التطبيق في ملف 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: هو رقم مشروعك على Firebase.serviceCredentialsFile: مسار ملف بيانات اعتماد خدمة 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 على مختبِري ضمان الجودة باستخدام التكامل المستمر/التسليم المستمر.