اختيار النظام الأساسي: Android iOS

ضبط الانقطاعات في الوقت الفعلي

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

ميزات التوقّف في الوقت الفعلي

تتضمّن حزمة تطوير البرامج للتنقّل الميزات التالية المتعلقة بالتعطّل في الوقت الفعلي كجزء من تجربة التنقّل الأساسية:

يمكن ضبط هذه الميزات وهي مفعّلة تلقائيًا. تقدّم الأقسام التالية مزيدًا من المعلومات حول الميزات وخيارات الإعداد المتاحة.

وسائل شرح تفاعلية عن حالات تعطّل على طول الطرق

عندما يعرض تطبيق مسارًا، سواء في نظرة عامة على المسار أو أثناء التنقّل النشط، تظهر أيّ عوائق حالية على شكل وسيلة شرح على طول المسار. تتضمّن وسيلة الشرح رمزًا يشير إلى نوع التعطّل.

وسائل الشرح على طول المسارات

يمكنك التحكّم في عرض وسيلة الشرح الخاصة بالتعطّل على طول الطرق باستخدام shouldDisplayPrompts، والذي يتحكّم أيضًا في عرض التنبيهات التلقائية عندما يقترب المستخدم من تعطّل.

mapView.navigator.shouldDisplayPrompts = true

عرض تفاصيل التشويش عندما ينقر المستخدم على وسيلة شرح

يمكن للمستخدمين النقر على وسيلة شرح لعرض بطاقة معلومات تتضمّن المزيد من التفاصيل حول حالة التعطّل، بما في ذلك نوع التعطّل ووقت آخر إبلاغ عنه، وفي بعض الحالات، خيار التصويت على ما إذا كان التعطّل لا يزال قائمًا. هناك نوعان مختلفان من بطاقات المعلومات التي قد تظهر، وذلك استنادًا إلى ما إذا كان المستخدم يتنقّل بنشاط، وتختلف خيارات الإعدادات لكل نوع.

بطاقات المعلومات المنبثقة في النظرات العامة على المسارات، قبل بدء التنقّل النشط

عندما ينقر مستخدم على وسيلة شرح في نظرة عامة على مسار قبل بدء التنقّل النشط، تظهر بطاقة معلومات تتضمّن المزيد من المعلومات حول الحدث المُعرقِل.

بطاقة معلومات النظرة العامة

يمكنك التحكّم في إمكانية النقر على وسيلة الشرح الخاصة بالتعطّل في نظرة عامة على المسار لعرض المزيد من المعلومات باستخدام showsIncidentCards.

mapView.settings.showsIncidentCards = true

بطاقات معلومات منبثقة أثناء التنقّل النشط

عندما يظهر تنبيه بشأن تعطّل على طول مسار أثناء التنقّل النشط، يمكن للمستخدمين النقر على التنبيه لعرض بطاقة معلومات تتضمّن المزيد من المعلومات حول التعطّل، بما في ذلك نوع التعطّل ووقت آخر إبلاغ عنه، بالإضافة إلى أزرار للتصويت على ما إذا كان التعطّل لا يزال قائمًا. تتم معالجة الأصوات التي يرسلها المستخدمون من قِبل Google، وقد تظهر على الخريطة لمستخدمي "خرائط Google" ومستخدمي Navigation SDK الآخرين، كما تُستخدم لتحديد ما إذا كان سيتم مواصلة عرض العرقلة.

بطاقة معلومات التنقّل النشط

يمكنك التحكّم في عرض وسهولة النقر على وسائط الشرح الخاصة بالتعطّل أثناء التنقّل النشط باستخدام shouldDisplayPrompts، الذي يتحكّم أيضًا في عرض وسائط الشرح على طول الطرق و عرض التنبيهات التلقائية عندما يقترب المستخدم من تعطّل.

mapView.navigator.shouldDisplayPrompts = true

تنبيهات آلية بشأن الأعطال مع إمكانية التصويت أثناء التنقّل النشط

أثناء التنقّل النشط، عندما يقترب المستخدم من عائق على طول الطريق، يظهر طلب يتضمّن معلومات حول العائق وأزرار للتصويت على ما إذا كان العائق لا يزال موجودًا. تُعالج Google الأصوات التي يرسلها المستخدمون، وقد تظهر على الخريطة لمستخدمي حزمة تطوير البرامج (SDK) الخاصة بـ "خرائط Google" و"التنقّل"، كما تُستخدم لتحديد ما إذا كان سيتم مواصلة عرض العرقلة.

