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

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

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

  • عليك أولاً إنشاء جلسة تنقّل بشكل مستقل والحصول على مثيل لـ "أداة التنقّل" من خلال الجلسة بدلاً من استدعاء أداة التحكّم في العرض.
  • يمكنك إعداد متتبِّع الأحداث للردّ على أحداث التنقّل وإدارتها.
  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`];