ניווט במסלול

אפשר להיעזר במדריך הזה כדי להציג מסלול בתוך האפליקציה ליעד אחד, באמצעות SDK ניווט ל-iOS.

סקירה כללית

  1. שילוב ה-SDK לניווט באפליקציה, כפי שמתואר בקטע Set up your project (הגדרת הפרויקט).
  2. מגדירים GMSMapView.
  3. להציג למשתמש בקשה לאשר את התנאים וההגבלות ולאשר את המיקום שירותים והתראות ברקע.
  4. יוצרים מערך שמכיל יעד אחד או יותר.
  5. הגדרת GMSNavigator כדי לשלוט בניווט מסלול מפורט.

להצגת הקוד

לבקש מהמשתמש את ההרשאות הדרושות

לפני השימוש ב-Navigation SDK, המשתמש חייב להסכים תנאים ולהגבלות, ולאשר את השימוש בשירותי מיקום, שנדרש לניווט. אם האפליקציה תפעל ברקע, היא חייבת גם לבקש מהמשתמש לאשר התראות על הנחיות. בקטע הזה מופיע איך להציג את בקשות ההרשאה הנדרשות.

מתן הרשאה לשירותי מיקום

SDK לניווט משתמש בשירותי מיקום, שמחייבים בהרשאה למשתמש. כדי להפעיל שירותי מיקום ולהציג את ההרשאה לבצע את השלבים הבאים:

  1. מוסיפים את המפתח NSLocationAlwaysUsageDescription אל Info.plist.
  2. לגבי הערך, יש להוסיף הסבר קצר למה נדרש מיקום לאפליקציה שירותים שונים. לדוגמה: "לאפליקציה הזו נדרשת הרשאה להשתמש בשירותי מיקום בשביל ניווט מפורט".

  3. כדי להציג את תיבת הדו-שיח של ההרשאה, צריך להפעיל את 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 לניווט לא תומכת בעיגון טקסט לקו רוחב/אורך במפה או לתווית. לקבלת מידע נוסף, ראו חלונות של מידע.