تحديثات داخل التطبيق: تسريع تحديثات تطبيق Android



من بين مجموعة متنوعة من الأدوات التي تم الإعلان عنها في Android Dev Summit ، أود أن أولي اهتمامًا خاصًا لآلية تحديث التطبيق داخل التطبيقات (IAUs) ، والتي تساعد المطورين على تسريع إضافة ميزات جديدة وإصلاح الأخطاء وتحسين الأداء. نظرًا لأن هذه الوظيفة نُشرت بعد Google I / O 2019 ، فسأتحدث في هذه المقالة بالتفصيل عن وحدات IAU وأصف خطط التنفيذ الموصى بها وأقدم بعض أمثلة التعليمات البرمجية. سأتحدث أيضًا عن تجربتنا في دمج IAUs في Pandao ، وهو طلب لطلب البضائع من الصين.

تسمح واجهة برمجة التطبيقات الجديدة للمطورين ببدء تحديث تطبيق لأحدث إصدار متوفر على Google Play. وبهذه الطريقة ، تكمل IAUs آلية التحديث التلقائي الموجودة في Google Play. تحتوي IAU على العديد من مخططات التنفيذ التي تختلف اختلافًا جوهريًا من حيث تفاعل المستخدم.

  1. يوفر Flexible Flow للمستخدمين تنزيل التحديث في الخلفية وتثبيته في وقت مناسب للمستخدم. الغرض منه هو الحالات التي لا يزال بإمكان المستخدمين فيها استخدام الإصدار القديم ، ولكن إصدار جديد متوفر بالفعل.


  2. تتطلب Immediate Flow من المستخدمين تنزيل التحديث وتثبيته قبل متابعة استخدام التطبيق. الغرض منه هو للحالات التي يكون فيها للمطورين تحديث التطبيق أمر بالغ الأهمية.



نظرًا لأن الخيار الثاني ليس مهمًا وأقل ملاءمة لتطبيق Pandao ، فسنقوم بتحليل سيناريو التدفق المرن بمزيد من التفاصيل.

IAUs التكامل تدفق مرنة


استخدام الحالات


تتكون عملية الترقية باستخدام IAU من عدة خطوات.

  1. تطبيق يستخدم مكتبة Play Core ، والذي يتحقق على Google Play مما إذا كانت هناك أية تحديثات متوفرة أم لا.
  2. إذا كان الأمر كذلك ، فإن التطبيق يطلب من Google Play إظهار حوار IAUs. يعرض Google Play للمستخدم مربع حوار مع اقتراح بالتحديث.
  3. إذا وافق المستخدم ، يقوم Google Play في الخلفية بتنزيل التحديث ، مما يعرض للمستخدم في شريط الحالة تقدم التنزيل.
  4. إذا اكتمل التنزيل عندما يكون التطبيق قيد التشغيل في الخلفية ، فسوف يكمل Google Play التثبيت تلقائيًا. إذا كان التطبيق نشطًا في هذه اللحظة ، فمن الضروري في مثل هذه الحالات تحديد منطق إتمام التثبيت. النظر في السيناريوهات التالية.
    1. يبدأ التطبيق عملية التثبيت من خلال عرض المستخدم على مربع حوار Google Play مع مؤشر التقدم. بعد اكتمال التثبيت ، يتم تشغيل إصدار محدث من التطبيق. في هذه الحالة ، يوصى بعرض مربع حوار إضافي يتيح للمستخدم تأكيد استعداده لإعادة تشغيل التطبيق الآن. هذا هو مخطط التنفيذ الموصى به .
    2. ينتظر التطبيق حتى يكون في الخلفية ، ثم يكمل التحديث. من ناحية ، يعد هذا سلوكًا أقل تدخلاً من وجهة نظر UX ، نظرًا لأن تفاعل المستخدم مع التطبيق لا ينقطع. ولكن من ناحية أخرى ، فإنه يتطلب من المطور تطبيق المنطق لتحديد ما إذا كان التطبيق في الخلفية.

إذا لم يكتمل تثبيت التحديث الذي تم تنزيله ، فقد يقوم Google Play بإكمال التثبيت في الخلفية. من الأفضل عدم استخدام هذا الخيار بشكل صريح ، لأنه لا يضمن تثبيت التحديث.

متطلبات الاختبار الأساسية


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

  • يجب نشر الإصدار الأصلي ذي الرقم الأعلى على Google Play ، وسيتم تحديده بواسطة Google Play كتحديث متوفر. يجب تثبيت الإصدار الهدف مع رقم بنية أقل ووحدات IAU المدمجة على الجهاز ، وسوف نقوم بتحديثه. خلاصة القول هي أنه عندما يطلب التطبيق من Google Play التحقق من وجود تحديث ، فإنه سيقوم بمقارنة أرقام التجميع للإصدار المثبت والمتاح. لذلك لن يتم إطلاق وحدات IAU إلا إذا كان رقم البنية على Google Play أعلى من الإصدار الحالي على الجهاز.
  • يجب أن يكون للإصدارين المصدر والهدف نفس اسم الحزمة ويجب توقيعهما بنفس شهادة الإصدار .
  • Android 5.0 (مستوى API 21) أو أعلى.
  • لعب مكتبة الأساسية 1.5.0 أو أعلى.

مثال رمز


هنا نلقي نظرة على نموذج التعليمات البرمجية لاستخدام IAUs Flexible Flow ، والذي يمكن العثور عليه أيضًا في الوثائق الرسمية . تحتاج أولاً إلى إضافة مكتبة Play Core إلى ملف build.gradle على مستوى الوحدة النمطية.

dependencies { ... implementation "com.google.android.play:core:1.5.0" } 

ثم قم بإنشاء مثيل لـ AppUpdateManager وأضف وظيفة رد AppUpdateInfo إلى AppUpdateInfo ، والتي ستُرجع معلومات حول توفر التحديث ، والكائن الذي سيبدأ التحديث (إن وجد) ، وتقدم التنزيل الحالي ، إذا كان قد بدأ بالفعل.

 // Create instance of the IAUs manager. val appUpdateManager = AppUpdateManagerFactory.create(context) // Add state listener to app update info task. appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo -> // If there is an update available, prepare to promote it. if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) { // ... } // If the process of downloading is finished, start the completion flow. if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) { // ... } } .addOnFailureListener { e -> // Handle the error. } 

