إنشاء إرشادات مخصّصة

تتضمّن هذه الصفحة الخطوات العامة التي تتّبعها لإنشاء إرشادات مخصّصة كجزء من تجربة تنقّل مخصّصة.

تختلف هذه العملية عن العملية الموضّحة في مقالة التنقّل في طريق على النحو التالي:

  • عليك أولاً إنشاء جلسة تنقّل بشكل مستقل والحصول على مثيل لبرنامج التنقّل من خلال الجلسة بدلاً من استدعاء وحدة التحكّم في العرض.
  • يمكنك إعداد أداة معالجة الأحداث للردّ على أحداث التنقّل وإدارتها.
  1. إنشاء جلسة تنقّل باستخدام GMSNavigationService.createNavigationSession وبدء التنقّل من خلال طلب setDestination عندما تستدعي تجربة التنقّل من Google أداة التنقّل من خلال عرض خريطة التنقّل، تتحكّم GMSNavigationServices في مجموعة من الأحداث وتتلقّاها من جلسة تنقّل بشكل مستقل عن مثيل واجهة المستخدم. وهذا يعني أنّه يمكن تشغيلها بدون واجهة مستخدم أو يمكن تمريرها إلى أي تجربة مستندة إلى واجهة المستخدم. باستخدام هذا الأسلوب، يستمر تشغيل جلسة التنقّل في تطبيقك إلى أن تتم إزالة آخر مرجع منها.
  2. إنشاء موفّر بيانات الموقع الجغرافي الذي يتم ضبطه على الطرق استخدِم موفّر الموقع الجغرافي إذا كنت تريد أن يتيح تطبيقك مراقبة الموقع الجغرافي بشكل مستمر، مثلاً عند عرض طريقة عرض للتنقّل مع نقطة زرقاء على طول المسار.
  3. إعداد أداة معالجة للحصول على إرشادات مفصّلة خطوة بخطوة من خلال تنفيذ بروتوكول GMSNavigatorListener بعد ذلك، حوِّل هذه المعلومات إلى أي شيء تحتاجه لتجربة التنقّل المخصّصة. على سبيل المثال:
    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;

نقل التنقّل من تجربة مخصّصة إلى تجربة Google

يوضّح مقتطف الرمز البرمجي هذا كيف يمكن لتطبيقك أن يسمح للمستخدم بالانتقال إلى تجربة التنقّل من Google من تجربة تنقّل مخصّصة. يوضّح مقتطف الرمز البرمجي هذا أيضًا كيف ينفّذ تطبيقك هذا الانتقال أثناء مشاركة الخريطة.

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

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

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];