التحديث التلقائي

نريد تحديث الإضافات والتطبيقات تلقائيًا لبعض الأسباب نفسها التي تؤدي إلى تحديث Google Chrome نفسه، وهي دمج إصلاحات الأخطاء والأمان وإضافة ميزات جديدة أو تحسينات في الأداء وتحسين واجهات المستخدم.

إذا كنت تنشر التطبيقات باستخدام لوحة بيانات المطوّر في Chrome، يجب تجاهل هذه الصفحة. إنّ العينات التي يتم إرسالها إلى "سوق Chrome الإلكتروني" والتي تجتاز عملية المعاينة تصبح متاحة تلقائيًا في بطاقة بيانات الإضافة على "سوق Chrome الإلكتروني" ويتم نشرها للمستخدمين النهائيين.

إذا كنت تستضيف ملف CRX على خادم ويب وتستخدم سياسات المؤسسات لتحميله إلى الأجهزة المُدارة، يُرجى مواصلة القراءة. يجب أيضًا قراءة مقالتَي الاستضافة والتجميع.

في السابق، عندما كانت الإضافات خارج المتجر متاحة، كان من الممكن تحديث الملفات الثنائية و الإضافة في الوقت نفسه. ومع ذلك، تتم تحديث الإضافات المستضافة على "سوق Chrome الإلكتروني" باستخدام آلية تحديث Chrome التي لا يتحكّم فيها المطوّرون. على مطوّري الإضافات توخّي الحذر عند تحديث الإضافات التي تعتمد على الثنائي (مثل الإضافات القديمة التي تستخدم NPAPI).

نظرة عامة

  • قد يحتوي البيان على حقل update_url يشير إلى موقع إلكتروني لإجراء عمليات التحقّق من التحديثات.
  • المحتوى الذي يعرضه الفحص بحثًا عن تحديثات هو مستند بيان التحديث بتنسيق XML يسرد أحدث إصدار من إحدى الإضافات.

كل بضع ساعات، يتحقّق المتصفّح مما إذا كانت أي إضافات أو تطبيقات مثبّتة تتضمّن عنوان URL للتحديث. بالنسبة إلى كل واحد منها، يُرسِل طلبًا إلى عنوان URL هذا بحثًا عن ملف بيان التحديث بتنسيق XML. إذا كان بيان التحديث يشير إلى إصدار أحدث من الإصدار المثبَّت، ينزِّل المتصفّح الإصدار الجديد ويُثبِّته. كما هو الحال مع التحديثات اليدوية، يجب توقيع ملف .crx الجديد باستخدام المفتاح الخاص نفسه المستخدَم في الإصدار المثبَّت.

عنوان URL المعدَّل

إذا كنت تستضيف الإضافة أو التطبيق، عليك إضافة الحقل update_url إلى ملف manifest.json، على النحو التالي:

{
  "name": "My extension",
  ...
  "update_url": "http://myhost.com/mytestextension/updates.xml",
  ...
}

تعديل البيان

يجب أن يكون بيان التحديث الذي يعرضه الخادم مستند XML يظهر على النحو التالي (تشير الأجزاء المميّزة إلى الأجزاء التي يجب تعديلها):

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

تم اقتباس تنسيق XML هذا من التنسيق المستخدَم في Omaha، وهي البنية الأساسية للتحديثات في Google. اطّلِع على http://code.google.com/p/omaha/ لمزيد من التفاصيل. يستخدم نظام الإضافات الصفات التالية لعنصرَي <app> و<updatecheck> في بيان التحديث:

appid

رقم تعريف الإضافة أو التطبيق، الذي يتم إنشاؤه استنادًا إلى تجزئة للمفتاح العام، كما هو موضّح في التجميع. يمكنك العثور على رقم تعريف إضافة أو تطبيق Chrome من خلال الانتقال إلى صفحة "الإضافات" (chrome://extensions).

ولا يتم إدراج التطبيقات المستضافة في صفحة "الإضافات". يمكنك العثور على رقم تعريف أي تطبيق باستخدام الخطوات التالية:

  • افتح التطبيق. يمكنك إجراء ذلك من خلال النقر على رمزه في صفحة "علامة تبويب جديدة".
  • افتح وحدة تحكّم JavaScript. ويمكنك إجراء ذلك بالنقر على رمز مفتاح الربط واختيار الأدوات > وحدة تحكّم JavaScript.
  • أدخِل التعبير التالي في وحدة تحكّم JavaScript: chrome.app.getDetails().id. تعرِضconsole معرّف التطبيق كسلسلة محفوظة بين علامتَي اقتباس.
قاعدة البيانات

عنوان URL لملف .crx

إصدار

يستخدمه العميل لتحديد ما إذا كان يجب تنزيل ملف .crx الذي حدّده codebase. يجب أن تتطابق مع قيمة "الإصدار" في ملف manifest.json ضمن ملف .crx.

قد يحتوي ملف بيان التحديث بتنسيق XML على معلومات عن إضافات متعددة من خلال تضمين عناصر <app> متعددة.

الاختبار

وتبلغ وتيرة التحقّق من التحديثات التلقائية عدة ساعات، ولكن يمكنك فرض تحديث باستخدام الزر تحديث الإضافات الآن في صفحة "الإضافات".

الاستخدام المتقدّم: مَعلمات الطلب

تم تصميم آلية التعديل التلقائي الأساسية لتقليل العمل من جهة الخادم. ما عليك سوى إضافة ملف XML ثابت إلى أي خادم ويب، مثل Apache، وتعديل ملف XML هذا عند إصدار إصدارات جديدة من الإضافات.

يمكن للمطوّرين الأكثر خبرة الاستفادة من حقيقة أنّنا نضيف مَعلمات إلى طلب بيان التحديث للإشارة إلى معرّف الإضافة وإصدارها. وبعد ذلك، يمكنهم استخدام عنوان URL نفسه للتحديث لجميع إضافاتهم، والذي يشير إلى عنوان URL يشغّل رمزًا ديناميكيًا من جهة الخادم بدلاً من ملف XML ثابت.

تنسيق مَعلمات الطلب هو:

?x=_<extension_data>_

حيث يكون _<extension_data>_ سلسلة تم ترميزها باستخدام عنوان URL بالتنسيق التالي:

_id=<id>_&v=_<version>_

على سبيل المثال، لنفترض أنّ لديك علامتَي تبويب، تشير كلتاهما إلى عنوان URL للتعديل نفسه (http://test.com/extension_updates.php):

  • الإضافة 1
    • رقم التعريف: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • الإصدار: "1.1"
  • الإضافة 2
    • رقم التعريف: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • الإصدار: "0.4"

سيكون طلب تعديل كل إضافة فردية على النحو التالي:

  • http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
  • http://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

يمكن إدراج عدة إضافات في طلب واحد لكل عنوان URL فريد للتعديل. على سبيل المثال، إذا كان لدى أحد المستخدمين كلتا الإضافةَين مثبّتَين، يتم دمج الطلبَين في طلب واحد:

http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

إذا كان عدد الإضافات المثبّتة التي تستخدم عنوان URL نفسه للتعديل كبيرًا بما يكفي لكي يكون طلب GET عنوان URL طويلًا جدًا (أكثر من 2000 حرف أو نحو ذلك)، يُرسِل التحقّق من التحديث طلبات GET إضافية عند الضرورة.

الاستخدام المتقدّم: الحد الأدنى لإصدار المتصفّح

بينما نضيف المزيد من واجهات برمجة التطبيقات إلى نظام الإضافات، قد تحتاج إلى إصدار ملف APK محدّث لإضافة أو تطبيق لن يعمل إلا مع الإصدارات الأحدث من المتصفّح. على الرغم من أنّه يتم تحديث Google Chrome تلقائيًا، إلا أنّه قد يستغرق الأمر بضعة أيام قبل أن يتم تحديث معظم قاعدة المستخدمين إلى أي إصدار جديد. لضمان أنّ تحديثًا معيّنًا لن ينطبق إلا على إصدارات Google Chrome الإصدار المحدّد أو الإصدارات الأحدث منه، يمكنك إضافة السمة "prodversionmin" إلى العنصر <app> في ملف بيان التحديث. على سبيل المثال:

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
  </app>
</gupdate>

سيضمن ذلك أنّ المستخدمين لن يتم تحديثهم تلقائيًا إلى الإصدار 2 إلا إذا كانوا يستخدمون الإصدار 3.0.193.0 من Google Chrome أو إصدارًا أحدث.