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