بطاقة معلومات التنقّل النشط

يمكنك ضبط طريقة عرض طلبات التنبيه أثناء التنقّل النشط باستخدام shouldDisplayPrompts، الذي يتحكّم أيضًا في طريقة عرض وسائل الشرح على طول الطرق.

mapView.navigator.shouldDisplayPrompts = true

الإبلاغ عن عرقلة أثناء التنقّل النشط

أثناء وضع التنقّل النشط، يظهر زر في واجهة مستخدم التنقّل يتيح للمستخدمين الإبلاغ عن أي عوائق جديدة على طول طريقهم. عندما ينقر المستخدم على الزر، تظهر قائمة بأنواع المشاكل المتاحة للإبلاغ عنها. تتم معالجة البلاغات التي يرسلها المستخدمون من قِبل Google، وقد تظهر على الخريطة لمستخدمي حزمة تطوير البرامج لتطبيق "خرائط Google" وNavigation SDK الآخرين.

زر الإبلاغ قائمة خيارات الإبلاغ

إظهار زر التقارير العادية أو إخفاؤه

يمكنك ضبط إعدادات ظهور زرّ التقارير العادية أثناء التنقّل النشط باستخدام navigationReportIncidentButtonEnabled.

// Enables the incident reporting FAB to show in situations where incident
// reporting is possible.
mapView.settings.navigationReportIncidentButtonEnabled = true

إضافة زر مخصّص للإبلاغ

بدلاً من زر الإبلاغ عن المشاكل العادي، يمكنك إضافة زر مخصّص للإبلاغ عن المشاكل إلى واجهة مستخدم شريط التنقّل. عندما ينقر المستخدم على الزر المخصّص، يمكنك بدء عرض قائمة الإبلاغ من خلال استدعاء طريقة presentReportIncidentsPanel ‎. قبل إضافة زر إبلاغ مخصّص، تأكَّد من أنّ التطبيق في وضع التصفّح النشط وأنّ المستخدم في بلد تم تفعيل ميزة الإبلاغ فيه من خلال طلب reportIncidentsAvailable. إذا لم يكن أيّ من هذين الشرطين صحيحًا، لن تظهر قائمة الإبلاغ.

  // Check if reporting is available before displaying your button
  let isReportingAvailable = mapview.isIncidentReportingAvailable()
  customReportingIncidentButton.isHidden = !isReportingAvailable
  customReportingIncidentButton.addTarget(self, action: #selector(didTapReportIncidentButton), for: .touchUpInside)
  
  // Trigger the reporting flow if the button is clicked
  func didTapReportIncidentButton() {
          mapView.presentReportIncidentsPanel(self) { [weak self] error in
              guard let self = self else { return }
              if let error = error as NSError? {
                  if error.domain == GMSMapViewPresentReportIncidentPanelErrorDomain {
                      let errorCode = GMSMapViewPresentReportIncidentPanelErrorCode(rawValue: error.code)
                      
                      switch errorCode {
                      case .internal:
                          self.showErrorMessage(
                              title: "Error Presenting Report Incident Panel",
                              message: "An internal error occurred."
                          )
                      case .reportingNotAvailable:
                          self.showErrorMessage(
                              title: "Error Presenting Report Incident Panel",
                              message: "Reporting is not available."
                          )
                      case .none:
                          self.showErrorMessage(
                              title: "Error Presenting Report Incident Panel",
                              message: "An unknown error occurred."
                          )
                      }
                  } else {
                      // Handle other potential errors (e.g., network errors)
                      self.showErrorMessage(
                          title: "Error Presenting Report Incident Panel",
                          message: "An unexpected error occurred: \(error.localizedDescription)"
                      )
                  }
              }
              // If error is nil, the panel was presented successfully. You can add any extra logic here.
          }
     }

العمل باستخدام واجهات مستخدم مخصّصة للتنقّل

إذا كان تنفيذك لحزمة Navigation SDK يتضمّن عناصر واجهة مستخدم مخصّصة، عليك مراعاة عناصر التعطيل في الوقت الفعلي لتجنُّب حدوث تعارضات.

موضع زر الإبلاغ

يتم تلقائيًا وضع زر الإبلاغ عن المشاكل في الزاوية السفلية من الخريطة، أي في الجانب الأيسر للّغات التي تُكتب من اليمين إلى اليسار وفي الجانب الأيمن للّغات التي تُكتب من اليسار إلى اليمين. إذا كنت بحاجة إلى نقل زر الإبلاغ لإتاحة مساحة لعناصر واجهة المستخدم المخصّصة، استخدِم bottomTrailingButtonsLayoutGuide.

Swift

// Create a new layout guide
let topRightLayoutGuide = UILayoutGuide()
self.view.addLayoutGuide(topRightLayoutGuide)

// Activate constraints using fixed constants here as an example
// assuming the current reporting button is of fixed height
topRightLayoutGuide.topAnchor.constraint(equalTo: _mapView.navigationHeaderLayoutGuide.bottomAnchor, constant: 50).isActive = true
topRightLayoutGuide.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -14).isActive = true

