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+ นักพัฒนาสามารถขอสิทธิ์ทั้งสองพร้อมกันได้

เครื่องสแกน BLE จำเป็นต้องมี Location Permission หรือไม่?

บน Android การสแกนอุปกรณ์ BLE ต้องใช้ ACCESS_FINE_LOCATION หรือ ACCESS_COARSE_LOCATION เนื่องจากสัญญาณ BLE สามารถใช้สำหรับการหาตำแหน่งแบบสามเหลี่ยมได้ บน iOS BLE ต้องการเพียงสิทธิ์บลูทูธเท่านั้น — ไม่จำเป็นต้องมี 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 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม