প্ল্যাটফর্ম নির্বাচন করুন: অ্যান্ড্রয়েড আইওএস

রিয়েল-টাইম বিঘ্ন কনফিগার করুন

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

রিয়েল-টাইম বিঘ্ন বৈশিষ্ট্য

নেভিগেশন SDK-তে মূল নেভিগেশন অভিজ্ঞতার অংশ হিসেবে নিম্নলিখিত রিয়েল-টাইম বিঘ্ন বৈশিষ্ট্যগুলো অন্তর্ভুক্ত রয়েছে:

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

রুট বরাবর ইন্টারেক্টিভ বিঘ্ন কলআউট

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

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

আপনি shouldDisplayPrompts ব্যবহার করে রুট বরাবর বিঘ্ন সংক্রান্ত কলআউটের প্রদর্শন নিয়ন্ত্রণ করতে পারেন, যা কোনো ব্যবহারকারী বিঘ্নের কাছাকাছি এলে স্বয়ংক্রিয় সতর্কবার্তার প্রদর্শনও নিয়ন্ত্রণ করে।

mapView.navigator.shouldDisplayPrompts = true

যখন কোনো ব্যবহারকারী একটি কলআউটে ট্যাপ করেন, তখন বিঘ্নের বিবরণ প্রদর্শন করুন।

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

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

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

ওভারভিউ তথ্য কার্ড

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

mapView.settings.showsIncidentCards = true

সক্রিয় নেভিগেশনের সময় তথ্য কার্ডগুলো কলআউট করুন।

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

সক্রিয় নেভিগেশন তথ্য কার্ড

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

mapView.navigator.shouldDisplayPrompts = true

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

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

সক্রিয় নেভিগেশন তথ্য কার্ড

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

mapView.navigator.shouldDisplayPrompts = true

সক্রিয় নেভিগেশন চলাকালীন বিঘ্ন প্রতিবেদন

সক্রিয় নেভিগেশন মোড চলাকালীন, নেভিগেশন UI-তে একটি বাটন দেখা যায়, যা ব্যবহারকারীদের তাদের যাত্রাপথে নতুন কোনো বিঘ্ন রিপোর্ট করার সুযোগ দেয়। যখন কোনো ব্যবহারকারী বাটনটিতে ট্যাপ করেন, তখন রিপোর্ট করার জন্য উপলব্ধ বিঘ্নের ধরনসহ একটি মেনু প্রদর্শিত হয়। ব্যবহারকারীদের জমা দেওয়া রিপোর্টগুলো গুগল দ্বারা প্রক্রিয়াজাত করা হয় এবং অন্যান্য গুগল ম্যাপস ও নেভিগেশন 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 নিয়ে কাজ করুন

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

রিপোর্টিং বোতামের অবস্থান

ডিফল্টরূপে, বিঘ্ন রিপোর্ট করার বাটনটি ম্যাপের একেবারে নিচের প্রান্তে/শেষের কোণায় অবস্থিত থাকে—বাম থেকে ডানে লেখা ভাষার জন্য ডানদিকে এবং ডান থেকে বামে লেখা ভাষার জন্য বামদিকে। কাস্টম UI এলিমেন্টের জন্য জায়গা তৈরি করতে যদি রিপোর্টিং বাটনটি সরানোর প্রয়োজন হয়, তাহলে একটি bottomTrailingButtonsLayoutGuide ব্যবহার করুন।

সুইফট

// 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

উদ্দেশ্য-সি

// 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;

প্রম্পট ভিজিবিলিটি এপিআই (পরীক্ষামূলক)

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

সুইফট

// 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.
}
...

উদ্দেশ্য-সি

// 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.
}
...