প্ল্যাটফর্ম বেছে নিন: Android iOS

বাস্তবিক বিঘ্ন কনফিগার করা

রিয়েল-টাইম ডিসরাপশন হল ফিচারের একটি সংগ্রহ যা ব্যবহারকারীদের তাদের রুট বরাবর বাধা সম্পর্কে সতর্ক করে এবং ব্যবহারকারীদের তাদের সম্মুখীন হওয়া বাধা সম্পর্কে রিপোর্ট ও যাচাই করতে দেয়। যানবাহনের দুর্ঘটনা, ট্রাফিক জ্যাম, পুলিশ ও স্পিড ক্যামেরার উপস্থিতি, নির্মাণ কাজ, লেন বন্ধ থাকা এবং নির্দিষ্ট আবহাওয়ার পরিস্থিতি হল বিঘ্ন ঘটার উদাহরণ। এই পৃষ্ঠায় রিয়েল-টাইম বিঘ্ন সংক্রান্ত ফিচার এবং সেগুলির কনফিগারেশন বিকল্পের ব্যাপারে ব্যাখ্যা করা হয়েছে, যার মধ্যে কাস্টম নেভিগেশন UI ব্যবহার করে এমন অ্যাপের জন্য বিবেচ্য বিষয়ও অন্তর্ভুক্ত।

বাধা সংক্রান্ত রিয়েল-টাইম ফিচার

নেভিগেশন SDK-তে মূল নেভিগেশন অভিজ্ঞতার অংশ হিসেবে নিম্নলিখিত রিয়েল-টাইম বাধা সংক্রান্ত ফিচার অন্তর্ভুক্ত থাকে:

এইসব ফিচার কনফিগার করা যায় এবং ডিফল্ট হিসেবে চালু থাকে। নিম্নলিখিত বিভাগগুলি ফিচার এবং উপলভ্য কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্য প্রদান করে।

রুট বরাবর ইন্ট্যার‍্যাক্টিভ বিঘ্ন সংক্রান্ত কলআউট

কোনও অ্যাপ যখন রুট ওভারভিউতে বা অ্যাক্টিভ নেভিগেশনের সময় কোনও রুট দেখায়, তখন বর্তমান কোনও বাধা রুট বরাবর কলআউট হিসেবে দেখানো হয়। আপনি ট্রাফিক লেয়ার চালু করলে, রুটের বাইরে কোনও বিঘ্ন ঘটলেও তা ম্যাপে দেখা যায়। কলআউটে একটি আইকন থাকে যা বিঘ্নতার ধরন নির্দেশ করে।

রুট বরাবর কলআউট

আপনি shouldDisplayPrompts ব্যবহার করে রুটে বিঘ্ন সংক্রান্ত কলআউট ডিসপ্লে কন্ট্রোল করতে পারবেন, এটি কোনও ব্যবহারকারী বিঘ্নের কাছাকাছি পৌঁছালে অটোমেটিক অ্যালার্টের ডিসপ্লে-ও কন্ট্রোল করে।

mapView.navigator.shouldDisplayPrompts = true

ব্যবহারকারী কলআউটে ট্যাপ করলে বিঘ্ন সংক্রান্ত বিবরণ দেখানো

কোনও বিঘ্ন সংক্রান্ত কলআউটে ট্যাপ করলে, আরও বিবরণ সহ একটি তথ্য কার্ড খুলে যায়। এটি অন-রুট ও অফ-রুট কলআউট, দু'টির ক্ষেত্রেই প্রযোজ্য, তবে ট্রাফিক লেয়ার চালু থাকলে তবেই অফ-রুট কলআউট দেখা যায়। কার্ডে বিঘ্নতার ধরন, এটি শেষবার কখন রিপোর্ট করা হয়েছে এবং কখনও কখনও বিঘ্নতা এখনও আছে কিনা সেই বিষয়ে ভোট দেওয়ার বিকল্প দেখানো হয়। ব্যবহারকারী অ্যাক্টিভ নেভিগেশনে আছেন কিনা তার উপর নির্ভর করে তথ্য কার্ডের ধরন এবং এর কনফিগারেশন বিকল্পগুলি পরিবর্তিত হয়।

অ্যাক্টিভ নেভিগেশন শুরু করার আগে, রুট ওভারভিউতে কলআউট তথ্য কার্ড

অ্যাক্টিভ নেভিগেশন শুরু করার আগে, ব্যবহারকারী কোনও তথ্য কার্ড খুলতে ম্যাপে বা রুটের ওভারভিউতে অন-রুট বা অফ-রুট কলআউটে ট্যাপ করতে পারেন। অফ-রুট কলআউটের জন্য ট্রাফিক লেয়ার চালু করতে হবে। এই বিঘ্ন সম্পর্কে আরও বিবরণ তথ্য কার্ডে দেওয়া আছে।

এক নজরে তথ্য কার্ড

আপনি showsIncidentCards ব্যবহার করে আরও তথ্য দেখানোর জন্য রুট ওভারভিউতে বিঘ্ন সংক্রান্ত কলআউটে ট্যাপ করার ব্যাপারে ব্যবহারকারীদের ক্ষমতা কন্ট্রোল করতে পারবেন।

mapView.settings.showsIncidentCards = true

অ্যাক্টিভ নেভিগেশন চলাকালীন কলআউট তথ্য কার্ড

অ্যাক্টিভ নেভিগেশন চলাকালীন, ব্যবহারকারী তথ্য কার্ড খুলতে, রুট-মধ্যস্থ বা রুট-বহির্ভূত বাধা কলআউটে ট্যাপ করতে পারবেন। কার্ডে বিঘ্নতার ধরন ও শেষবার রিপোর্ট করার সময় দেখানো হয় এবং এতে এমন বোতাম থাকে যার মাধ্যমে ব্যবহারকারীরা ভোট দিয়ে জানাতে পারেন যে বিঘ্নতা এখনও আছে কিনা।

রাস্তা বন্ধ থাকা ছাড়া ব্যবহারকারীর ৫ কিমি ব্যাসার্ধের মধ্যে অন-রুট ও অফ-রুট বাধা-বিপত্তির জন্য ভোট দেওয়ার সুবিধা উপলভ্য। এইসব ভোট Google প্রসেস করে যাতে বিঘ্ন দেখানো চালিয়ে যাওয়া উচিত কিনা তা নির্ধারণ করতে সাহায্য করা যায়। অন্যান্য Google Maps ও Navigation SDK ব্যবহারকারীদের জন্য ম্যাপে ভোট দেখা যেতে পারে।

অ্যাক্টিভ নেভিগেশন তথ্য কার্ড

আপনি shouldDisplayPrompts ব্যবহার করে অ্যাক্টিভ নেভিগেশনের সময় বিঘ্ন সংক্রান্ত কল-আউটের ডিসপ্লে ও ট্যাপ করার সুবিধা নিয়ন্ত্রণ করতে পারবেন, যা রুট বরাবর কল-আউটের ডিসপ্লে এবং ব্যবহারকারী বিঘ্নের কাছাকাছি পৌঁছালে অটোমেটিক সতর্কতার ডিসপ্লে নিয়ন্ত্রণ করে।

mapView.navigator.shouldDisplayPrompts = true

অ্যাক্টিভ নেভিগেশনের সময় ভোটদানের সুবিধা সহ অটোমেটিক বিঘ্ন সংক্রান্ত সতর্কতা

অ্যাক্টিভ নেভিগেশন চলাকালীন, কোনও ব্যবহারকারী রুটে কোনও বিঘ্নের কাছাকাছি পৌঁছালে, বিঘ্ন সম্পর্কে তথ্য সহ একটি প্রম্পট দেখানো হয় এবং বিঘ্নটি এখনও আছে কিনা তা ভোট দেওয়ার জন্য বোতাম দেখানো হয়। ব্যবহারকারীদের জমা দেওয়া ভোট Google প্রসেস করে এবং অন্যান্য Google Maps ও Navigation SDK ব্যবহারকারীদের জন্য ম্যাপে দেখানো হতে পারে। এছাড়াও, বিঘ্ন দেখানো চালিয়ে যাওয়া হবে কিনা তা নির্ধারণ করতেও এটি ব্যবহার করা হয়।

