تحضير التطبيق لنظام Android Q. الجزء 1

تم إعداد ترجمة المقال خصيصًا لطلاب الدورة "Android-developer. بالطبع الأساسية . " نذكرك أيضًا بأننا مستمرون في التسجيل في الدورة المتقدمة "Speciality Android-developer"





نحن في السنة العاشرة لتطوير Android (يجب أن يكون Android Q الإصدار 10.0). وفقًا للإصدار التجريبي 4 ، يحتوي Android Q رسميًا على واجهة برمجة تطبيقات من المستوى 29 . على الرغم من وجود Beta 5 بالفعل ومن المتوقع Beta 6 ، فقد تم تحديد واجهة برمجة التطبيقات (API) على أنها نهائية ، وقد حان الوقت الآن لمعرفة كيف سيؤثر Android Q على التطبيقات والتغييرات التي يجب إجراؤها لدعم Android Q.


يمكن تقسيم التغييرات المهمة (وليس كلها) المقدمة في Android Q إلى فئتين: أ) السرية والأمان ، ب) تجربة المستخدم .

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

1) السرية والأمن


أ) بدء الأنشطة الخلفية


لم يعد بإمكانك بدء نشاط عندما يكون تطبيقك في الخلفية.

  • ما يؤثر: جميع التطبيقات التي تعمل على Q (بغض النظر عن الهدف SDK). يتم طرح استثناء إذا كان Android Q هو الإصدار المستهدف من التطبيق ؛ لن يبدأ النشاط ببساطة إذا لم يكن Android Q هو SDK الهدف للتطبيق ، ولكنه يعمل على جهاز يعمل بنظام Android Q.
  • الاستثناءات: الخدمات PendingIntent ، مثل إمكانية الوصول ، الإكمال التلقائي ، إلخ. إذا تلقى التطبيق PendingIntent من النظام ، فيمكننا استخدامه لبدء النشاط. إذا كان التطبيق لديه إذن SYSTEM_ALERT_WINDOW (تمت إزالته في Android GO) أو التطبيق الذي يسمى مؤخرًا finish() SYSTEM_ALERT_WINDOW (لا ينصح بالاعتماد عليه. "مؤخرًا" يمكن أن يكون غامضًا للغاية) ، فإن تطبيقك مجاني من هذا التقييد.
  • النهج الموصى به: الإخطار الذي يحفز النشاط

 val fullScreenIntent = Intent(this, CallActivity::class.java) val fullScreenPendingIntent = PendingIntent.getActivity(this, 0, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT) val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) .... .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_CALL) .setFullScreenIntent(fullScreenPendingIntent, true) 

إضافة Fullscreen PendingIntent إلى الإعلام. الآن وقد عمل الإشعار ، سيقوم النظام بإطلاق نية ملء الشاشة.

لذلك ، إذا أردنا بدء النشاط من الخلفية ، فقم أولاً بإنشاء إشعار سيتم عرضه على المستخدم. في هذا الإشعار ، أضف Fullscreen PendingIntent . أيضًا ، أضف إذن USE_FULL_SCREEN_INTENT إلى USE_FULL_SCREEN_INTENT . الآن وقد عمل الإشعار ، سيقوم النظام بإطلاق نية ملء الشاشة.

  • مطبات: يقرر النظام موعد عرض الإخطار ومتى يتم عرض النشاط. إذا كان المستخدم يستخدم الجهاز بنشاط ، فسيتم عرض إشعار منبثق. إذا كان الجهاز في حالة راحة أو عندما يتفاعل المستخدم مع الإشعار ، يبدأ النشاط بملء الشاشة. على سبيل المثال ، كما هو الحال عند تلقي مكالمة هاتفية (إعلامات منبثقة أثناء استخدام الهاتف ، وإلا النشاط بملء الشاشة).

ب) معرفات الأجهزة


