Geolocation API: وقتی سایت می‌خواد بدونه کاربر کجاست

حتماً تجربه‌ش رو داشتی: وارد یه سایت نقشه یا فروشگاه غذا می‌شی و یه پیام می‌بینی که می‌پرسه «آیا اجازه می‌دی موقعیت مکانی‌ت رو ببینیم؟». این دقیقاً همون قابلیتیه که تو این درس آخر فصل ۱۰ باهاش آشنا می‌شیم: Geolocation API، یکی دیگه از قابلیت‌های HTML5 که مثل Web Storage، یه API جاوااسکریپتی هست، نه یه تگ HTML.

Geolocation API چیه؟

Geolocation API به یه صفحه‌ی وب اجازه می‌ده، با اجازه‌ی صریح کاربر، موقعیت جغرافیایی فعلی اون رو (بر اساس GPS دستگاه، شبکه‌ی وای‌فای، یا آی‌پی) دریافت کنه. این قابلیت هم دقیقاً مثل Web Storage، رسماً بخشی از استاندارد HTML5 محسوب می‌شه، اما هیچ تگ HTML خاصی نداره؛ کاملاً از طریق جاوااسکریپت فراخوانی می‌شه.

اصل مهم: اجازه‌ی صریح کاربر همیشه لازمه

برخلاف بعضی اطلاعاتی که یه سایت می‌تونه بدون اطلاع کاربر جمع‌آوری کنه، موقعیت مکانی جزو حساس‌ترین اطلاعات شخصیه؛ به همین خاطر، مرورگر همیشه یه پنجره‌ی تأیید نشون می‌ده و تا وقتی کاربر صریحاً روی «اجازه بده» کلیک نکنه، هیچ اطلاعاتی در اختیار سایت قرار نمی‌گیره. اگه کاربر رد کنه، سایت هیچ راهی برای دورزدن این تصمیم نداره.

نحوه‌ی فراخوانی پایه (فقط برای آشنایی مفهومی)

<button onclick="getLocation()">نمایش موقعیت من</button>

<script>
  function getLocation() {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(showPosition);
    } else {
      alert("مرورگر شما از Geolocation پشتیبانی نمی‌کند.");
    }
  }

  function showPosition(position) {
    console.log("عرض جغرافیایی: " + position.coords.latitude);
    console.log("طول جغرافیایی: " + position.coords.longitude);
  }
</script>

بیا این کد رو مفهومی بررسی کنیم (نه به‌عنوان آموزش کامل جاوااسکریپت، که خارج از محدوده‌ی این دوره‌ست): با کلیک روی دکمه، تابع getLocation اجرا می‌شه. این تابع اول چک می‌کنه که آیا اصلاً مرورگر کاربر از navigator.geolocation پشتیبانی می‌کنه یا نه (چون بعضی مرورگرهای خیلی قدیمی ممکنه این قابلیت رو نداشته باشن). اگه پشتیبانی وجود داشته باشه، متد getCurrentPosition صدا زده می‌شه که همون پنجره‌ی درخواست اجازه رو برای کاربر باز می‌کنه. اگه کاربر اجازه بده، تابع showPosition اجرا می‌شه و مختصات (عرض و طول جغرافیایی) رو در اختیار می‌ذاره.

چه اطلاعاتی از Geolocation به دست میاد؟

معمولاً اطلاعاتی مثل موارد زیر در دسترس قرار می‌گیرن:

  • عرض جغرافیایی (latitude) و طول جغرافیایی (longitude): مختصات دقیق موقعیت.
  • دقت (accuracy): میزان دقت تخمینی این مختصات، بر حسب متر (مثلاً ممکنه فقط بگه «تو شعاع ۵۰ متری این نقطه»).
  • گاهی اطلاعات اضافه‌ای مثل ارتفاع یا سرعت حرکت (بسته به سخت‌افزار دستگاه).

کاربردهای رایج Geolocation

  • نمایش نزدیک‌ترین شعبه‌ی یه فروشگاه یا رستوران به کاربر
  • محاسبه‌ی هزینه یا زمان تحویل بر اساس فاصله‌ی کاربر تا مبدأ
  • نقشه‌های آنلاین که موقعیت فعلی کاربر رو مستقیم نشون می‌دن
  • اپلیکیشن‌های هواشناسی که خودکار آب‌وهوای شهر فعلی کاربر رو نشون می‌دن
  • سرویس‌های تاکسی آنلاین که موقعیت مبدأ رو خودکار پر می‌کنن

محدودیت مهم: نیاز به HTTPS

مرورگرهای مدرن امروزه اجازه‌ی استفاده از Geolocation API رو فقط تو سایت‌هایی می‌دن که از پروتکل امن HTTPS استفاده می‌کنن (نه HTTP ساده). این یه تصمیم امنیتی مهمه، چون موقعیت مکانی یه اطلاعات حساسه و باید حتماً از طریق یه اتصال رمزنگاری‌شده منتقل بشه.

