Location Permission في التطوير المحمول: ما هو، مستويات الوصول ومبدأ العمل

المؤلف: IT Sectr نُشر: 2026-05-21 وقت القراءة: 8 دق

Location Permission هو إذن يطلبه التطبيق المحمول من المستخدم للوصول إلى بيانات موقعه الجغرافي. بدون هذا الإذن، لا يمكن للتطبيق تحديد إحداثيات الجهاز، وبالتالي لا يمكنه تقديم خدمات الموقع الجغرافي. وفقًا لـ Apple Developer Documentation, 2024، جميع التطبيقات التي تستخدم خدمات الموقع الجغرافي ملزمة بطلب موافقة صريحة من المستخدم عبر حوار النظام.

الملخص

  • Location Permission — إذن إلزامي للوصول إلى الموقع الجغرافي للجهاز في التطبيقات المحمولة.
  • مستويات الوصول تنقسم إلى الخلفية وأثناء استخدام التطبيق على كلتا المنصتين.
  • Android يستخدم ACCESS_FINE_LOCATION وACCESS_COARSE_LOCATION لتحديد الإحداثيات بدقة وتقريبًا.
  • iOS يتطلب إضافة مفتاحي NSLocationWhenInUseUsageDescription وNSLocationAlwaysUsageDescription في Info.plist.
  • طلب الإذن يجب أن يحتوي على شرح واضح لسبب حاجة التطبيق لبيانات الموقع.

ما هو Location Permission؟

Location Permission هو آلية نظام تشغيل تنظم وصول التطبيقات إلى بيانات الموقع الجغرافي للجهاز. بدون موافقة صريحة من المستخدم، لا يمكن للتطبيق الحصول على إحداثيات GPS أو بيانات شبكات Wi-Fi أو معلومات أبراج الاتصالات.

تنفذ منصتا Android وiOS نظام الأذونات الخاص بهما، لكن المنطق العام واحد: يعلن التطبيق عن الأذونات المطلوبة في ملف البيان أو التكوين، ثم يطلبها في وقت التشغيل. وفقًا لـ Android Developers, 2024، بدءًا من Android 10، تنتمي جميع أذونات الموقع الجغرافي إلى فئة الأذونات الخطرة وتتطلب طلبًا في وقت التشغيل.

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

لماذا نحتاج إذن الموقع الجغرافي

إذن الموقع الجغرافي ضروري لأي تطبيق تعتمد وظائفه على معرفة الموقع الفعلي للمستخدم. الخرائط والملاحة، تطبيقات التوصيل، خدمات الطقس، شبكات التواصل مع العلامات الجغرافية — كل هذه الفئات من البرامج تتطلب Location Permission.

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

وفقًا لدراسة أجراها Pew Research Center (2024)، حوالي 45% من المستخدمين يلغون الوصول إلى الموقع الجغرافي في التطبيقات التي لا تستخدمه للوظائف الأساسية. وهذا يعني أن المطور يحتاج إلى تبرير الطلب بوضوح وتقديم آليات بديلة لمن رفض Location Permission.

المتطلبات القانونية

يتطلب GDPR في أوروبا والقانون الاتحادي 152-FZ في روسيا الحصول على موافقة مستنيرة لمعالجة بيانات الموقع. يجب على التطبيق ليس فقط طلب الإذن عبر حوار النظام، بل وأيضًا تقديم إشعار منفصل حول أغراض جمع البيانات. انتهاك هذه المتطلبات يستوجب غرامات تصل إلى 20 مليون يورو أو 4% من الإيرادات السنوية للشركة.

عواقب عدم وجود الإذن

إذا لم يطلب التطبيق Location Permission أو رفض المستخدم الوصول، يجب على المطور توفير سيناريو بديل. لتطبيق الخرائط، قد يكون الإدخال اليدوي للعنوان؛ لتطبيق التوصيل — الاختيار من قائمة العناوين المحفوظة؛ لخدمة الطقس — تحديد المدينة بواسطة عنوان IP. Graceful degradation (التدهور التدريجي) هو ممارسة قياسية موصى بها من Google وApple.

مستويات الوصول إلى الموقع الجغرافي

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

مستوى الوصولAndroidiOS
أثناء الاستخدامفقط عندما يكون التطبيق نشطًاWhen In Use — فقط في التطبيق
الخلفيةAlways — باستمرار، حتى في الخلفيةAlways — يتطلب مراجعة إضافية من App Store
تقريبيACCESS_COARSE_LOCATION (دقة تصل إلى 500 م)مع خيار Precision = Off (iOS 14+)

ACCESS_FINE_LOCATION وACCESS_COARSE_LOCATION في Android

ACCESS_FINE_LOCATION يوفر الوصول إلى إحداثيات GPS دقيقة بهامش خطأ يصل إلى عدة أمتار. للإعلان عن هذا الإذن في البيان، يتم استخدام الثابت android.permission.ACCESS_FINE_LOCATION. ACCESS_COARSE_LOCATION، بدوره، يوفر موقعًا تقريبيًا بدقة تصل إلى 500 متر بناءً على بيانات Wi-Fi وأبراج الاتصالات.

