بيان تطبيق الويب هو ملف JSON يُعلم المتصفّح بكيفية سلوك تطبيق الويب المتقدّم (PWA) عند تثبيته على كمبيوتر مكتبي أو جهاز جوّال للمستخدم. يتضمّن ملف البيان النموذجي على الأقل ما يلي:
- اسم التطبيق
- الرموز التي يجب أن يستخدمها التطبيق
- عنوان URL الذي يجب فتحه عند تشغيل التطبيق
إنشاء ملف البيان
يمكن أن يكون لملف البيان أي اسم، ولكن يُسمى عادةً manifest.json
ويتم عرضه من الجذر (دليل المستوى الأعلى لموقعك الإلكتروني). تقترح المواصفة
أن يكون تنسيق الملف .webmanifest
، ولكن قد تحتاج إلى استخدام ملفات JSON
لجعل بيانات البيان أكثر وضوحًا للقراءة.
يبدو البيان النموذجي على النحو التالي:
{
"short_name": "Weather",
"name": "Weather: Do I need an umbrella?",
"icons": [
{
"src": "/images/icons-vector.svg",
"type": "image/svg+xml",
"sizes": "512x512"
},
{
"src": "/images/icons-192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "/images/icons-512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"id": "/?source=pwa",
"start_url": "/?source=pwa",
"background_color": "#3367D6",
"display": "standalone",
"scope": "/",
"theme_color": "#3367D6",
"shortcuts": [
{
"name": "How's the weather today?",
"short_name": "Today",
"description": "View weather information for today",
"url": "/today?source=pwa",
"icons": [{ "src": "/images/today.png", "sizes": "192x192" }]
},
{
"name": "How's the weather tomorrow?",
"short_name": "Tomorrow",
"description": "View weather information for tomorrow",
"url": "/tomorrow?source=pwa",
"icons": [{ "src": "/images/tomorrow.png", "sizes": "192x192" }]
}
],
"description": "Weather forecast information",
"screenshots": [
{
"src": "/images/screenshot1.png",
"type": "image/png",
"sizes": "540x720",
"form_factor": "narrow"
},
{
"src": "/images/screenshot2.jpg",
"type": "image/jpg",
"sizes": "720x540",
"form_factor": "wide"
}
]
}
خصائص البيان الرئيسية
short_name
وname
يجب تقديم سمة واحدة على الأقل من short_name
أو name
في البيان. إذا وفّرت كلاهما، يتم استخدام name
عند تثبيت التطبيق، ويتم استخدام short_name
على الشاشة الرئيسية للمستخدم أو مشغّل التطبيقات أو في أماكن أخرى تكون فيها المساحة محدودة.
icons
عندما يثبّت المستخدم تطبيق الويب التقدّمي (PWA)، يمكنك تحديد مجموعة رموز يمكن أن يستخدمها المتصفّح على الشاشة الرئيسية ومشغِّل التطبيقات ومبدِّل المهام وشاشة البداية وفي أماكن أخرى.
السمة icons
هي مصفوفة من عناصر الصور. يجب أن يحتوي كل عنصر على
src
وسمة sizes
وtype
للصورة. لاستخدام
الرموز القابلة للتمويه، والتي يُشار إليها أحيانًا باسم
الرموز التكيُّفية على Android، أضِف "purpose": "any maskable"
إلى السمة icon
.
بالنسبة إلى متصفّح Chromium، يجب تقديم رمز لا يقلّ عن 192×192 بكسل ورمز 512×512 بكسل. إذا تم توفير هذين الحجمين فقط للرمز، يغيّر Chrome حجم الرموز تلقائيًا ليلائم الجهاز. إذا كنت تفضّل تغيير حجم أيقوناتك وتعديلها لتكون دقيقة على مستوى البكسل، قدِّم الرموز بزيادة قدرها 48dp.
id
تتيح لك السمة id
تحديد المعرّف المستخدَم لتطبيقك بشكل صريح. تؤدي إضافة السمة id
إلى ملف البيان إلى إزالة الاعتمادية على start_url
أو موقع ملف البيان، ومن الممكن تعديلهما في المستقبل. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة
تحديد تطبيقات الويب التقدّمية بشكل فريد باستخدام سمة معرّف بيان تطبيق الويب.
start_url
السمة start_url
مطلوبة. ويُعلم المتصفّح بالصفحة التي يجب أن يبدأ فيها
تطبيقك عند تشغيله، ويمنع التطبيق من البدء على
أي صفحة كان المستخدم عليها عند إضافة تطبيقك إلى الشاشة الرئيسية.
يجب أن يوجّه start_url
المستخدم مباشرةً إلى تطبيقك، وليس إلى صفحة مقصودة لأحد المنتجات. فكِّر في ما يريد المستخدم فعله مباشرةً بعد
فتح تطبيقك، ثمّ ضَع المحتوى المعنيّ في هذا القسم.
background_color
يتم استخدام السمة background_color
على شاشة البداية عند
فتح التطبيق على الجهاز الجوّال للمرة الأولى.
display
يمكنك تخصيص واجهة مستخدم المتصفّح التي تظهر عند تشغيل تطبيقك. على سبيل المثال، يمكنك إخفاء شريط العناوين وعناصر واجهة مستخدِم المتصفّح. ويمكن أيضًا تشغيل الألعاب
في وضع ملء الشاشة. تأخذ السمة display
إحدى
القيم التالية:
الموقع | السلوك |
---|---|
fullscreen |
يفتح تطبيق الويب بدون أي واجهة مستخدم للمتصفّح ويشغل كل مساحة العرض المتاحة. |
standalone |
يفتح تطبيق الويب ليبدو ويتصرف مثل تطبيق مستقل. يعمل التطبيق في نافذته الخاصة، منفصلة عن المتصفّح، ويُخفي عناصر واجهة مستخدم المتصفّح العادية، مثل شريط العناوين. |
minimal-ui |
يشبه هذا الوضع standalone ، ولكنه يقدّم
للمستخدم مجموعة أساسية من عناصر واجهة المستخدم للتحكّم في التنقّل،
مثل زرَّي الرجوع وإعادة التحميل.
|
browser |
تجربة متصفّح عادية |
display_override
لاختيار طريقة عرض تطبيق الويب، اضبط وضع display
في بيان التطبيق كما هو описан في القسم
السابق. ليس مطلوبًا من المتصفّحات أن تكون متوافقة مع جميع
أوضاع العرض، ولكن يجب أن تكون متوافقة مع
سلسلة الحلول الاحتياطية المحدّدة في المواصفات
("fullscreen"
→ "standalone"
→ "minimal-ui"
→ "browser"
). وإذا لم تكن
متوافقة مع وضع معيّن، يتم استخدام وضع العرض التالي في السلسلة. في حالات نادرة، يمكن أن تتسبب هذه الحلول الاحتياطية في حدوث مشاكل. على سبيل المثال، لا يمكن لمطوِّر البرامج
طلب استخدام "minimal-ui"
بدون فرض الرجوع إلى وضع عرض
"browser"
عند عدم توفّر السمة "minimal-ui"
. ويؤدي السلوك الحالي أيضًا إلى
استحالة تقديم أوضاع عرض جديدة بطريقة متوافقة مع الإصدارات القديمة،
لأنّها لا تملك مكانًا في سلسلة الحلول الاحتياطية.
يمكنك ضبط تسلسل المحتوى الاحتياطي باستخدام السمة display_override
،
التي يأخذها المتصفّح بعين الاعتبار قبل السمة display
. قيمته هي
تسلسل من السلاسل التي يتم أخذها في الاعتبار بالترتيب المدرَج، ويتم تطبيق أول
وضع عرض متوافق. وإذا لم يكن أي منها متاحًا، يعود
المتصفّح إلى تقييم الحقل display
. إذا لم يتوفّر حقل display
، يُهمِل المتصفّحdisplay_override
.
في ما يلي مثال على كيفية استخدام display_override
. إنّ تفاصيل
"window-control-overlay"
خارج نطاق
هذه الصفحة.
{
"display_override": ["window-control-overlay", "minimal-ui"],
"display": "standalone",
}
عند تحميل هذا التطبيق، يحاول المتصفّح استخدام "window-control-overlay"
أولاً. وإذا لم يكن ذلك متاحًا، يتم الرجوع إلى "minimal-ui"
، ثم إلى
"standalone"
من السمة display
. إذا لم يكن أيّ من هذه العناصر متاحًا، يعود المتصفّح إلى سلسلة الحلول الاحتياطية العادية.
scope
scope
تطبيقك هي مجموعة عناوين URL التي يعتبرها المتصفّح جزءًا من
تطبيقك. تتحكّم scope
في بنية عنوان URL التي تتضمّن جميع نقاط الخروج
والدخول إلى التطبيق، ويستخدمها المتصفّح لتحديد وقت مغادرة المستخدم
للتطبيق.
ملاحظات أخرى حول scope
:
- إذا لم تُدرِج
scope
في البيان، سيكون الscope
التلقائي المُضمَّن هو عنوان URL لصفحة البداية، ولكن بعد إزالة اسم الملف والطلب والجزء. - يمكن أن تكون سمة
scope
مسارًا نسبيًا (../
) أو أي مسار على مستوى أعلى (/
) يسمح بزيادة تغطية عمليات التنقّل في تطبيق الويب. - يجب أن يكون
start_url
ضمن النطاق. - تكون السمة
start_url
نسبية إلى المسار المحدّد في السمةscope
. - سيكون
start_url
الذي يبدأ بـ/
دائمًا جذر المصدر.
theme_color
يحدِّد theme_color
لون شريط الأدوات، ويمكن أن يظهر في
معاينة التطبيق في أدوات تبديل المهام. يجب أن يتطابق theme_color
مع لون المظهر
meta
المحدّد في عنوان المستند.
theme_color
في الاستعلامات عن الوسائط
يمكنك ضبط theme_color
في الاستعلام عن الوسائط باستخدام السمة media
لعنصر لون المظهر meta
. على سبيل المثال، يمكنك تحديد لون واحد للوضع الفاتح
ولون آخر للوضع الداكن بهذه الطريقة. ومع ذلك، لا يمكنك تحديد هذه التفضيلات
في بيانك. لمزيد من المعلومات، يُرجى الاطّلاع على
مشكلة GitHub w3c/manifest#975.
<meta name="theme-color" media="(prefers-color-scheme: light)" content="white">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="black">
shortcuts
سمة shortcuts
هي صفيف من عناصر اختصار التطبيق
التي توفّر إمكانية الوصول السريع إلى المهام الرئيسية داخل تطبيقك. وكل عنصر
هو قاموس يحتوي على name
وurl
على الأقل.
description
تصف السمة description
الغرض من تطبيقك.
في Chrome، يبلغ الحد الأقصى لطول الوصف 300 حرف على جميع المنصات. وإذا كان الوصف أطول من ذلك، يقطعه المتصفّح باستخدام علامة حذف. على نظام التشغيل Android، يجب أيضًا أن يتضمّن الوصف سبعة أسطر من النص كحدّ أقصى
screenshots
السمة screenshots
هي صفيف من عناصر الصور التي تمثّل تطبيقك
في سيناريوهات الاستخدام الشائعة. يجب أن يتضمّن كل عنصر السمة src
وسمة sizes
وسمة type
للصورة. وتكون السمة form_factor
اختيارية.
يمكنك ضبط القيمة على "wide"
للقطات الشاشة المطبّقة على الشاشات العريضة فقط أو "narrow"
للقطات الشاشة الضيقة فقط.
في Chrome، يجب أن تستوفي الصورة المعايير التالية:
- يجب أن يكون العرض والارتفاع 320 بكسل على الأقل و3840 بكسل على الأكثر.
- لا يمكن أن يكون الحد الأقصى لبُعد الصورة أكبر من 2.3 مرة طول الحد الأدنى للبُعد.
- يجب أن يكون لجميع لقطات الشاشة التي تتطابق مع شكل الجهاز
نسبة العرض إلى الارتفاع نفسها.
- بدءًا من الإصدار 109 من Chrome، لا يتم عرض سوى لقطات الشاشة التي تم ضبط السمة
form_factor
فيها على"wide"
على أجهزة الكمبيوتر المكتبي.
- بدءًا من الإصدار 109 من Chrome، لا يتم عرض سوى لقطات الشاشة التي تم ضبط السمة
- اعتبارًا من الإصدار 109 من Chrome، سيتم تجاهل لقطات الشاشة التي تم ضبط
form_factor
فيها على"wide"
على Android. وسيستمر عرض لقطات الشاشة التي لا تتضمّنform_factor
للتوافق مع الأنظمة القديمة.
يعرض Chrome على الكمبيوتر المكتبي لقطة شاشة واحدة على الأقل وثماني لقطات شاشة كحد أقصى تستوفي هذه المعايير. ويتم تجاهل الباقي.
يعرض Chrome على Android لقطة شاشة واحدة على الأقل وخمس لقطات شاشة كحد أقصى تستوفي هذه المعايير. ويتم تجاهل الإعلانات المتبقية.
إضافة بيان تطبيق الويب إلى صفحاتك
بعد إنشاء البيان، أضِف علامة <link>
إلى جميع صفحات
تطبيقك المتقدّم على الويب. على سبيل المثال:
<link rel="manifest" href="/manifest.json">
اختبار ملف البيان
للتأكّد من إعداد البيان بشكل صحيح، استخدِم لوحة البيان في لوحة التطبيق ضمن "أدوات مطوّري البرامج في Chrome".
تقدّم هذه اللوحة نسخة قابلة للقراءة من قِبل المستخدمين للعديد من ملف البيان الخاص بك، وتتيح لك التأكّد من تحميل كل الصور بشكل صحيح.
شاشات البداية على الأجهزة الجوّالة
عند تشغيل تطبيقك لأول مرة على الأجهزة الجوّالة، قد يستغرق المتصفّح بعض الوقت لبدء العمل وبدء عرض المحتوى الأوّلي. بدلاً من عرض شاشة بيضاء قد تجعل المستخدم يظن أنّ التطبيق لا يعمل، يعرض المتصفح شاشة البداية إلى أن يتم عرض المحتوى لأول مرة.
ينشئ Chrome تلقائيًا شاشة البداية من name
و
background_color
وicons
المحدّدة في البيان. لإنشاء عملية انتقال
سلسة من شاشة البداية إلى التطبيق، اجعل background_color
باللون نفسه المستخدَم في صفحة التحميل.
يختار Chrome الرمز الذي يتوافق بشكل أكبر مع درجة دقة الجهاز لشاشة التمهيد. يكفي تقديم رموز بحجم 192 بكسل و512 بكسل في معظم الحالات، ولكن يمكنك تقديم رموز إضافية لمطابقة أفضل.
مراجع إضافية
للتعرّف على السمات الأخرى التي يمكنك إضافتها إلى بيان تطبيق الويب، يمكنك الرجوع إلى مستندات بيان تطبيق الويب MDN.