চালু নেভিগেশন তথ্য কার্ড

অ্যাক্টিভ নেভিগেশনের সময় আপনি shouldDisplayPrompts ব্যবহার করে অ্যালার্ট প্রম্পটের ডিসপ্লে কনফিগার করতে পারবেন, যা রুট বরাবর কলআউটের ডিসপ্লেও নিয়ন্ত্রণ করে।

mapView.navigator.shouldDisplayPrompts = true

অ্যাক্টিভ নেভিগেশনের সময় বিঘ্ন ঘটার রিপোর্ট করা

অ্যাক্টিভ নেভিগেশন মোডে, নেভিগেশন UI-তে একটি বোতাম দেখা যায় যা ব্যবহারকারীদের তাদের রুট বরাবর নতুন বাধা সম্পর্কে অভিযোগ জানাতে দেয়। ব্যবহারকারী বোতামে ট্যাপ করলে, অভিযোগ জানানোর জন্য উপলভ্য বিঘ্নের ধরন সহ একটি মেনু দেখানো হয়। ব্যবহারকারীদের জমা দেওয়া অভিযোগ Google প্রসেস করে এবং অন্যান্য Google Maps ও Navigation SDK ব্যবহারকারীদের জন্য ম্যাপে দেখানো হতে পারে।

রিপোর্ট করার বোতাম রিপোর্টিং মেনু

স্ট্যান্ডার্ড রিপোর্ট করার বোতাম দেখানো বা লুকানো

অ্যাক্টিভ নেভিগেশনের সময় আপনি navigationReportIncidentButtonEnabled ব্যবহার করে স্ট্যান্ডার্ড রিপোর্টিং বোতামের দৃশ্যমানতা কনফিগার করতে পারবেন।

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

কাস্টম অভিযোগ জানানোর বোতাম যোগ করা

স্ট্যান্ডার্ড বিঘ্ন সংক্রান্ত রিপোর্টিং বোতামের পরিবর্তে, আপনি নেভিগেশন UI-তে কাস্টম রিপোর্টিং বোতাম যোগ করতে পারবেন। ব্যবহারকারী কাস্টম বোতামে ক্লিক করলে, আপনি 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.
          }
     }

কাস্টম নেভিগেশন UI-এর সাথে কাজ করা

Navigation SDK-এর আপনার প্রয়োগে কাস্টম UI এলিমেন্ট অন্তর্ভুক্ত থাকলে, আপনাকে বিরোধ এড়াতে রিয়েল-টাইম ডিসরাপশন এলিমেন্ট বিবেচনা করতে হবে।

অভিযোগ জানানোর বোতামের পজিশনিং

সাধারণত, বিঘ্ন সংক্রান্ত অভিযোগ জানানোর বোতামটি ম্যাপের সবচেয়ে নিচে/শেষের কোণে থাকে—বাঁদিক থেকে ডানদিকে লেখা ভাষার ক্ষেত্রে ডানদিকে এবং ডানদিক থেকে বাঁদিকে লেখা ভাষার ক্ষেত্রে বাঁদিকে থাকে। কাস্টম UI এলিমেন্টের জন্য জায়গা করতে আপনাকে যদি অভিযোগ জানানোর বোতামটি সরাতে হয়, তাহলে 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 (পরীক্ষামূলক)

প্রম্পট দৃশ্যমানতা API, নেভিগেশন SDK-এর মাধ্যমে জেনারেট করা UI এলিমেন্ট এবং আপনার কাস্টম UI এলিমেন্টের মধ্যে হওয়া কনফ্লিক্ট এড়াতে সাহায্য করে। এটি নেভিগেশন SDK UI এলিমেন্ট দেখানোর আগে এবং এলিমেন্টটি সরিয়ে দেওয়ার সাথে সাথেই কলব্যাক পাওয়ার জন্য একটি লিসনার যোগ করে। আপনি বাধা বিঘ্ন সংক্রান্ত রিয়েল-টাইম এলিমেন্টের জন্য কলব্যাক পেতে পারেন, এর মধ্যে রয়েছে তথ্য কার্ড, প্রম্পট ও বাধা বিঘ্ন রিপোর্টিং মেনু—এছাড়াও 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.
}
...