عميل متنقل متعدد المنصات للمنصة، مكتوب في React Native مع وحدات Android أصلية حيث لا يمكن للطبقة JavaScript الوصول إليها - تسليم الرسائل الخلفية، ونوافذ التغطية العائمة، وتسجيل الأجهزة، وتخزين بيانات الاعتماد الآمنة.
| الإجراء | القيمة | المصدر | المقيسة |
|---|---|---|---|
| وحدات نموذجية محلية Android إلى جانب قاعدة شفرة React Native | Kotlin modules for overlays, background delivery and enrolment | android source tree in the mobile client repository | |
| مصدر Kotlin في العميل المحمول | 24 files | find . -name '*.kt' across project repositories | |
| قنوات توزيع تم تشغيلها | 2 (store release and over-the-air update) | mobile release process |
ما المبنى الذي علمنا
إن أطر العمل المتعددة المنصات تباع على وعد بأنك تكتب مرة واحدة. وربما تفعل ذلك، ربما لثمانين في المائة من التطبيق. والخمس المتبقي هو حيث يوجد العمل، وهو دائما الجزء الذي يجعل التطبيق يشعر بالأصلية بدلا من أن يكون مغلفًا: الإخطارات التي تصل عندما يغلق التطبيق، والتغطيات التي تعيش على التطبيق الذي يفقد التركيز، وتدفقات التسجيل التي تلمس العنصر الآمن.
إن عملنا في التغطية هو مثال جيد على فئة خفية من العيوب. يرتفع رأس عائم لأي رسالة تأتي من محادثة غير تلك التي على الشاشة - ببساطة كافية، حتى تلاحظ أن الشارة غير المقروءة ترسم مرتين، مرة في JavaScript ومرة في الشفرة الأصلية، وأن الرؤوس تعيش في مخزنين منفصلين، لذا فإن إزالة أحدهما يترك الآخر مملوءا. إن مصدرين للحقيقة لعنصر بصري واحد هو العيب الهيكلي الأكثر شيوعا في تطبيقات الهواتف المحمولة، وهو لا يكون مرئيا تقريبا أبدا حتى يبلغ المستخدم عن شيء مستحيل.
لقد علمتنا عملية التسجيل عن الترتيب. فكان يتم استهلاك رمز التسجيل لمرة واحدة قبل الانتهاء من تسجيل الجهاز، لذا فإن أي فشل لاحق في التدفق كان يُعرض على المستخدم باعتباره "هذا الرمز قد تم استخدامه بالفعل" - وهي رسالة ترسلهم إلى الدعم بدلاً من إعادة المحاولة، وتصف الأعراض بدلاً من السبب. وتسلسل تدفق متعدد الخطوات بحيث تظل رسائل الفشل فيه صحيحة هو عمل تصميمي، وليس فقط هندسي.
وعملية الإطلاق مملة عن عمد: تجري عمليات البناء على جهاز واحد يحتوي على سلسلة الأدوات، ويتم التعامل مع التحديثات عبر الهواء بصورة منفصلة عن إصدارات المتجر، ولا يتم القيام بأي منهما من حاسوب محمول في نهاية اليوم.
بنيت بـ
- React Native
- TypeScript
- Kotlin
- Android SDK
- push notifications
- WebSocket
أخبرنا ماذا تحاول أن تفعل
إن محادثة قصيرة تكفي عادة لمعرفة ما إذا كنا الشخص المناسب. وإذا لم نكن، فسوف نقول ذلك ونشير إليك إلى مكان أفضل.
