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

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

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

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