When In Use وAlways في iOS

When In Use يسمح للتطبيق بتلقي الإحداثيات فقط عندما يكون مفتوحًا على الشاشة. Always يوفر الوصول إلى الموقع الجغرافي حتى في الخلفية، ولكنه يتطلب مراجعة إلزامية من App Store. بدءًا من iOS 14، يمكن للمستخدم تعطيل التحديد الدقيق بشكل منفصل لكل تطبيق عبر مفتاح Precision.

طلب Location Permission في Android

طلب Location Permission في Android يتم على مرحلتين: الإعلان عن الأذونات في البيان والطلب في وقت التشغيل. بدءًا من Android 6.0 (API 23)، يتم طلب جميع الأذونات الخطرة أثناء تشغيل التطبيق، وليس أثناء التثبيت.

الإعلان في البيان

الخطوة الأولى هي إضافة الأذونات اللازمة إلى ملف AndroidManifest.xml. يتم استخدام ثوابت مختلفة للتحديد الدقيق والتقريبي.

xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

الطلب في وقت التشغيل في Kotlin

بعد الإعلان في البيان، يجب استدعاء حوار النظام لطلب الإذن في كود التطبيق. لنلقِ نظرة على مثال في Kotlin باستخدام Activity Result API.

kotlin
private val locationPermissionRequest =
    registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
    when {
        permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
            // تم منح الإذن
            getLocation()
        }
        permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
            // الموقع التقريبي فقط
            getCoarseLocation()
        }
        else -> {
            // المستخدم رفض
            showLocationExplanation()
        }
    }
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    checkLocationPermission()
}

معالجة الرفض وإعادة الطلب

إذا رفض المستخدم الوصول، لا يسمح نظام Android بعرض الحوار مرة أخرى تلقائيًا. يحتاج المطور إلى استدعاء shouldShowRequestPermissionRationale لعرض شرح تمهيدي. في حالة الرفض المتكرر مع علامة Never Ask Again، يجب توجيه المستخدم إلى إعدادات النظام.

kotlin
private fun checkLocationPermission() {
    when {
        ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
            PackageManager.PERMISSION_GRANTED -> {
            getLocation()
        }
        ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.ACCESS_FINE_LOCATION) -> {
            showRationaleDialog {
                requestLocationPermission()
            }
        }
        else -> {
            openAppSettings()
        }
    }
}

طلب Location Permission في iOS

طلب Location Permission في iOS يتطلب إضافة مفاتيح خاصة إلى ملف Info.plist واستدعاء طرق من فئة CLLocationManager. تولي Apple اهتمامًا خاصًا بالخصوصية، لذلك يجب أن يكون نص الشرح في حوار الطلب محددًا قدر الإمكان.

تكوين Info.plist

لطلب الموقع في iOS، تحتاج إلى إضافة مفتاح واحد أو كلا المفتاحين إلى Info.plist: NSLocationWhenInUseUsageDescription للوصول أثناء الاستخدام و NSLocationAlwaysAndWhenInUseUsageDescription للوصول في الخلفية. قيمة كل مفتاح هي نص سيظهر للمستخدم في الحوار.

xml
<key>NSLocationWhenInUseUsageDescription</key>
<string>تطبيقك يحتاج موقعك لعرض النقاط القريبة على الخريطة.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>تطبيقك يحتاج الوصول إلى الموقع الجغرافي في الخلفية لتتبع المسار.</string>

الطلب في Swift

في كود Swift، يتم الطلب من خلال مثيل من CLLocationManager. اعتمادًا على مستوى الوصول المطلوب، يتم استدعاء requestWhenInUseAuthorization أو requestAlwaysAuthorization.

swift
import CoreLocation

class LocationManager: NSObject, CLLocationManagerDelegate {
    private let manager = CLLocationManager()

    func requestLocationAccess() {
        manager.delegate = self
        manager.requestWhenInUseAuthorization()
    }

    func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
        switch manager.authorizationStatus {
        case .authorizedWhenInUse, .authorizedAlways:
            startLocationUpdates()
        case .denied, .restricted:
            showSettingsAlert()
        case .notDetermined:
            break
        }
    }
}

الفرق بين المنصتين

على عكس Android، لا يوفر iOS للمطور طريقة للتحقق من shouldShowRequestPermissionRationale. النظام نفسه يقرر متى يعرض الشرح. بالإضافة إلى ذلك، في iOS يمكن للمستخدم تغيير الإذن فقط من خلال إعدادات النظام — لا يمكن للتطبيق إعادة عرض حوار النظام بعد أن اتخذ المستخدم قرارًا. RequestAlwaysAuthorization يطلب أولاً When In Use، ثم بعد الحصول على الموافقة الأولى، حوارًا منفصلاً للوصول في الخلفية.

أفضل الممارسات للعمل مع الموقع الجغرافي