لإظهار مربع الحوار لطلب التحديثات من Google Play ، يجب عليك تمرير كائن AppUpdateInfo المستلم إلى أسلوب AppUpdateInfo .

  appUpdateManager.startUpdateFlowForResult( // Pass the intent that is returned by 'getAppUpdateInfo()'. appUpdateInfo, // Or 'AppUpdateType.IMMEDIATE for immediate updates. AppUpdateType.FLEXIBLE, // The current activity. activity, REQUEST_CODE ) 

لمراقبة حالة التحديث ، يمكنك إضافة مستمع أحداث InstallStateUpdatedListener إلى مدير IAUs.

 // Create a listener to track downloading state updates. val listener = InstallStateUpdatedListener { state -> // Update progress indicator, request user to approve app reload, etc. } // At some point before starting an update, register a listener for updates. appUpdateManager.registerListener(listener) // ... // At some point when status updates are no longer needed, unregister the listener. appUpdateManager.unregisterListener(listener) 

بمجرد تنزيل التحديث (حالة DOWNLOADED ) ، ستحتاج إلى إعادة تشغيل التطبيق لإكمال التحديث. يمكن بدء إعادة التشغيل عن طريق الاتصال بـ appUpdateManager.completeUpdate() ، ولكن قبل ذلك يوصى بإظهار مربع حوار حتى يؤكد المستخدم صراحة استعداده لإعادة تشغيل التطبيق.

 Snackbar.make( rootView, "An update has just been downloaded from Google Play", Snackbar.LENGTH_INDEFINITE ).apply { setAction("RELOAD") { appUpdateManager.completeUpdate() } show() } 

خطأ "التحديث غير متوفر"


أولاً ، أعد التحقق من الامتثال للمتطلبات المذكورة في قسم متطلبات التنفيذ الأساسية. إذا كنت قد فعلت كل شيء ، ولكن التحديث وفقًا لاستدعاء onSuccess لا يزال غير متاح ، فقد تكون المشكلة في التخزين المؤقت. من المحتمل أن تطبيق Google Play لا يعلم بالتحديث المتاح بسبب آلية التخزين المؤقت الداخلية. لتجنب ذلك أثناء الاختبار اليدوي ، يمكنك فرض إعادة تعيين ذاكرة التخزين المؤقت عن طريق الانتقال إلى صفحة "تطبيقاتي وألعابي" على Google Play. أو يمكنك فقط مسح ذاكرة التخزين المؤقت في إعدادات تطبيق Google Play. يرجى ملاحظة أن هذه المشكلة تحدث فقط أثناء الاختبار ، ويجب ألا تؤثر على المستخدمين النهائيين ، حيث لا يزال يتم تحديث ذاكرة التخزين المؤقت الخاصة بهم يوميًا.

IAUs Flow Flow في تطبيق Pandao


شاركنا في برنامج الوصول المبكر و IAUs Flexible Flow (التنفيذ الموصى به) في تطبيق Pandao ، منصة يمكن للمصنعين والبائعين من خلالها تداول البضائع الصينية. تم عرض مربع حوار IAU على الشاشة الرئيسية بحيث يمكن لأكبر عدد ممكن من المستخدمين التفاعل معه. في البداية ، أردنا إظهار الحوار أكثر من مرة واحدة يوميًا ، حتى لا تصرف انتباه الناس عن التفاعل مع التطبيق.

نظرًا لأن اختبار A / B يلعب دورًا رئيسيًا في دورة حياة أي ميزة جديدة ، فقد قررنا تقييم تأثير وحدات IAU في طلبنا. قمنا بتقسيم المستخدمين بشكل عشوائي إلى مجموعتين منفصلتين. كانت المجموعة الأولى عبارة عن عنصر تحكم ، دون استخدام وحدات IAU ، وكانت المجموعة الثانية عبارة عن اختبار ، فقد أظهرنا حوار IAU لهؤلاء المستخدمين.


IAUs مرنة تدفق A / B اختبار في التطبيق Pandao.

خلال الإصدارات القليلة الماضية ، قمنا بقياس النسبة المئوية للمستخدمين النشطين لكل إصدار من التطبيق. اتضح أنه من بين المستخدمين النشطين الذين لديهم أحدث إصدار متاح في ذلك الوقت ، كان الجزء الرئيسي يتكون من مشاركين من المجموعة B ، أي مع وظيفة IAU. يوضح الخط الأرجواني في الرسم البياني أنه في الأيام الأولى بعد نشر الإصدار 1.29.1 ، تجاوز عدد المستخدمين النشطين الذين لديهم IAU عدد المستخدمين دون هذه الوظيفة. لذلك ، يمكن القول أن المستخدمين الذين لديهم IAUs يقومون بتحديث التطبيق بشكل أسرع.


مربع الحوار IAUs Flexible Flow في تطبيق Pandao.

وفقًا لبياناتنا (انظر الرسم البياني أعلاه) ، ينقر المستخدمون غالبًا على زر التأكيد في مربع حوار IAU في الأيام الأولى بعد الإصدار ، ثم يتم تقليل التحويل باستمرار حتى نشر الإصدار التالي من التطبيق. يتم ملاحظة الشيء نفسه مع زر التثبيت في مربع الحوار ، والذي يبدأ تثبيت التحديث الذي تم تنزيله. لذلك ، يمكننا أن نقول أن متوسط ​​قيمة التحويل في كلتا الحالتين يتناسب طرديا مع تواتر الإصدارات. في Pandao ، يصل متوسط ​​التحويل خلال شهر واحد إلى 35٪ للنقرة على زر التأكيد و 7٪ للنقرة على زر التثبيت.

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

بشكل عام ، أظهرت IAUs نتائج جيدة أثناء اختبار A / B ، لذلك قمنا بتطبيق IAUs لجميع المستخدمين.

شكر


شكرًا لك على مساعدتك في كتابة هذا المقال ، مارينا بلشكوفا مارينا_بليشكوف ، ألكساندر تشيرني أليكسيرنيي ، وإيليا نزاروف رولا روكو ، وجليب بوديباتشفسكي ، ودانييل بولوزوف جوكرداب ، وأناستازيا كوليك ، وفلاديسلاف بريوس ، وفلاديسلاف جولدان فلاديسكوس .

Source: https://habr.com/ru/post/ar452092/


All Articles