নেভিগেশন সেশন শুরু করতে, আপনার অ্যাপকে অবশ্যই Google Maps বা Waze খোলার জন্য ডাইনামিকভাবে একটি লঞ্চ ইউআরএল তৈরি করতে হবে। এই নির্দেশিকায় বর্ণনা করা হয়েছে, কীভাবে 'Create a trip' থেকে প্রাপ্ত অথেনটিকেটেড ট্রিপ টোকেন ব্যবহার করে Google Maps বা Waze চালু করতে হয় এবং আপনার অ্যাপে ফিরে আসার অভিজ্ঞতাটি কনফিগার করতে হয়।
কীভাবে গুগল ম্যাপস বা ওয়েজ চালু করবেন
Google Maps বা Waze চালু করতে হলে, আপনাকে অবশ্যই চালকদের আপনার অ্যাপ থেকে একটি নেভিগেশন সেশন শুরু করার সুযোগ দিতে হবে, প্রয়োজনীয় প্যারামিটারসহ লঞ্চ ইউআরএল (URL) তৈরি করতে হবে এবং সেশনটি চিহ্নিত করার জন্য আপনার অ্যাপ্লিকেশন আইডি সরবরাহ করতে হবে।
ড্রাইভারদের আপনার অ্যাপ থেকে নেভিগেশন শুরু করতে দিন।
আপনার অ্যাপ থেকে চালকদের নেভিগেশন শুরু করার একটি উপায় রাখা উচিত। যদি আপনি চালকদের একটি বাটন ব্যবহার করে গুগল ম্যাপস বা ওয়েজ চালু করার সুযোগ দেন, তবে সেটির যথাযথ স্বীকৃতি নিশ্চিত করুন এবং স্পষ্টভাবে লেবেল দিয়ে বিভ্রান্তি এড়ান। উদাহরণস্বরূপ, বাটনের উপরে বা কাছাকাছি "Google Maps" বা "Waze" লেখাটি রাখুন।
লঞ্চ ইউআরএল তৈরি করুন
একটি নেভিগেশন সেশন শুরু করতে, একটি নেভিগেশন কানেক্ট লঞ্চ ইউআরএল তৈরি করুন। এই ইউআরএলটি একটি স্ট্রিং, যাতে গন্তব্য, ট্রিপ টোকেন এবং প্রয়োজনীয় নেভিগেশন প্যারামিটার থাকে। এটি একটি সাধারণ গুগল ম্যাপস ইউআরএল বা ওয়েজ ডিপ লিঙ্কের মতোই কাজ করে।
ড্রাইভারের ডিভাইসে গুগল ম্যাপস বা ওয়েজ চালু করতে, প্ল্যাটফর্ম-নির্দিষ্ট পদ্ধতিটি ব্যবহার করুন:
- অ্যান্ড্রয়েড: একটি
Intentএ URL স্ট্রিং পাস করুন। - iOS: URL স্ট্রিংটিকে ইউনিভার্সাল লিঙ্ক (বা ডিপ লিঙ্ক) হিসেবে ব্যবহার করুন।
গন্তব্য বিন্যাস করুন
গুগল ম্যাপস বা ওয়েজ যাতে সফলভাবে পথ নির্ণয় করতে পারে, তা নিশ্চিত করার জন্য আপনার গন্তব্য লেখার সময় নিম্নলিখিত নিয়মগুলো মেনে চলুন:
ঠিক একটি পৌঁছানো যায় এমন গন্তব্য নির্দিষ্ট করুন। আপনি গন্তব্যটি একটি ঠিকানা স্ট্রিং, অক্ষাংশ/দ্রাঘিমাংশ স্থানাঙ্ক, অথবা একটি স্থান আইডি হিসাবে দিতে পারেন।
একাধিক ওয়েপয়েন্ট ব্যবহার করবেন না। আপনি যদি সরাসরি URL-এ একাধিক ওয়েপয়েন্ট দেন, তাহলে Google Maps বা Waze একটি ত্রুটি দেখায়। এর পরিবর্তে, আলাদা ট্রিপ তৈরি করুন।
ট্রিপ টোকেন এবং নেভিগেশন প্যারামিটার যোগ করুন
লঞ্চ ইউআরএলটি সম্পূর্ণ করতে, আপনাকে অবশ্যই 'একটি ট্রিপ তৈরি করুন' অনুরোধ থেকে প্রাপ্ত প্রমাণীকৃত ট্রিপ টোকেনটি অন্তর্ভুক্ত করতে হবে। এছাড়াও, আপনাকে সেই নেভিগেশন প্যারামিটারগুলোও অন্তর্ভুক্ত করতে হবে যা গুগল ম্যাপস বা ওয়েজকে সক্রিয় নেভিগেশন শুরু করতে নির্দেশ দেয়।
গুগল ম্যাপস
গুগল ম্যাপসের জন্য, আপনার লঞ্চ ইউআরএল-এ নিম্নলিখিত প্যারামিটারগুলো অন্তর্ভুক্ত করুন:
-
dir_action=navigate: এই প্যারামিটারটি সক্রিয় নেভিগেশন বাধ্যতামূলক করে। -
action_token: এই প্যারামিটারটি আপনার প্রমাণীকৃত ট্রিপ টোকেন সরবরাহ করে।
নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে কীভাবে বিভিন্ন গন্তব্য বিন্যাস ব্যবহার করে গুগল ম্যাপসের জন্য লঞ্চ ইউআরএল তৈরি করতে হয়:
- অক্ষাংশ/দ্রাঘিমাংশ স্থানাঙ্ক:
https://www.google.com/maps/dir/?api=1&destination=-33.8569%2C151.2152&dir_action=navigate&action_token=TRIP_TOKEN
- ঠিকানা স্ট্রিং:
https://www.google.com/maps/dir/?api=1&destination=1600%20Amphitheatre%20Parkway...&dir_action=navigate&action_token=TRIP_TOKEN
- স্থান আইডি:
https://www.google.com/maps/dir/?api=1&destination_place_id=PLACE_ID&dir_action=navigate&action_token=TRIP_TOKEN
ওয়েজ
Waze-এর জন্য, আপনার লঞ্চ URL-এ নিম্নলিখিত প্যারামিটারগুলো অন্তর্ভুক্ত করুন:
-
navigate=yes: এই প্যারামিটারটি সক্রিয় নেভিগেশন বাধ্যতামূলক করে। -
external_trip_token: এই প্যারামিটারটি আপনার প্রমাণীকৃত ট্রিপ টোকেন সরবরাহ করে।
নিম্নলিখিত উদাহরণগুলি দেখায় কিভাবে বিভিন্ন গন্তব্য বিন্যাস ব্যবহার করে Waze-এর জন্য লঞ্চ URL তৈরি করতে হয়:
- অক্ষাংশ/দ্রাঘিমাংশ স্থানাঙ্ক:
https://waze.com/ul?ll=-33.8569%2C151.2152&navigate=yes&external_trip_token=TRIP_TOKEN
- ঠিকানা স্ট্রিং:
https://waze.com/ul?&q=1600%20Amphitheatre...&navigate=yes&external_trip_token=TRIP_TOKEN
- স্থান আইডি:
https://waze.com/ul?google_place_id=PLACE_ID&navigate=yes&external_trip_token=TRIP_TOKEN
আপনার অ্যাপ্লিকেশন আইডি প্রদান করুন (শুধুমাত্র অ্যান্ড্রয়েডের জন্য)
অ্যান্ড্রয়েডে আপনার অ্যাপের সাথে একটি নেভিগেশন সেশন যুক্ত করতে, আপনার যাচাইকৃত অ্যাপ্লিকেশন আইডি প্রদান করুন। এটি আপনার অ্যাপকে ভ্রমণের উৎস হিসেবে শনাক্ত করে, যাতে গুগল ম্যাপস বা ওয়েজ সক্রিয় যাত্রাটিকে আপনার প্ল্যাটফর্মের সাথে লিঙ্ক করতে পারে।
আপনার অ্যাপ্লিকেশন আইডি প্রদান করলে নিম্নলিখিত বৈশিষ্ট্যগুলি সক্রিয় হয়:
- ডেটা শেয়ার করার অনুমোদন: আপনার অ্যাপটি সক্রিয় ট্রিপ ডেটা গ্রহণ করার জন্য অনুমোদিত কিনা, তা যাচাই করে।
- ড্রাইভারের সম্মতি সক্ষম করুন: এটি সম্মতি স্ক্রিনে আপনার ব্যবসার নাম এবং গোপনীয়তা নীতি পূরণ করে, যা নিশ্চিত করে যে ড্রাইভার জানতে পারে কে তার রিয়েল-টাইম অবস্থান এবং পৌঁছানোর আনুমানিক সময় (ETA) পাচ্ছে।
- রিটার্ন বাটন সক্রিয় করুন: এর মাধ্যমে গুগল ম্যাপস বা ওয়েজ একটি ব্র্যান্ডেড রিটার্ন বাটন তৈরি করতে পারবে, যাতে চালকরা আপনার অ্যাপে ফিরে আসতে পারেন।
অ্যান্ড্রয়েডে গুগল ম্যাপস বা ওয়েজ-এ অ্যাপ্লিকেশন আইডি পাঠাতে, Intent.EXTRA_REFERRER_NAME ব্যবহার করে লঞ্চ ইন্টেন্টে (যেটি লঞ্চ ইউআরএল স্ট্রিং বহন করে) আপনার প্যাকেজ নেমটি যোগ করুন।
নিচের উদাহরণটিতে দেখানো হয়েছে কীভাবে ইন্টেন্টে প্যাকেজের নাম যোগ করতে হয়:
intent.putExtra(Intent.EXTRA_REFERRER_NAME, "android-app://${application.packageName}")
ড্রাইভারদের কীভাবে আপনার অ্যাপে ফিরে আসতে দেবেন
ন্যাভিগেশন কানেক্ট একটি বটম বার (গুগল ম্যাপস) অথবা একটি ব্র্যান্ডেড ব্যাক বাটন (ওয়েজ) প্রদর্শন করে, যাতে চালক ভ্রমণের যেকোনো পর্যায়ে বা গন্তব্যে পৌঁছানোর পর নির্বিঘ্নে আপনার অ্যাপে ফিরে যেতে পারেন।
অ্যান্ড্রয়েড
আপনাকে অবশ্যই একটি PendingIntent তৈরি করতে হবে যা আপনার অ্যাপের অ্যাক্টিভিটিকে নির্দেশ করে। এই PendingIntent লঞ্চ ইন্টেন্টের সাথে একটি এক্সট্রা হিসেবে "pendingIntent" এক্সাক্ট কী ব্যবহার করে সংযুক্ত করুন। যখন ব্যবহারকারী রিটার্ন বোতামে ট্যাপ করেন, তখন Google Maps বা Waze আপনার অ্যাপটিকে ফোরগ্রাউন্ডে আনার জন্য এই ইন্টেন্টটি কার্যকর করে।
intent.putExtra("pendingIntent", getPendingIntent())iOS (শুধুমাত্র Waze-এর জন্য)
রিটার্ন বাটনটি সক্রিয় করতে লঞ্চ ইউআরএল-এ কিছু যোগ করার প্রয়োজন নেই। আপনি আপনার অ্যাপটি যাচাই করার সময় যে ইউনিভার্সাল লিঙ্কটি নিবন্ধন করেছিলেন, Waze স্বয়ংক্রিয়ভাবে সেটিই ব্যবহার করে।
কোডের নমুনা
নিম্নলিখিত কোড নমুনাগুলিতে দেখানো হয়েছে কীভাবে নেভিগেশন কানেক্ট ব্যবহার করে আপনার অ্যাপ থেকে গুগল ম্যাপস বা ওয়েজ চালু করতে হয় এবং "অ্যাপে ফিরে যান" বোতামটি সক্রিয় করতে হয়।
গুগল ম্যাপস (অ্যান্ড্রয়েড)
নিম্নলিখিত কোটলিন কোডটি একটি নমুনা ফাংশন প্রদর্শন করে যা প্রয়োজনীয় প্যারামিটার সহ একটি নেভিগেশন কানেক্ট সেশন চালু করে।
private val destinationAddress = "1600 Amphitheatre Parkway, Mountain View, CA 94043"
private fun launchNavConnect() {
val jwtToken = "TRIP_TOKEN"
try {
// URL Encode the destination
val encodedDestination = URLEncoder.encode(destinationAddress, "UTF-8")
val navConnectUrl = "https://www.google.com/maps/dir/?api=1" +
"&destination=$encodedDestination" +
"&dir_action=navigate" +
"&action_token=$jwtToken"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(navConnectUrl))
// Explicitly set GMM package to ensure it opens in Google Maps
intent.setPackage("com.google.android.apps.maps")
// Add your application ID to the intent
intent.putExtra(Intent.EXTRA_REFERRER_NAME, "android-app://${application.packageName}")
// set up the NavConnect back button
intent.putExtra("pendingIntent", getPendingIntent())
startActivity(intent)
} catch (e: Exception) {
// handle errors
}
}
private fun getPendingIntent(): PendingIntent? {
val returnIntent = Intent(application, MainActivity::class.java) // replace with your activity to launch
returnIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
val flags = PendingIntent.FLAG_IMMUTABLE
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) {
return PendingIntent.getActivity(application, 0, returnIntent, flags)
}
val options =
ActivityOptions.makeBasic()
.setPendingIntentCreatorBackgroundActivityStartMode(
ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED
)
return PendingIntent.getActivity(application, 0, returnIntent, flags, options.toBundle())
}ওয়েজ (অ্যান্ড্রয়েড)
নিম্নলিখিত কোটলিন কোডটি একটি নমুনা ফাংশন প্রদর্শন করে যা প্রয়োজনীয় প্যারামিটার সহ একটি নেভিগেশন কানেক্ট সেশন চালু করে।
private val destinationAddress = "1600 Amphitheatre Parkway, Mountain View, CA 94043"
private fun launchNavConnect() {
val tripToken = "TRIP_TOKEN"
try {
// URL Encode the destination
val encodedDestination = URLEncoder.encode(destinationAddress, "UTF-8")
val navConnectUrl = "https://waze.com/ul?" +
"&q=$encodedDestination" +
"&navigate=yes" +
"&external_trip_token=$tripToken"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(navConnectUrl))
// Explicitly set package name to ensure it opens in Waze
intent.setPackage("com.waze")
// Add your application ID to the intent
val referrerName = "android-app://${application.packageName}"
intent.putExtra(Intent.EXTRA_REFERRER_NAME, referrerName)
// set up the NavConnect back button
intent.putExtra("pendingIntent", getPendingIntent())
startActivity(intent)
} catch (e: Exception) {
// handle errors
}
}
private fun getPendingIntent(): PendingIntent? {
val returnIntent = Intent(application, MainActivity::class.java) // replace with your activity to launch
returnIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
val flags = PendingIntent.FLAG_IMMUTABLE
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) {
return PendingIntent.getActivity(application, 0, returnIntent, flags)
}
val options =
ActivityOptions.makeBasic()
.setPendingIntentCreatorBackgroundActivityStartMode(
ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED
)
return PendingIntent.getActivity(application, 0, returnIntent, flags, options.toBundle())
}Waze (iOS)
নিম্নলিখিত সুইফট কোডটি একটি নমুনা ফাংশন প্রদর্শন করে যা প্রয়োজনীয় প্যারামিটার সহ একটি নেভিগেশন কানেক্ট সেশন চালু করে।
openWazeUrl(queryItems: [URLQueryItem(name: "q", value: "1600 Amphitheatre Parkway")])
private func openWazeUrl(queryItems: [URLQueryItem]) {
var components = URLComponents()
components.scheme = "https"
components.host = "waze.com"
components.path = "/ul"
// Create a mutable copy of the queryItems.
var mutableQueryItems = queryItems
// Add Trip Token
guard let tokenText = tokenField.text, !tokenText.isEmpty else {
return
}
let token = URLQueryItem(name: "external_trip_token", value: tokenText)
mutableQueryItems.append(token)
// Add compulsory params
mutableQueryItems.append(URLQueryItem(name: "navigate", value: "yes"))
// Construct and Launch URL
components.queryItems = mutableQueryItems
guard let url = components.url else {
return
}
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}