// Assign the layout guide
_mapView.bottomTrailingButtonsLayoutGuide = topRightLayoutGuide

// Create an alternate layout guide to use when the header and the footer are not full width
let topRightAlternateLayoutGuide = UILayoutGuide()
self.view.addLayoutGuide(topRightAlternateLayoutGuide)

// Activate constraints using fixed constants here as an example
// assuming the current RTD button is of fixed height
topRightAlternateLayoutGuide.topAnchor.constraint(equalTo: _mapView.navigationHeaderLayoutGuide.bottomAnchor, constant: 20).isActive = true
topRightAlternateLayoutGuide.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -10).isActive = true

// Assign the layout guide
_mapView.bottomTrailingButtonsAlternateLayoutGuide = topRightAlternateLayoutGuide

Objective-C

// Create a new layout guide
UILayoutGuide *topRightLayoutGuide = [[UILayoutGuide alloc] init];
[self.view addLayoutGuide:topRightLayoutGuide];

// Activate constraints using fixed constants here as an example
// assuming the current RTD button is of fixed height
[[topRightLayoutGuide.topAnchor
    constraintEqualToAnchor:_mapView.navigationHeaderLayoutGuide.bottomAnchor
                   constant:50]
    setActive:YES];

[[topRightLayoutGuide.trailingAnchor
    constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor
                   constant:-14]
    setActive:YES];

// Assign the layout guide
_mapView.bottomTrailingButtonsLayoutGuide = topRightLayoutGuide;

// Create an alternate layout guide to use when the header and the footer are not full width
UILayoutGuide *topRightAlternateLayoutGuide = [[UILayoutGuide alloc] init];
[self.view addLayoutGuide:topRightAlternateLayoutGuide];

// Activate constraints using fixed constants here as an example
// assuming the current RTD button is of fixed height
[[topRightAlternateLayoutGuide.topAnchor
    constraintEqualToAnchor:_mapView.navigationHeaderLayoutGuide.bottomAnchor
                   constant:50]
    setActive:YES];

[[topRightAlternateLayoutGuide.trailingAnchor
    constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor
                   constant:-14]
    setActive:YES];

// Assign the layout guide
_mapView.bottomTrailingButtonsAlternateLayoutGuide = topRightAlternateLayoutGuide;

Prompt Visibility API (تجريبية)

تساعد واجهة برمجة التطبيقات Prompt Visibility API في تجنُّب التعارضات بين عناصر واجهة المستخدم التي تم إنشاؤها بواسطة حزمة Navigation SDK وعناصر واجهة المستخدم المخصّصة من خلال إضافة أداة معالجة لتلقّي عملية ردّ قبل أن يظهر عنصر واجهة مستخدم تابع لحزمة Navigation SDK، وبمجرد إزالة العنصر. يمكنك تلقّي عمليات ردّ الاتصال لعناصر الاضطرابات في الوقت الفعلي، بما في ذلك بطاقات المعلومات والإشعارات وقائمة الإبلاغ عن الاضطرابات، بالإضافة إلى الإشعارات الأخرى التي تنشئها حزمة Navigation SDK.

Swift

// Additional methods added to GMSNavigatorListener
...
func navigatorWillPresentPrompt(_ navigator: GMSNavigator) {
  // Hide any sort of custom UI element.
}

func navigatorDidDismissPrompt(_ navigator: GMSNavigator) {
  // Show any sort of custom UI element.
}
...

Objective-C

// Additional methods added to GMSNavigatorListener
...
- (void)navigatorWillPresentPrompt:(GMSNavigator *)navigator {
  // Hide any sort of custom UI element.
}

- (void)navigatorDidDismissPrompt:(GMSNavigator *)navigator {
  // Show any sort of custom UI element.
}
...