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