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

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

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

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