ضبط الحوادث في الوقت الفعلي
الحوادث في الوقت الفعلي هي مجموعة من الميزات التي تنبّه المستخدمين بشأن الحوادث على طول مسارهم وتسمح لهم بالإبلاغ عن الحوادث التي يواجهونها والتحقّق منها. تشمل أمثلة الحوادث حوادث المركبات والازدحام المروري ووجود الشرطة وكاميرات مراقبة السرعة والأعمال الإنشائية وإغلاق المسارات وبعض الظروف الجوية. توضّح هذه الصفحة ميزات الحوادث في الوقت الفعلي وخيارات ضبطها، بما في ذلك الاعتبارات الخاصة بالتطبيقات التي تستخدم واجهات مستخدم مخصّصة للتنقّل.
ميزات الحوادث في الوقت الفعلي
تتضمّن حزمة Navigation SDK ميزات الحوادث في الوقت الفعلي التالية كجزء من تجربة التنقّل الأساسية:- تحذيرات تفاعلية حول الحوادث على طول الطريق.
- تنبيهات تلقائية بشأن الحوادث مع إمكانية التصويت أثناء التنقّل النشط.
- الإبلاغ عن الحوادث أثناء التنقّل النشط.
يمكن ضبط هذه الميزات وهي مفعّلة تلقائيًا. تقدّم الأقسام التالية مزيدًا من المعلومات عن الميزات وخيارات الضبط المتاحة.
تحذيرات تفاعلية حول الحوادث على طول الطريق
عندما يعرض تطبيق مسارًا، سواء في نظرة عامة على المسار أو أثناء التنقّل النشط، تظهر أي حوادث حالية على شكل تحذيرات على طول المسار. تتضمّن التحذيرات رمزًا يشير إلى نوع الحادث.
يمكنك التحكّم في عرض تحذيرات الحوادث على طول المسارات باستخدام shouldDisplayPrompts، التي تتحكّم أيضًا في عرض التنبيهات التلقائية عندما يقترب المستخدم من حادث.
mapView.navigator.shouldDisplayPrompts = true
عرض تفاصيل الحادث عندما ينقر المستخدم على تحذير
يمكن للمستخدمين النقر على تحذير لعرض بطاقة معلومات تتضمّن مزيدًا من المعلومات عن الحادث، بما في ذلك نوع الحادث والوقت الذي تم الإبلاغ عنه فيه آخر مرة، وفي بعض الحالات، خيار للتصويت على ما إذا كان الحادث لا يزال قائمًا. يتوفّر نوعان مختلفان من بطاقات المعلومات التي قد تظهر، وذلك حسب ما إذا كان المستخدم في وضع التنقّل النشط، وتختلف خيارات الضبط لكل نوع.
بطاقات معلومات التحذيرات في النظرات العامة على المسارات، قبل بدء التنقّل النشط
عندما ينقر المستخدم على تحذير في نظرة عامة على المسار، قبل بدء التنقّل النشط، تظهر بطاقة معلومات تتضمّن مزيدًا من المعلومات عن الحادث.
يمكنك التحكّم في إمكانية النقر على تحذيرات الحوادث في النظرات العامة على المسارات لعرض مزيد من
المعلومات باستخدام
showsIncidentCards.
mapView.settings.showsIncidentCards = true
بطاقات معلومات التحذيرات أثناء التنقّل النشط
عندما يظهر تحذير بشأن حادث على طول مسار أثناء التنقّل النشط، يمكن للمستخدمين النقر على التحذير لعرض بطاقة معلومات تتضمّن مزيدًا من المعلومات عن الحادث، بما في ذلك نوع الحادث والوقت الذي تم الإبلاغ عنه فيه آخر مرة، بالإضافة إلى أزرار للتصويت على ما إذا كان الحادث لا يزال قائمًا. تُعالج الأصوات التي يقدّمها المستخدمون من قِبل Google وقد تظهر على الخريطة لمستخدمي "خرائط Google" الآخرين ومستخدمي حزمة Navigation SDK، كما تُستخدم لتحديد ما إذا كان سيتم الاستمرار في عرض الحادث.
يمكنك التحكّم في عرض تحذيرات الحوادث وإمكانية النقر عليها أثناء التنقّل النشط باستخدام
shouldDisplayPrompts، التي تتحكّم أيضًا في
عرض التحذيرات على طول المسارات و
عرض التنبيهات التلقائية عندما يقترب المستخدم من حادث.
mapView.navigator.shouldDisplayPrompts = true
تنبيهات تلقائية بشأن الحوادث مع إمكانية التصويت أثناء التنقّل النشط
أثناء التنقّل النشط، عندما يقترب المستخدم من حادث على طول مسار، يظهر طلب يتضمّن معلومات عن الحادث وأزرارًا للتصويت على ما إذا كان الحادث لا يزال قائمًا. تُعالج الأصوات التي يقدّمها المستخدمون من قِبل Google وقد تظهر على الخريطة لـ مستخدمي "خرائط Google" وحزمة Navigation SDK الآخرين، كما تُستخدم لتحديد ما إذا كان سيتم الاستمرار في عرض الحادث.
يمكنك ضبط عرض طلبات التنبيهات أثناء التنقّل النشط باستخدام
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. } ...