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