راهنمایی سفارشی ایجاد کنید

این صفحه مراحل سطح بالایی را که برای ایجاد راهنمایی‌های سفارشی به عنوان بخشی از یک تجربه ناوبری سفارشی دنبال می‌کنید، پوشش می‌دهد.

این فرآیند با فرآیند شرح داده شده در پیمایش یک مسیر به شرح زیر متفاوت است:

  • شما ابتدا یک جلسه ناوبری (navigation session) را به طور مستقل ایجاد می‌کنید و یک نمونه ناوبری (navigator) را از طریق جلسه به دست می‌آورید، نه با فراخوانی کنترلر نما (view controller).
  • شما یک شنونده رویداد (event listener) تنظیم می‌کنید تا به رویدادهای ناوبری پاسخ دهد و آنها را مدیریت کند.
  1. با استفاده از GMSNavigationService.createNavigationSession یک جلسه ناوبری ایجاد کنید و ناوبری را با فراخوانی setDestination آغاز کنید. در جایی که تجربه ناوبری گوگل، ناوبری را از طریق نمای نقشه ناوبری فراخوانی می‌کند، GMSNavigationServices جریانی از رویدادها را از یک جلسه ناوبری مستقل از یک نمونه UI کنترل و دریافت می‌کند. این بدان معناست که می‌تواند بدون رابط کاربری اجرا شود یا به هر تجربه مبتنی بر رابط کاربری منتقل شود. با این رویکرد، جلسه ناوبری تا زمانی که آخرین ارجاع از آن حذف شود، در برنامه شما اجرا می‌شود.

  2. یک ارائه‌دهنده موقعیت مکانی با قابلیت ثبت موقعیت مکانی در جاده ایجاد کنید . اگر می‌خواهید برنامه شما به طور مداوم موقعیت مکانی را رصد کند، مانند نمایش نمای ناوبری با یک نقطه آبی در طول مسیر، از ارائه‌دهنده موقعیت مکانی استفاده کنید.

  3. با پیاده‌سازی پروتکل GMSNavigatorListener یک شنونده (listener) برای راهنمایی دقیق مرحله به مرحله تنظیم کنید . سپس، آن اطلاعات را به هر آنچه برای تجربه ناوبری سفارشی شما لازم است تبدیل کنید. به عنوان مثال:

    1. برای نمایش ساده‌ی مسیرها روی صفحه، فیلدهای فقط متنی پیاده‌سازی کنید.
    2. برای رابط کاربری خودتان، فیلدها را طراحی و پر کنید.
  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;

انتقال ناوبری از یک تجربه سفارشی به تجربه گوگل

این قطعه کد نشان می‌دهد که چگونه برنامه شما می‌تواند به کاربر اجازه دهد از یک تجربه ناوبری سفارشی وارد تجربه ناوبری گوگل شود. این قطعه کد همچنین نشان می‌دهد که چگونه برنامه شما هنگام اشتراک‌گذاری نقشه، این انتقال را انجام می‌دهد.

`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];

[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];