أفضل الممارسات للعمل مع Location Permission تساعد في تقليل رفض المستخدمين والامتثال لمتطلبات متاجر التطبيقات. نشرت Google وApple توصيات يزيد الامتثال لها من احتمالية الموافقة على التطبيق.

طلب الإذن في السياق

لا تظهر حوار طلب Location Permission فور بدء التطبيق. المستخدم الذي فتح التطبيق للتو لا يفهم بعد لماذا يحتاج إلى منح الوصول إلى الموقع الجغرافي. Contextual request يعني أن الحوار يظهر في اللحظة التي يحتاج فيها المستخدم بالفعل إلى وظيفة تتطلب الإذن. على سبيل المثال، عند النقر على زر “البحث عن أقرب متجر”.

اشرح السبب مسبقًا

قبل حوار النظام، اعرض شاشة الشرح الخاصة بك (pre-permission screen). عليها، اشرح لماذا يحتاج التطبيق إلى الموقع الجغرافي، وما هي البيانات التي يتم جمعها وكيف سيتم استخدامها. بعد أن ينقر المستخدم على “سماح” على شاشتك، اعرض حوار النظام. وفقًا لـ Appsflyer (2024)، يزيد هذا النهج من نسبة الموافقة بنسبة 25-35%.

لا تطلب Always بدون ضرورة

الوصول في الخلفية إلى الموقع الجغرافي مطلوب فقط للتطبيقات التي تعمل في الخلفية: الملاحين، متتبعي النشاط، تطبيقات التوصيل. إذا كان تطبيقك يحتاج إلى إحداثيات فقط عند فتح الشاشة، اطلب When In Use. سترفض App Store التطبيق إذا لم يكن Always مبررًا وظيفيًا. في Android، يتم تنظيم الوصول في الخلفية بشكل إضافي من خلال إذن ACCESS_BACKGROUND_LOCATION.

الأسئلة الشائعة

ماذا يحدث إذا رفض المستخدم Location Permission؟

يجب على التطبيق معالجة الرفض بشكل صحيح وتقديم سيناريو بديل. على سبيل المثال، الإدخال اليدوي للعنوان أو تحديد المدينة بواسطة عنوان IP. لا يتم عرض حوار النظام مرة أخرى — يجب توجيه المستخدم إلى الإعدادات.

هل يمكن طلب Location Permission بدون شرح؟

تقنيًا، نعم — يمكن عرض حوار النظام بدون شاشة تمهيدية. ومع ذلك، فإن نسبة الموافقة بدون شرح تبلغ 30-40%، بينما مع شاشة تمهيدية تبلغ 60-75%. توصي Apple وGoogle دائمًا بشرح سبب الطلب.

كيفية التحقق من حالة Location Permission في Android؟

استخدم ContextCompat.checkSelfPermission مع الثابت Manifest.permission.ACCESS_FINE_LOCATION. تعيد الطريقة PERMISSION_GRANTED أو PERMISSION_DENIED، مما يسمح بتحديد الحالة الحالية دون استدعاء حوار النظام.

ما الفرق بين ACCESS_FINE_LOCATION وACCESS_COARSE_LOCATION؟

ACCESS_FINE_LOCATION يوفر الوصول إلى إحداثيات GPS دقيقة بهامش خطأ 3-10 أمتار. ACCESS_COARSE_LOCATION يوفر موقعًا تقريبيًا بدقة تصل إلى 500 متر بناءً على Wi-Fi وأبراج الاتصالات. في Android 12+، يمكن للمطور طلب كلا الإذنين في وقت واحد.

هل يحتاج Location Permission لماسحات BLE؟

في Android، لمسح أجهزة BLE يتطلب ACCESS_FINE_LOCATION أو ACCESS_COARSE_LOCATION، لأن إشارات BLE يمكن استخدامها لتثليث الموقع. في iOS، يتطلب BLE فقط إذن Bluetooth — لا حاجة لـ Location Permission.

الخلاصة

  • Location Permission — آلية رئيسية لحماية الخصوصية تنظم وصول التطبيقات إلى الموقع الجغرافي للجهاز.
  • مستويات الوصول تشمل أثناء الاستخدام (When In Use) والخلفية (Always) في iOS، بالإضافة إلى الدقيق (ACCESS_FINE_LOCATION) والتقريبي (ACCESS_COARSE_LOCATION) في Android.
  • Android يتطلب الإعلان عن الأذونات في البيان والطلب في وقت التشغيل عبر Activity Result API بدءًا من API 23.
  • iOS يتطلب إضافة مفاتيح إلى Info.plist واستدعاء طرق CLLocationManager مع تحديد إلزامي للسبب في نص الطلب.
  • Contextual request — أفضل ممارسة حيث يظهر الحوار في لحظة الحاجة، وليس عند بدء التطبيق.
  • Pre-permission screen تزيد نسبة الموافقة بنسبة 25-35% وفقًا لـ Appsflyer (2024).
  • رفض المستخدم يتطلب graceful degradation — سيناريو بديل بدون استخدام الموقع الجغرافي.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا