สร้างคําแนะนําที่กําหนดเอง

หน้านี้จะกล่าวถึงขั้นตอนระดับสูงที่คุณทำตามเพื่อสร้างคำแนะนำที่กำหนดเองในฐานะส่วนหนึ่งของประสบการณ์การนำทางที่กำหนดเอง

กระบวนการนี้แตกต่างจากกระบวนการที่อธิบายไว้ในส่วนนำทางบนเส้นทาง ดังนี้

  • ก่อนอื่นคุณเริ่มต้นเซสชันการนำทางได้อย่างอิสระ และรับอินสแตนซ์ตัวนำทางผ่านเซสชันแทนการเรียกใช้ตัวควบคุมมุมมอง
  • คุณตั้งค่า Listener เหตุการณ์เพื่อตอบกลับและจัดการเหตุการณ์การนำทางได้
  1. สร้างเซสชันการนำทางโดยใช้ GMSNavigationService.createNavigationSession และเริ่มการนำทางด้วยการเรียก setDestination เมื่อประสบการณ์การนำทางของ Google จะเรียกใช้ตัวนำทางผ่านมุมมองแผนที่การนำทาง GMSNavigationServices จะควบคุมและรับสตรีมเหตุการณ์จากเซสชันการนำทางโดยอิสระจากอินสแตนซ์ UI ซึ่งหมายความว่าสามารถทำงานโดยไม่มี UI ได้ หรือจะส่งผ่านไปยังประสบการณ์ใช้งานที่ใช้ UI ใดก็ได้ ด้วยวิธีการนี้ เซสชันการนำทางจะยังคงทำงานต่อไปในแอปของคุณจนกว่าจะนำการอ้างอิงสุดท้ายออกจากแอป
  2. กำหนดผู้ให้บริการตำแหน่งที่มีถนนสแนป ใช้ผู้ให้บริการตำแหน่งหากต้องการให้แอปติดตามตำแหน่งอย่างต่อเนื่อง เช่น เมื่อแสดงมุมมองการนำทางที่มีจุดสีน้ำเงินตลอดเส้นทาง
  3. ตั้งค่า Listener เพื่อดูคำแนะนำแบบเลี้ยวต่อเลี้ยวโดยละเอียดโดยใช้โปรโตคอล GMSNavigatorListener จากนั้นเปลี่ยนข้อมูลนั้นเป็นข้อมูล ที่จำเป็นสำหรับการใช้งานการนำทางที่กำหนดเองของคุณ เช่น
    1. ใช้ช่องแบบข้อความอย่างเดียวสำหรับการแคสต์หน้าจอเส้นทางแบบง่าย
    2. ออกแบบและเติมข้อมูลในช่องสำหรับ UI ของคุณเอง
  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`];