יצירת הדרכה מותאמת אישית

בדף הזה מוסבר באופן כללי איך יוצרים הנחיות בהתאמה אישית כחלק מחוויית ניווט בהתאמה אישית.

התהליך הזה שונה מהתהליך שמתואר בקטע ניווט במסלול באופן הבא:

  • קודם צריך ליצור סשן ניווט באופן עצמאי ולקבל מכונה של ניווט דרך הסשן, במקום להפעיל את ה-View Controller.
  • מגדירים מאזין לאירועים כדי להגיב לאירועי ניווט ולנהל אותם.
  1. יוצרים סשן ניווט באמצעות GMSNavigationService.createNavigationSession ומתחילים את הניווט באמצעות קריאה ל-setDestination. כשחוויית הניווט של Google מפעילה את הניווט דרך תצוגת המפה של הניווט, האירועים מתוך סשן הניווט נשלחים אל GMSNavigationServices וממנו הם נשלטים באופן עצמאי ממכונת UI. כלומר, אפשר להריץ אותו בלי ממשק משתמש, או להעביר אותו לכל חוויית משתמש שמבוססת על ממשק משתמש. בגישה הזו, סשן הניווט ממשיך לפעול באפליקציה עד שההפניה האחרונה מוסרת ממנה.
  2. הגדרת ספק מיקום של תמונה שצולמה בנסיעה כדאי להשתמש בספק המיקום אם רוצים שהאפליקציה תעקוב אחרי המיקום באופן רציף, למשל כשמוצגת תצוגת ניווט עם נקודה כחולה לאורך המסלול.
  3. מגדירים מאזין להנחיות מפורטות מפנייה לפנייה באמצעות יישום הפרוטוקול GMSNavigatorListener. לאחר מכן, תוכלו להשתמש במידע הזה כדי להתאים אישית את חוויית הניווט. לדוגמה:
    1. הטמעת שדות טקסט בלבד להעברה פשוטה של מסך עם מסלול הגעה.
    2. עיצוב של שדות ויישוב שלהם בממשק המשתמש שלכם.
  4. הגדרת סימולטור ניווט הפעולה הזו נדרשת לפיתוח ולבדיקה.

יצירת סשן ניווט עצמאי

קטע הקוד הבא מהדגמה מראה ניווט שנוצר בנפרד מבקרת התצוגה. לאחר מכן הקוד מוסיף מפת סקירה כללית שמוגדרת להציג את המיקום הנוכחי שצולם בכביש.

// Create the navigation session.

 _navigationSession = [GMSNavigationServices createNavigationSession];
 GMSRoadSnappedLocationProvider *roadSnappedLocationProvider =
     _navigationSession.roadSnappedLocationProvider;
 [roadSnappedLocationProvider startUpdatingLocation];
 GMSNavigator *navigator = _navigationSession.navigator;
 [navigator addListener:self];
 navigator.voiceGuidance = GMSNavigationVoiceGuidanceSilent;
 navigator.sendsBackgroundNotifications = NO;
 _navigationSession.started = YES;
​​ [navigator setDestinations:@[ destination ]
                   callback:^(GMSRouteStatus routeStatus) {
                      // …handle changes in route status.
                    }];

 // Add an overview map.
 _mapView = [[GMSMapView alloc] initWithFrame:CGRectZero];
 [self.mainStackView addArrangedSubview:_mapView];
 [self.mainStackView setNeedsLayout];
 _mapView.settings.compassButton = YES;
 _mapView.delegate = self;
 _mapView.myLocationEnabled = YES;
 _mapView.roadSnappedMyLocationSource = roadSnappedLocationProvider;

העברת הניווט מחוויה מותאמת אישית לחוויית Google

קטע הקוד הזה ממחיש איך האפליקציה שלכם יכולה לאפשר למשתמש להיכנס לחוויית הניווט של Google מחוויית ניווט בהתאמה אישית. קטע הקוד הזה מראה גם איך האפליקציה מבצעת את המעבר הזה בזמן שיתוף המפה.

`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];

[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];