مقدمه
کیت توسعه نرمافزار ناوبری (Nav SDK) بهترین ویژگی نوبتدهی را در نوع خود ارائه میدهد که میتواند برای مشتریان و رانندگان، به ویژه رانندگان جدید یا رانندگانی که با منطقه آشنا نیستند، بسیار مفید باشد. با این حال، موارد استفاده خاصی وجود دارد که شرکتها نمیخواهند با رابط کاربری ناوبری نوبتدهی، توجه رانندگان را از جاده منحرف کنند، اما همچنان میخواهند مکان وسایل نقلیه را ردیابی کرده و به رویدادهای مربوط به مسیری که طی میکنند گوش دهند. به عنوان مثال، رانندگان کامیون، به ویژه اگر مواد خطرناک را حمل میکنند. سایر شرکتهایی که تحویل کالا را با روشهای مختلف - مانند پیادهروی برای مسافتهای کوتاه - انجام میدهند، ممکن است نیازی به فعال بودن نوبتدهی نداشته باشند و این باعث صرفهجویی در عمر باتری دستگاه میشود.
محدوده
این سند توضیح میدهد که چگونه شرکتها میتوانند نقشه ناوبری (view) را از Nav SDK پنهان کنند و همچنان از تمام ویژگیهای Nav SDK در رابطه با ردیابی موقعیت مکانی، اشتراک رویدادها و فراخوانیهای مجدد بهرهمند شوند. دادههای جمعآوریشده از Nav SDK در حالت بدون سر (headless mode) میتوانند برای بهبود قابلیت ردیابی وسایل نقلیه و درک دقیقتر ETAها استفاده شوند که در نهایت منجر به شفافیت و کارایی میشود.
SDK ناوبری
کیت توسعه نرمافزار ناوبری (Navigation SDK) یک کتابخانه بومی اندروید/iOS است که به اپلیکیشن راننده اضافه میشود. در زمینه تحرکپذیری، این کیت مسئول موارد زیر است:
- دریافت مکانهای ثبتشده از جاده از برنامهای که آن را اجرا میکند. مکانهای ثبتشده از جاده دقیقتر از FusedLocationProvider (FLP) اندروید هستند، زیرا از شبکه جادهای گوگل برای ثبت مکانها به نزدیکترین بخش جاده استفاده میکنند که باعث میشود ETAها و سایر اطلاعات FLP بسیار دقیقتر باشند.
- تجربهای گام به گام که به رانندگان اجازه میدهد با در نظر گرفتن ترافیک لحظهای و سایر محدودیتهای مسیر، به طور مؤثر از نقطه A به نقطه B برسند.
- اجرای رویدادها بر اساس پیشرفت مسیر، موقعیت مکانی، سرعت و غیره از طریق شنوندههای رویداد و فراخوانیهای ثبتشده.
تجربه پیشفرض
وقتی مشتریان Nav SDK را پیادهسازی میکنند، فرض بر این است که به ویژگی نوبتدهی نیاز دارند. به همین دلیل است که مستندات Nav SDK ( اندروید و iOS ) دستورالعملهایی در مورد نحوه پیادهسازی Nav SDK با فعال بودن نوبتدهی ارائه میدهد.
در اندروید، رندر نقشه گام به گام در برنامه با استفاده از SupportNavigationFragment یا NavigationView انجام میشود، در حالی که در iOS این کار با GMSMapView انجام میشود. این عناصر رابط کاربری، نقشه تعاملی و رابط کاربری ناوبری گام به گام را به برنامه شما اضافه میکنند.
در بخش بعدی، SDK پیشفرض Nav با کد فعالسازی گام به گام را با کد SDK بدون سرصفحه Nav برای اندروید و iOS مقایسه میکنیم و تغییرات مورد نیاز را برجسته میکنیم.
راه حل
اندروید
در اندروید، این کد جاوایی است که به عنوان بخشی از برنامه نمونه Nav SDK ارائه میشود.
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
setContentView(R.layout.activity_nav_fragment);
mNavFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
همانطور که میبینید، view به طرحبندیای اشاره میکند که باید برای ترسیم تجربه ناوبری استفاده شود و در این حالت، به جای NavigationView ، یک SupportNavigationFragment ایجاد میشود.
برای اینکه Nav SDK در حالت headless شروع به کار کند، کافی است آن دو دستورالعمل را حذف کنیم. اگر هدف این باشد که بین headless و non-headless (ناوبری فعال) تغییر وضعیت دهیم، میتوان از یک متغیر برای تعیین اینکه آیا باید از headless استفاده شود یا خیر، استفاده کرد، برای مثال:
Boolean mHeadless = true;
سپس میتوان بعداً از آن استفاده کرد، مانند این:
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
if(!mHeadless) {
setContentView(R.layout.activity_nav_fragment);
mNavFragment =
(SupportNavigationFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
}
متغیر mHeadless میتواند به یک کامپوننت رابط کاربری (مثلاً toggle) لینک شود که headless را به طور متناسب فعال یا غیرفعال میکند.
![]() | ![]() |
| Nav SDK با ناوبری فعال (headless خاموش) در حال اجرا است. | همان برنامه اما اکنون با Nav SDK که در حالت بدون سر (headless mode) اجرا میشود. |
همانطور که در مثال سمت راست بالا مشاهده میکنید، ناوبری Nav SDK در زیر صحنهها اجرا میشود اما تجربه نوبت به نوبت غیرفعال است.
آیاواس
در iOS، حالت بیسرنشین (headless mode) را میتوان به راحتی با اضافه کردن تنظیمات زیر در هنگام مقداردهی اولیه MapView انجام داد:
mapView.isHidden = true
برای مثال:
/// The main map view.
private lazy var mapView: GMSMapView = {
let mapView = GMSMapView(frame: .zero)
mapView.isHidden = true /// Make it headless!
mapView.isNavigationEnabled = true
mapView.settings.compassButton = true
mapView.delegate = self
return mapView
}()
ببینید چطور به نظر میرسد - صفحه نمایش به نحوه پیادهسازی رابط کاربری بستگی دارد و تصویر فقط برای نشان دادن تأثیر پنهان کردن mapView است:
![]() | ![]() |
| ناوبری فعال در حال اجرا نمونه اپلیکیشن iOS | همان برنامه در حالت بدون سر |
ملاحظات اجرایی
از آنجایی که حالت بدون سر (headless mode) چیزی بیش از پنهان کردن نقشه ناوبری از صفحه نمایش نیست، فقط زمان استفاده از صفحه نمایش ذخیره میشود که باعث افزایش زمان باتری دستگاه میشود. با این حال، از آنجایی که Nav SDK به اجرا ادامه میدهد، بهروزرسانیهای مکان و تمام فراخوانیهای رویداد به طور عادی انجام میشوند، بنابراین هیچ عارضه جانبی در استفاده از این پیکربندی وجود ندارد.
نتیجهگیری
این سند نشان میدهد که Nav SDK چقدر انعطافپذیر است و با توجه به محدودیتهای سیستم عاملهای مختلف، چه دستاوردهایی میتوانیم داشته باشیم. همچنین به مشتریان این امکان را میدهد تا تجربه رانندگی خود را سفارشی کنند تا از حواسپرتی جلوگیری کرده و ایمنی را بهبود بخشند.
منابع اضافی
اگر به دلایل ذکر شده، لازم باشد اعلانها در حین ناوبری غیرفعال شوند، این کار نیز قابل انجام است، لطفاً به «اصلاح اعلانهای نوبت به نوبت در Nav SDK» مراجعه کنید.



