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