في الآونة الأخيرة ، فرضت مرة أخرى. أنا أعيش في أوروبا ، وبدلاً من الغرامات المفروضة على مواقف السيارات غير المناسبة وشاحنات السحب "المتسلقة" ، يربطون عجلة سيارتك. للخروج ، تحتاج إلى إجراء مكالمة هاتفية ودفع مبلغ مستحق وانتظر الرجل الذي يحمل المفاتيح لرفع السلسلة. انها طويلة ومهينة وأحيانا (اعتمادا على المنطقة) باهظة الثمن.
في ذلك اليوم كنت متأخرا في كل مكان. في انتظار أن يرن العامل بالمفاتيح ، تساءلت عن مدى غبائي. ركضت ، تركت السيارة لمدة نصف ساعة بدلاً من الحد الأقصى لمدة 20 دقيقة مجانًا - بالضبط في الدقيقة الحادية والعشرين وتم ضبطي. للأسف ، لم تكن الشاحنة المخططة لموقف السيارات بعيدة ، وكان رد فعلها على الفور. لقد اعتادوا قبلي ، لأسباب مختلفة: لقد نسيت ، انتهت المدة المدفوعة ، وأحيانًا لم أتمكن من العثور على سيارتي في متاهة الشوارع.
"يجب أن يكون هناك تطبيق لكل شيء ،" فكرت ، وبدأت الخوض في متجر التطبيقات. بعد كومة من النتائج المشكوك فيها ، تقلصت ثقتي ، وقررت التوضيح: "يجب أن يكون هناك تطبيق أندرويد لكل شيء". ثم وجد huavei وصعد إلى أحشاء متجر اللعب. من هناك ، تسربت مني المزيد من الحطام ، وغرقت في أعمال خرقاء ، أنا بصق. إما أن أكون مخطئًا بطريقة ما ، أو أنه لا يوجد متعقب لوقوف السيارات مناسب ومفهوم. الاستنتاج بسيط: إذا لم يكن لدينا شيء ، فلنفعل ذلك بأنفسنا.
على الخلفية ، كنت قد رأيت بالفعل
بناءًا طويل الأجل ، وأخذ كل وقت فراغي تقريبًا. قررت أن تأخذ استراحة وفي الفترة الفاصلة لجمع إسقاط آخر. بعد تقدير الوظيفة المطلوبة ، تخيلت فترة شهر ونصف ، وأتطلع إلى الأمام ، وسأقول أنه ، من حيث المبدأ ، اتضح أنه أسرع. وكانت النتيجة تطبيق مضغوط ونظيف على كل المنابر ، مريحة للغاية. الآن أستخدمها بنفسي وأقترح عليك تجربتها.

