برای ترسیم یک مسیر درون برنامه خود به یک مقصد واحد، با استفاده از Navigation SDK برای iOS، این راهنما را دنبال کنید.
نمای کلی
- همانطور که در بخش «راهاندازی پروژه» توضیح داده شده است، SDK ناوبری را در برنامه خود ادغام کنید.
- پیکربندی یک
GMSMapView - از کاربر بخواهید شرایط و ضوابط را بپذیرد و سرویسهای موقعیت مکانی و اعلانهای پسزمینه را مجاز کند.
- یک آرایه شامل یک یا چند مقصد ایجاد میکند.
یک
GMSNavigatorبرای کنترل ناوبری گام به گام تعریف کنید.- با استفاده از
setDestinationsمقصدها را اضافه کنید. - برای شروع ناوبری،
isGuidanceActiveرا رویtrueتنظیم کنید. - از
simulateLocationsAlongExistingRouteبرای شبیهسازی پیشرفت وسیله نقلیه در طول مسیر، برای آزمایش، اشکالزدایی و نمایش برنامه خود استفاده کنید.
- با استفاده از
کد را ببینید
درخواست مجوزهای لازم از کاربر
قبل از استفاده از کیت توسعه نرمافزار ناوبری (Navigation SDK)، کاربر باید با شرایط و ضوابط موافقت کند و استفاده از سرویسهای موقعیت مکانی را که برای ناوبری لازم است، مجاز بداند. اگر برنامه شما در پسزمینه اجرا شود، باید از کاربر بخواهد اعلانهای هشدار راهنمایی را نیز مجاز کند. این بخش نحوه نمایش مجوزهای لازم را نشان میدهد.
خدمات مکانیابی را مجاز کنید
کیت توسعه نرمافزار ناوبری (Navigation SDK) از سرویسهای موقعیت مکانی استفاده میکند که نیاز به مجوز کاربر دارد. برای فعال کردن سرویسهای موقعیت مکانی و نمایش کادر محاورهای مجوز، این مراحل را دنبال کنید:
فعال کردن قابلیتهای مکان و پسزمینه در Xcode:
- هدف خود را در Xcode باز کنید و برگه Signing & Capabilities را انتخاب کنید. برای جزئیات بیشتر، به راهنمای اپل در مورد افزودن قابلیتها به برنامه خود مراجعه کنید.
- قابلیتهای موقعیت مکانی (همیشه) و موقعیت مکانی (هنگام استفاده) را اضافه کنید. در فیلد متن مربوط به هر کدام، توضیح کوتاهی در مورد اینکه چرا برنامه شما به سرویسهای موقعیت مکانی نیاز دارد، اضافه کنید (برای مثال: «این برنامه برای استفاده از سرویسهای موقعیت مکانی جهت پیمایش گام به گام به مجوز نیاز دارد.»).
- قابلیت حالتهای پسزمینه را اضافه کنید و سپس کادر انتخاب بهروزرسانیهای موقعیت مکانی را انتخاب کنید. بدون این قابلیت، برنامه هنگام شروع ناوبری از کار میافتد. برای جزئیات بیشتر، به راهنمای اپل در مورد مدیریت بهروزرسانیهای موقعیت مکانی در پسزمینه مراجعه کنید.
برای نمایش کادر محاورهای احراز هویت، متد
requestAlwaysAuthorization()از نمونهی location manager را فراخوانی کنید.
سویفت
self.locationManager.requestAlwaysAuthorization()
هدف-سی
[_locationManager requestAlwaysAuthorization];
برای مجوز سرویس موقعیت مکانی، به مستندات کامل اپل مراجعه کنید .
اعلانهای هشدار را برای راهنمایی در پسزمینه مجاز کنید
کیت توسعه نرمافزار ناوبری (Navigation SDK) برای نمایش اعلانهای هشدار در هنگام اجرای برنامه در پسزمینه، به اجازه کاربر نیاز دارد. کد زیر را اضافه کنید تا از کاربر اجازه نمایش این اعلانها را بگیرد:
سویفت
UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
granted, error in
// Handle denied authorization to display notifications.
if !granted || error != nil {
print("User rejected request to display notifications.")
}
}
هدف-سی
// Request authorization for alert notifications.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
completionHandler:
^(
BOOL granted,
NSError *_Nullable error) {
if (!error && granted) {
NSLog(@"iOS Notification Permission: newly Granted");
} else {
NSLog(@"iOS Notification Permission: Failed or Denied");
}
}];
شرایط و ضوابط را بپذیرید
از کد زیر برای نمایش پنجرهی شرایط و ضوابط و فعال کردن ناوبری پس از پذیرش شرایط توسط کاربر استفاده کنید. توجه داشته باشید که این مثال شامل کد مربوط به سرویسهای موقعیت مکانی و اعلانهای هشدار راهنمایی (که قبلاً نشان داده شده است) نیز میشود.
سویفت
let termsAndConditionsOptions = GMSNavigationTermsAndConditionsOptions(companyName: "Ride Sharing Co.")
GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
with: termsAndConditionsOptions) { termsAccepted in
if termsAccepted {
// Enable navigation if the user accepts the terms.
self.mapView.isNavigationEnabled = true
self.mapView.settings.compassButton = true
// Request authorization to use location services.
self.locationManager.requestAlwaysAuthorization()
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
granted, error in
// Handle rejection of notification authorization.
if !granted || error != nil {
print("Authorization to deliver notifications was rejected.")
}
}
} else {
// Handle rejection of terms and conditions.
}
}
هدف-سی
GMSNavigationTermsAndConditionsOptions *termsAndConditionsOptions = [[GMSNavigationTermsAndConditionsOptions alloc] initWithCompanyName:@"Ride Sharing Co."];
[GMSNavigationServices
showTermsAndConditionsDialogIfNeededWithOptions:termsAndConditionsOptions
callback:^(BOOL termsAccepted) {
if (termsAccepted) {
// Enable navigation if the user accepts the terms.
_mapView.navigationEnabled = YES;
_mapView.settings.compassButton = YES;
// Request authorization to use the current device location.
[_locationManager requestAlwaysAuthorization];
// Request authorization for alert notifications which deliver guidance instructions
// in the background.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
completionHandler:
^(
BOOL granted,
NSError *_Nullable error) {
if (!error && granted) {
NSLog(@"iOS Notification Permission: newly Granted");
} else {
NSLog(@"iOS Notification Permission: Failed or Denied");
}
}];
} else {
// Handle rejection of the terms and conditions.
}
}];
ایجاد مسیر و شروع راهنمایی
برای ترسیم یک مسیر، متد setDestinations مربوط به ناویگاتور را با آرایهای از یک یا چند مقصد GMSNavigationWaypoint که باید بازدید شوند، فراخوانی کنید. اگر مسیر با موفقیت محاسبه شود، روی نقشه ظاهر میشود. برای شروع راهنمایی در طول مسیر، isGuidanceActive در تابع فراخوانی، روی true تنظیم کنید.
مثال زیر نشان میدهد:
- ایجاد یک مسیر جدید با یک مقصد.
- راهنمایی اولیه.
- فعال کردن اعلانهای راهنمای پسزمینه.
- شبیهسازی سفر در طول مسیر (اختیاری).
- تنظیم حالت دوربین روی «دنبال کردن» (اختیاری).
سویفت
func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
title: "PCC Natural Market")!)
mapView.navigator?.setDestinations(destinations) { routeStatus in
self.mapView.navigator?.isGuidanceActive = true
self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
self.mapView.cameraMode = .following
}
}
هدف-سی
- (void)startNav {
NSArray<GMSNavigationWaypoint *> *destinations =
@[[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"
title:@"PCC Natural Market"]];
[_mapView.navigator setDestinations:destinations
callback:^(GMSRouteStatus routeStatus){
[_mapView.locationSimulator simulateLocationsAlongExistingRoute];
_mapView.navigator.guidanceActive = YES;
_mapView.cameraMode = GMSNavigationCameraModeFollowing;
}];
}
برای آشنایی با شناسههای مکان، به «شناسههای مکان» مراجعه کنید.
سناریوهای چند مرحلهای
شما میتوانید حداکثر ۲۵ نقطه مسیر را پیکربندی کنید.
متد setDestinations از سفرهای چند مرحلهای پشتیبانی نمیکند. برای پیشبرد نقطهی مسیر به مرحلهی بعدی سفر، continueToNextDestinationWithCompletion() استفاده کنید.
تنظیم حالت سفر
حالت سفر، هم نوع مسیر برای دریافت و هم نحوه تعیین مسیر کاربر را تعریف میکند. میتوانید یکی از چهار حالت سفر را برای یک مسیر تنظیم کنید: رانندگی، دوچرخهسواری، پیادهروی و تاکسی. در حالت رانندگی و تاکسی، مسیر کاربر بر اساس جهت سفر تعیین میشود؛ در حالت دوچرخهسواری و پیادهروی، مسیر با جهتی که دستگاه رو به آن است (به سمت بالای دستگاه در حالت افقی) نمایش داده میشود.
ویژگی travelMode مربوط به نمای نقشه را همانطور که در مثال زیر نشان داده شده است، تنظیم کنید:
سویفت
self.mapView.travelMode = .cycling
هدف-سی
_mapView.travelMode = GMSNavigationTravelModeCycling;
جادههایی را برای اجتناب تعیین کنید
از ویژگیهای avoidsHighways و avoidsTolls BOOL برای اجتناب از بزرگراهها، جادههای دارای عوارض یا هر دو در طول یک مسیر استفاده کنید.
سویفت
self.mapView.navigator?.avoidsTolls = true
هدف-سی
_mapView.navigator.avoidsTolls = YES;
یابنده شناسه مکان
شما میتوانید از PlaceID Finder برای یافتن شناسههای مکان جهت استفاده در مقاصد مسیر استفاده کنید. با استفاده از GMSNavigationWaypoint یک مقصد را از یک placeID اضافه کنید.
متن شناور
شما میتوانید متن شناور را در هر کجای برنامه خود اضافه کنید، تا زمانی که از انتساب گوگل پشتیبانی نشود. کیت توسعه نرمافزار ناوبری (Navigation SDK) از اتصال متن به مختصات خاص (عرض جغرافیایی، طول جغرافیایی) روی نقشه یا به یک برچسب پشتیبانی نمیکند. برای اطلاعات بیشتر، به پنجرههای اطلاعات (Info windows ) مراجعه کنید.