تم إلغاء الوصول إلى معرفات الأجهزة غير القابلة لإعادة التوطين في Android Q.

  • ما يؤثر: جميع التطبيقات التي تعمل على Q (بغض النظر عن الهدف SDK). يتم طرح استثناء إذا كانت Q هي SDK الهدف ؛ وإرجاع null إذا كان الهدف SDK أقل من Q
  • تجنب: أصبح عنوان Mac الآن عشوائيًا ، ولم يعد IMEI ( TelephonyManager.getDeviceId() ) والرقم التسلسلي متاحين. الآن أصبحت "أذونات مميزة" وهي متاحة فقط لتطبيقات المشغل.
  • الطريقة الموصى بها: استخدم معرفات إعادة التوطين مثل معرّف الإعلان أو معرّف مثيل أو معرّف فريد عمومي (GUID). راجع أفضل الممارسات الخاصة بالمعرفات الفريدة للحصول على مزيد من المعلومات حول المعرف الذي يجب استخدامه في هذه الحالة.

ج) تعريف خلفية الموقع


بدءًا من Android Q ، سيميز النظام بين طلبات الموقع المقدمة في المقدمة وفي الخلفية.


سيكون لطلب إذن الدخول إلى الموقع الآن 3 خيارات: السماح طوال الوقت ، والسماح فقط عند استخدام التطبيق (الوصول فقط في المقدمة) ورفض (عدم الوصول).

  • ما يؤثر: يعتمد على SDK الهدف. إذا كانت Q هي SDK الهدف للتطبيق ، فأنت بحاجة إلى طلب إذن موقع جديد في الخلفية. إذا كان التطبيق يحتوي على هدف SDK مختلف ، فسيتلقى هذا الإذن تلقائيًا إذا كان لديه بالفعل حقوق الوصول إلى الموقع.


الصورة مأخوذة من وثائق مطور Android

  • الطريقة الموصى بها: إذا كان التطبيق يتطلب الوصول لمرة واحدة إلى موقع المستخدم لأداء بعض المهام ، فاستخدم خدمة المقدمة مع المعلمة foregroundServiceType المحددة location في ملف بيان التطبيق.

 <service android:name="MyNavigationService" android:foregroundServiceType="location" ... /> 

إذا كان التطبيق يحتاج إلى وصول مستمر إلى موقع الجهاز ، على سبيل المثال ، بالنسبة إلى geofence ، فيمكنه تكوين طلب للسماح بالوصول إلى الموقع في الخلفية. لا يلزم تغيير الجوانب الأخرى للتطبيق (على سبيل المثال ، كيفية استخراج الموقع واستخدامه). لطلب الوصول إلى موقع في الخلفية ، أضف إذن ACCESS_BACKGROUND_LOCATION إلى البيان:

 <manifest> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> </manifest> //Request for the permission like any other permission request: ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION), your-permission-request-code) 

طلب الوصول إلى الموقع في الخلفية

  • المزالق:


تذكير معروض من قبل النظام حول الوصول إلى موقع في الخلفية

بعض الأشياء المهمة التي يجب وضعها في الاعتبار: يمكن تذكير المستخدم بعد منح التطبيق إمكانية الوصول إلى موقع الجهاز في الخلفية ، ومثل أي إذن آخر ، يمكن للمستخدم إلغاء الإذن له. هذا مهم بشكل خاص للتطبيقات حيث Q ليس هدف SDK ، ولكنه يعمل على الأجهزة التي تعمل بنظام Android Q ، لأنه سيحصل على دقة الخلفية الافتراضية إذا كان لديه إذن موقع. تأكد من أن التطبيق الخاص بك يعالج هذه البرامج النصية بأمان. لهذا السبب ، عندما يبدأ تطبيق ما في الخدمة أو يطلب موقعًا ، تحقق لمعرفة ما إذا كان المستخدم لا يزال يسمح للتطبيق بالوصول إلى معلومات الموقع.

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

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


All Articles