مقدمة: لماذا لا يزال Android 9 مهمًا (حتى في عام 2025)
تخيل موقفًا: أنت تكتب تطبيقًا يجب أن يتواصل مع خادم عبر HTTP القديم الجيد. أو تختبر API محلي على localhost. تقوم بتشغيله على Android 9 (Pie) - وتحصل على شاشة رمادية، خطأ في الاتصال وسجل يحتوي على كلمة مخيفة Cleartext HTTP traffic not permitted. مألوف؟
كان Android 9 (API 28) نقطة تحول: قامت Google افتراضيًا بحظر اتصالات HTTP غير الآمنة. أصبح هذا تحديًا للمطورين. حتى في عام 2025، عندما تم إصدار Android 14 و 15، لا تزال ملايين الأجهزة تعمل على "التسعة". علاوة على ذلك، تضطر العديد من التطبيقات المؤسسية والأنظمة القديمة إلى دعم HTTP. ماذا تفعل؟ كيف تسمح بجميع أنواع الاتصالات الشبكية HTTP و HTTPS دون انتهاك الأمان؟
في هذه المقالة، سنستعرض أفضل الممارسات في Kotlin التي تعمل فعليًا في عام 2025. ستتعلم ليس فقط "كيف تفعل"، بل "كيف تفعلها بشكل صحيح" - بحيث لا يحظرها Google Play ولا يتضرر المستخدمون.
ما الذي تغير في Android 9: نبذة تاريخية سريعة
قبل Android 8.1، كان المطورون يستخدمون HTTP بهدوء. ولكن مع إصدار Pie، قدمت Google سياسة أمان تحظر cleartext traffic - أي حركة مرور غير مشفرة عبر TLS. أثر هذا على:
- طلبات HTTP (المنفذ 80)؛
- WebSocket بدون تشفير (ws://)؛
- بعض البروتوكولات المخصصة.
الاستثناء هو HTTPS (المنفذ 443) و localhost المحلي. ولكن ماذا لو كان خادمك لا يزال يعمل على HTTP؟ أو كنت تطور تطبيقًا للشبكة الداخلية للشركة؟
الحل هو Network Security Configuration. إنه ملف XML يخبر النظام: "مرحبًا، يمكن الوثوق بهذا النطاق". في عام 2025، هذا هو المعيار الفعلي، وسنوضح كيفية تكوينه بشكل صحيح.
الطريقة 1: أسهل طريقة - تعطيل الفحص للتطبيق بأكمله
إذا كنت تريد السماح بجميع أنواع الاتصالات الشبكية HTTP و HTTPS للتطبيق بأكمله (على سبيل المثال، للنموذج الأولي أو الإصدار التجريبي)، يمكنك استخدام علامة واحدة في البيان. لكننا نحذر: بالنسبة للإنتاج، هذه ممارسة سيئة.
الخطوة 1: أضف السمة إلى AndroidManifest.xml
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:usesCleartextTraffic="true"> ...</application>الخطوة 2: تأكد من أن targetSdkVersion = 28 أو أقل
إذا كان targetSdkVersion >= 28، فإن هذه العلامة لا تزال تعمل. لكن Google Play قد يحذر المستخدم من تطبيق غير آمن. في عام 2025، من الأفضل دمج هذه الطريقة مع إعدادات أكثر دقة.
الإيجابيات: سريع، يعمل لجميع النطاقات.
السلبيات: ضعف أمام هجمات MitM، لن يجتاز مراجعة Google Play.
الطريقة 2: الطريق الصحيح عبر Network Security Config (إصدار 2025)
هذه الطريقة هي المعيار الذهبي. تقوم بإنشاء ملف XML تحدد فيه النطاقات والبروتوكولات المسموح بها. في عام 2025، نوصي باستخدامه لجميع المشاريع الجديدة.
الخطوة 1: أنشئ ملف res/xml/network_security_config.xml
إليك مثال يسمح بجميع HTTP و HTTPS لأي نطاق (ولكن مع قيود):
<?xml version="1.0" encoding="utf-8"?><network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config></network-security-config>الخطوة 2: قم بتوصيل التكوين في AndroidManifest
<application android:networkSecurityConfig="@xml/network_security_config" ...></application>Go