فكرة
فماذا أريد من تعقب وقوف السيارات؟ ما الذي أفتقده دائمًا عندما أحصل على غرامة؟ بعد التفكير ، قمت بصياغة المقدمة التالية:
- بسيطة. من الناحية المثالية ، زر واحد. الحد الأدنى من وظائف تشتيت الانتباه: لا توجد ملفات تعريف ، سجل وقوف السيارات ، دعم لعدة سيارات في نفس الوقت ، إلخ.
- مع الإخطارات. لن أنسى السيارة ، إذا ذكرني التطبيق: إخواني ، لديك موقف للسيارات بالمناسبة ، وعلى وشك الانتهاء.
- النظر في وقت المشي. هذا هو أبسط فكرة أنني لم أرها تتجسد في أي مكان. لست بحاجة إلى معرفة أن موقف السيارات سينتهي في 5 دقائق إذا كنت على بعد نصف ساعة منه. أحتاج إلى التذكير حتى أتمكن من الوصول إلى السيارة قبل دقائق من النهاية والمغادرة.
- الطريق والتنقل إلى موقف السيارات. التنقل ، بالطبع ، عبر Google أو Apple Maps ، ولكن يمكن إظهار المسار في تطبيقك. سوف يساعدك ذلك إذا تركت السيارة في منطقة غير مألوفة ، ووضع علامة على الموقت ، وقمت بالركض في دوائر على طول الشوارع ذاتها.
لقد اخترت Flutter كقاعدة تكنولوجية ، حيث كنت أعمل معها منذ فترة واعتبرها جيدة. بالنسبة إلى المسارات ، قررت استخدام واجهة برمجة تطبيقات HERE ، وليس أيضًا لأول مرة ، ولكن للخريطة - Mapbox. لقد رسمت عدة خيارات للواجهة ، واخترت الخيار الأكثر أضيق الحدود وانخرطت في العمل.
تصميم
من حيث المبدأ ، ليس هناك الكثير لنخبره عن عملية التنمية نفسها. لا يوجد جزء خادم هنا ، أبسط عميل ، والذي يتكون بشكل أساسي من عرض واحد كبير في حالات مختلفة. في الصفحة الأولى ، يمكنك إما تحديد إعداد مسبق - 1 ، 2 ، 4 ، 6 ساعات - أو استخدام شريط التمرير لضبط فترة وقوف السيارات الخاصة بك. بعد أن جربته مباشرة ، أدركت أن شريط التمرير كان وقحًا بدرجة كافية ، وأضف الزرين "+" و "-" إليه. كان هناك فارق بسيط غير واضح إلى حد ما هنا أنه بينما تختار ، يمضي الوقت. لذلك تحتاج إلى تحديث هذا الرأي في الوقت الحقيقي. بعد اختيار المصطلح ، انقر فوق الزر الوحيد أدناه ، وسيتم حفظ بيانات الموقع والوقت ، ويبدأ وقوف السيارات. من المهم الإشارة إلى أنني أقوم بشكل أساسي بتخزين جميع البيانات على متن الطائرة ، لا يتم نقل أي شيء إلى أي خادم. في المستقبل ، هذا ، بالمناسبة ، سوف يخلق لي صعوبات ، ولكن المزيد عن ذلك في وقت لاحق.
الصفحة الثانية هي ، في الواقع ، توقيت وقوف السيارات. لقد جربت مجموعة من الخيارات هنا: لقد بدأت بنماذج معلومات محملة بشكل كبير ، ثم تخلصت وتقلصت إلى الحد الأقصى. أردت حقًا عرض حالة الوقوف بصريًا ، بدلاً من الأرقام الجافة ، لذلك كان العنصر الرئيسي في هذه الصفحة مع الخريطة هو مخطط دونات. إنه يظهر الوقت المنقضي ووقت المشي والوقت المتبقي. إذا لم تكن بالقرب من السيارة وكان وقت المشي غير صفري ، فسيظهر زر بدء التنقل ، وتظهر الخريطة طريقًا تقريبيًا إلى موقف السيارات. هذا ، في الواقع ، هو كل شيء.
على الرغم من بساطتها المرئية ، إلا أن هذه الشاشة كانت تثير أعصابي. يجب أن يكون مفهوما أنه بينما تكون مواقف السيارات نشطة ، فهناك عدد من العمليات تحدث في وقت واحد:
- يمر الوقت وينفد الموقت
- أنت تتحرك وتغيير وقت السفر
كل هذا يحدث في الوقت الحقيقي ، وينبغي أن يتم عرضها على الفور على الواجهة. يجب إعادة إنشاء المخطط بسلاسة ، ويجب أن تتحرك الخريطة وتعيد رسم المسار ، إذا كان هناك خطر بالتأخر أو انتهاء وقوف السيارات ، فيجب أن يظهر التحذير المقابل أيضًا. علاوة على ذلك: عند إغلاق التطبيق وفتحه ، ستحتاج إلى استعادة كل هذا بشكل صحيح. وأخيراً ، المخيف: يجب أن تكون جميع الوظائف قادرة على العمل في الخلفية ، لأن التطبيق سوف يقضي معظم حياته في الخلفية. مثل هذه الأشياء.
لن أصف التنفيذ بالتفصيل ، يمكنني فقط أن أقول إن العمل في الرفرفة مع الولايات يستحق كل هذا العناء. عندما يتحول التصميم ذي الأجسام المزدحمة بأجهزة Android البحتة ، فقد تحول بسهولة وبأناقة. حالات عادية مفهومة ، ربط معقول للآراء بالنماذج - في مهام مثل هذه الرفرفة تشرق. ومع ذلك ، لم يكن الأمر بدون دعامات نموذجية: على سبيل المثال ، لا تملك المكتبة المحلية للعمل مع الخرائط انتقالًا متحركًا إلى إحداثيات جديدة. اضطررت للدخول في كودها ، وسحب بعض الأساليب الخاصة وإضافة عكازتي. من المحتمل أن تتم إضافة هذه الوظيفة قريبًا ، ولكن هذه هي الرفرفة بالكامل - بكل جاذبيتها ، تكون على استعداد لمثل هذه الاكتشافات.
يبدو أن كل شيء آخر يعمل بسلاسة. في الواقع ، لم يكن هناك الكثير من الأشياء الأخرى: بضع حوارات ، وصفحة مقدمة صديقتها (كانت
فنانة ) رسومات جميلة. أخيرًا ، قمت بترجمة التطبيق بالكامل إلى اللغة الروسية ، بما في ذلك الخريطة. ولكن بعد ذلك بدأ الألم: الإخطارات.
إشعار
بالنسبة لي ، كانت القدرة على إرسال إشعارات ذكية هي مفتاح التطبيق - وبدون ذلك ، لا يوجد شيء يثير ضجة. ومع ذلك ، عندما بدأت العمل على هذه الميزة ، أدركت أنني قد تقدمت على قدمي. كان هناك في الواقع مشكلتان. الأول هو الرفرفة ، التي لا تعرف كيفية التعامل مع أجهزة api ذات المستوى المنخفض خارج الصندوق: تحتاج إلى كتابة حشية في شكل مكون إضافي يحتوي على رمزين أصليين وتجريد على السهام. المشكلة الثانية هي موقفي الأساسي وهو أنه يجب تنفيذ كل شيء على متن الطائرة. لذلك ، نحن نلخص ما هو مطلوب. من الضروري أن التطبيق
على الخلفية :
- مراقبة باستمرار تحديد الموقع الجغرافي الخاص بك ،
- دققت كم دقيقة سيرا على الأقدام إلى موقف للسيارات
- التحقق مع انتهاء الصلاحية الموقت
- إذا كان هناك خطر من عدم وجود وقت للعودة ، لقطة إشعار
تشعر على نطاق المأساة؟ من الواضح أنه لا توجد قدرة تقنية للقيام بذلك إذا تم قتل التطبيق بالكامل. ولكن لنفترض أنه تم تصغيره ببساطة ، وأن الشاشة مغلقة. هنا يعطيني api المسار وتقدير وقت المشي ، فهل هذا يعني أن التطبيق سوف يطلب البريد المزعج في الخلفية؟ كم رمز سيتم تشغيلها على الإطلاق؟ كيف نحن مع الذاكرة واستهلاك الطاقة؟
جلست للتفكير. بدأت مع واحدة صغيرة: من الناحية الفنية ، كان رفرفة في الآونة الأخيرة لديه القدرة على تنفيذ التعليمات البرمجية في الخلفية ، ويسمى عزل. إذا كان كل شيء مكتوبًا بشكل صحيح ، فيمكنك بناء المنطق بطريقة محددة بحيث لا يعمل كل شيء على الخلفية ، ولكن مع بعض الوظائف المحددة. في الواقع ، في الوضع المصغر ، لا نحتاج إلى رسم واجهات أو تحديث حالات - نحن مهتمون بالمنطق العاري لحساب الوقت ، وهذا المنطق مضغوط جدًا ورخيص. في الوقت نفسه ، لا ينبغي أن يكون سبب ذلك تغيير في تحديد الموقع الجغرافي ، كما كان الحال في الإصدار الأصلي ، ولكن عن طريق بعض الموقت الداخلي. لأن الإخطار يجب أن يطير ، حتى لو كنت لا تتحرك ، ولكن لا يزال يجلس.
حسنًا ، لقد كتبنا رمزًا خفيفًا يمكن تشغيله في الخلفية ويتم التحكم فيه بواسطة مؤقت. كيف يمكننا تشغيله في إطار التطبيقات المحلية ونقل بيانات الموقع الجغرافي هناك؟ اتضح بشكل مختلف.
منطق android و iPhone في مسائل تنفيذ التعليمات البرمجية في الخلفية مختلف تمامًا. بالنسبة إلى iPhone ، فإنه غائب على هذا النحو: يمكن لرمز الخلفية فقط تشغيل حدث نظام من نوع معين ، على سبيل المثال ، تشغيل دفق الصوت أو ، لحسن الحظ ، تحديث الموقع. للقيام بذلك ، ما عليك سوى طلب الأذونات وفي الجزء الأصلي من المكون الإضافي Flater الاشتراك في الحدث. من هناك ، من خلال قناة اتصال محددة (MethodChannel) ، ندعو رد الاتصال في نبله ، لتمرير البيانات الجغرافية إليها وبدء الخلفية مع المنطق الذي نحتاجه. الجمال.
يعمل Android بشكل مختلف. من الناحية الفنية ، لديه القدرة على تنفيذ تعليمات برمجية في الخلفية دون ربطه بأحداث النظام - ولهذا تحتاج إلى وصف الخدمة. يتم تعليقه بشكل منفصل عن التطبيق ، إما بالكامل في الخلفية أو في المقدمة (هناك يجعل الأمر محسوسًا برسالة مرفقة في المكفوفين). يبدو أنه قد تم حل المشكلة: في الجزء الأصلي من المكون الإضافي ، نصف خدمة خلفية تتعقب الموقع وتسحب رمز دارث. ومع ذلك ، هناك فارق بسيط. من الإصدار 8.0 من Android ، تم تغيير الموقف تجاه هذه الخدمات: الآن ، إذا تم تصغير التطبيق في الوقت الحالي ، يتم قطع خدماته الخلفية بشكل جهنمي بواسطة المحور لتوفير الطاقة. وإذا تم تنفيذ التعليمات البرمجية الخاصة بك ، على سبيل المثال ، النسخ الاحتياطي للبيانات ، فأنت لا تهتم من حيث المبدأ بالوقت المحدد الذي سيسمح فيه المحور للعمل - الشيء الرئيسي هو أنه يعمل. ولكن في حالتي ، نحتاج إلى تتبع التغيير في الموقع في الوقت الفعلي تقريبًا ، والتوقيت أمر مهم هنا. لذلك ، فإن المخرج الوحيد هو بدء تشغيل الخدمة في طي النسيان. وصفنا إخطار صغير مرفق في الستار ، والاشتراك في الموقع ، وإرساله إلى وثبة من خلال MethodChannel. كل شيء يبدو للعمل.
بالمناسبة ، بالعودة إلى مشكلات الذاكرة واستهلاك الطاقة وعدد الطلبات - يتم تشغيل الرمز عند إزاحة الموقع إلى 50 مترًا أو بواسطة مؤقت. علاوة على ذلك ، هو نفسه خفيف جدًا ، ولا تمر الطلبات عبري ، بل تذهب مباشرةً إلى هنا. أنا شخصياً لا أتلقى أي بيانات ولا أحفظها في أي مكان. بشكل عام ، مثل هذا التطبيق موصوف جيدًا
هنا ، هذه مدونة أحد مهندسي الرفرفة - يتم إرفاق الكود أيضًا هناك. مثاله مختلف بعض الشيء ، لكن النهج العام واضح ، لذلك أوصي بقراءته.
يؤدي
هذا ، في الواقع ، هو كل شيء. لمدة شهر من وقت الفراغ ، حصلت على تطبيق يعمل على حل مشكلة معينة تمامًا. آمل أن تكون هذه المقالة مثيرة للاهتمام لشخص ما ، وأن ينقذك التطبيق من الغرامات والتوتر. يمكنك البحث والتوبيخ هنا:
Android و
iOS .
شكرا لكم جميعا على اهتمامكم.