אפשר להיעזר במדריך הזה כדי להציג מסלול בתוך האפליקציה ליעד אחד, באמצעות SDK ניווט ל-iOS.
סקירה כללית
- שילוב ה-SDK לניווט באפליקציה, כפי שמתואר בקטע Set up your project (הגדרת הפרויקט).
- מגדירים
GMSMapView
. - להציג למשתמש בקשה לאשר את התנאים וההגבלות ולאשר את המיקום שירותים והתראות ברקע.
- יוצרים מערך שמכיל יעד אחד או יותר.
הגדרת
GMSNavigator
כדי לשלוט בניווט מסלול מפורט.- מוסיפים יעדים באמצעות
setDestinations
. - הגדרה של
isGuidanceActive
אלtrue
כדי להתחיל בניווט. - שימוש ב-
simulateLocationsAlongExistingRoute
לדמות את התקדמות הרכב במסלול, לצורך בדיקה, ניפוי באגים והדגמה של האפליקציה.
- מוסיפים יעדים באמצעות
להצגת הקוד
לבקש מהמשתמש את ההרשאות הדרושות
לפני השימוש ב-Navigation SDK, המשתמש חייב להסכים תנאים ולהגבלות, ולאשר את השימוש בשירותי מיקום, שנדרש לניווט. אם האפליקציה תפעל ברקע, היא חייבת גם לבקש מהמשתמש לאשר התראות על הנחיות. בקטע הזה מופיע איך להציג את בקשות ההרשאה הנדרשות.
מתן הרשאה לשירותי מיקום
SDK לניווט משתמש בשירותי מיקום, שמחייבים בהרשאה למשתמש. כדי להפעיל שירותי מיקום ולהציג את ההרשאה לבצע את השלבים הבאים:
- מוסיפים את המפתח
NSLocationAlwaysUsageDescription
אלInfo.plist
. לגבי הערך, יש להוסיף הסבר קצר למה נדרש מיקום לאפליקציה שירותים שונים. לדוגמה: "לאפליקציה הזו נדרשת הרשאה להשתמש בשירותי מיקום בשביל ניווט מפורט".
כדי להציג את תיבת הדו-שיח של ההרשאה, צריך להפעיל את
requestAlwaysAuthorization()
או המופע של מנהל המיקומים.
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
אישור התראות כדי לקבל הנחיות ברקע
ל-SDK לניווט נדרשת הרשאת משתמש כדי לספק התראה התראות כשהאפליקציה פועלת ברקע. צריך להוסיף את הקוד הבא כדי לבקש מהמשתמש הרשאה להציג את ההתראות הבאות:
Swift
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.")
}
}
Objective-C
// 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");
}
}];
אישור התנאים וההגבלות
צריך להשתמש בקוד הבא כדי להציג את תיבת הדו-שיח של התנאים וההגבלות ולהפעיל ניווט כשהמשתמש מאשר את התנאים. שימו לב שהדוגמה הזו כוללת הקוד עבור שירותי מיקום והתראות התראה על הנחיות (מוצג בעבר).
Swift
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.
}
}
Objective-C
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
קריאה חוזרת.
כך רואים את הדוגמה הבאה:
- יצירת מסלול חדש עם שני יעדים.
- ההנחיה מתחילה.
- הפעלת התראות על הנחיות ברקע.
- הדמיה של נסיעה לאורך המסלול (אופציונלי).
- הגדרת מצב המצלמה ל'מעקב' (אופציונלי).
Swift
func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
title: "PCC Natural Market")!)
destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJJ326ROcSkFQRBfUzOL2DSbo",
title:"Marina Park")!)
mapView.navigator?.setDestinations(destinations) { routeStatus in
self.mapView.navigator?.isGuidanceActive = true
self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
self.mapView.cameraMode = .following
}
}
Objective-C
- (void)startNav {
NSArray<GMSNavigationWaypoint *> *destinations =
@[[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"
title:@"PCC Natural Market"],
[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJJ326ROcSkFQRBfUzOL2DSbo"
title:@"Marina Park"]];
[_mapView.navigator setDestinations:destinations
callback:^(GMSRouteStatus routeStatus){
[_mapView.locationSimulator simulateLocationsAlongExistingRoute];
_mapView.navigator.guidanceActive = YES;
_mapView.cameraMode = GMSNavigationCameraModeFollowing;
}];
}
מידע נוסף על מזהי מקומות זמין במאמר מזהי מקומות.
הגדרת מצב נסיעה
מצב הנסיעה קובע איזה סוג מסלול יאוחזר ואיזה סוג של המסלול של המשתמש נקבע. אפשר להגדיר אחד מתוך ארבעה מצבי נסיעה של מסלול: נהיגה, רכיבה על אופניים, הליכה ומונית. במצב נהיגה ומוניות, המסלול של המשתמש בהתאם לכיוון הנסיעה; במצב רכיבה על אופניים והליכה. שהייצוג שלו מייצג את הכיוון שאליו המכשיר פונה.
מגדירים את travelMode
של תצוגת המפה, כפי שמוצג בדוגמה הבאה:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
הגדרת כבישים שמהם יש להימנע
כדי להימנע מכך, צריך להשתמש במאפיינים avoidsHighways
ו-avoidsTolls
BOOL
כבישים מהירים ו/או כבישי אגרה לאורך מסלול.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
מאתר מזהה המיקום
אפשר להשתמש במאתר מזהה המקום.
כדי למצוא מזהי מקומות שישמשו ליעדי מסלולים. צריך להוסיף יעד מplaceID
עם GMSNavigationWaypoint
.
טקסט צף
ניתן להוסיף טקסט צף בכל מקום באפליקציה, כל עוד שהשיוך שלהן לא נכלל. ערכת ה-SDK לניווט לא תומכת בעיגון טקסט לקו רוחב/אורך במפה או לתווית. לקבלת מידע נוסף, ראו חלונות של מידע.