محدودیت دیگر: دقت متغیر

دقت موقعیت به‌دست‌آمده کاملاً به سخت‌افزار و شرایط کاربر بستگی داره؛ یه گوشی موبایل با GPS فعال معمولاً دقت خیلی بالایی (چند متر) می‌ده، اما یه لپ‌تاپ بدون GPS ممکنه فقط بر اساس آی‌پی یا شبکه‌ی وای‌فای تخمین بزنه که می‌تونه خطای چند کیلومتری هم داشته باشه.

یه نکته‌ی مهم درباره‌ی حریم خصوصی

حتی با وجود اجازه‌ی کاربر، توسعه‌دهنده‌ها باید در استفاده از این اطلاعات کاملاً مسئولانه عمل کنن؛ یعنی فقط برای همون هدفی که به کاربر گفته شده (مثلاً «نمایش نزدیک‌ترین شعبه») ازش استفاده کنن، نه ذخیره‌ی طولانی‌مدت یا اشتراک‌گذاری با شخص ثالث بدون اطلاع کاربر. این یه اصل اخلاقی مهم در طراحی وب مسئولانه‌ست.

چرا این مبحث تو یه دوره‌ی HTML5 مطرح می‌شه؟

همون‌طور که تو ابتدای فصل ۱۰ دیدیم، این فصل به «ویژگی‌ها و APIهای HTML5» اختصاص داره؛ یعنی قابلیت‌هایی که رسماً بخشی از استاندارد HTML5 حساب می‌شن، حتی اگه بعضی‌هاشون (مثل data-*) مستقیم تو تگ‌های HTML ظاهر بشن و بعضی دیگه (مثل Web Storage و Geolocation) کاملاً از طریق جاوااسکریپت فراخوانی بشن. هدف این درس، آشنایی مفهومی با وجود این قابلیت و نقشش در اکوسیستم HTML5 بود؛ پیاده‌سازی کامل و عملی جاوااسکریپتی‌ش، بخشی از دوره‌های تخصصی‌تر جاوااسکریپته.

چند اشتباه رایج (مفهومی)

  • تصور اینکه یه سایت می‌تونه بدون اجازه‌ی صریح کاربر، موقعیتش رو دریافت کنه.
  • انتظار دقت یکسان از Geolocation روی همه‌ی دستگاه‌ها، بدون توجه به تفاوت سخت‌افزاری (GPS در مقابل تخمین بر اساس آی‌پی).
  • تلاش برای استفاده از این API روی یه سایت HTTP ساده (بدون HTTPS)، که توسط مرورگرهای مدرن مسدود می‌شه.

بهترین روش‌ها

  • همیشه دلیل درخواست موقعیت مکانی رو به‌وضوح برای کاربر توضیح بده (مثلاً یه متن کوتاه قبل از درخواست اجازه).
  • همیشه یه راه جایگزین (مثل وارد کردن دستی نام شهر) برای کاربرانی که اجازه نمی‌دن، در نظر بگیر.
  • مطمئن شو سایتت از HTTPS استفاده می‌کنه، وگرنه این قابلیت اصلاً کار نمی‌کنه.

نکته‌ی سئو

Geolocation API تأثیر مستقیمی روی سئو ندارد، چون کاملاً یک قابلیت سمت کاربر و پس از بارگذاری صفحه است؛ اما تجربه‌ی کاربری بهتر (مثل نمایش نتایج مرتبط با موقعیت کاربر) می‌تواند به‌طور غیرمستقیم روی تعامل و رضایت کاربر اثر مثبت بگذارد.

نکته‌ی دسترسی‌پذیری

هنگام استفاده از Geolocation، باید همیشه یه روش جایگزین دستی (مثل وارد کردن نام شهر یا کد پستی) هم ارائه بشه؛ چون بعضی کاربران ممکنه به هر دلیلی (نگرانی حریم خصوصی، محدودیت دستگاه، یا رد اجازه) نتونن یا نخوان از این قابلیت استفاده کنن.

جمع‌بندی

Geolocation API به سایت‌ها اجازه می‌دهد، تنها با اجازه‌ی صریح کاربر، موقعیت جغرافیایی فعلی او را دریافت کنند. این قابلیت از طریق جاوااسکریپت (نه تگ HTML) فراخوانی می‌شود، نیازمند اتصال امن HTTPS است، و دقت آن به سخت‌افزار دستگاه کاربر بستگی دارد؛ استفاده‌ی مسئولانه از این اطلاعات حساس، یک اصل مهم در طراحی وب اخلاقی محسوب می‌شود.