আপনি আপনার ট্রিপ এবং অর্ডার অগ্রগতি অ্যাপ্লিকেশনে উন্নত নেভিগেশন এবং ট্র্যাকিং প্রদান করতে ড্রাইভার SDK ব্যবহার করতে পারেন। ড্রাইভার SDK অন-ডিমান্ড রাইডস এবং ডেলিভারি সলিউশন ফ্লিট ইঞ্জিনে গাড়ির অবস্থান এবং টাস্ক আপডেট প্রদান করে।
ড্রাইভার SDK ফ্লিট ইঞ্জিন পরিষেবা এবং আপনার কাস্টম পরিষেবাগুলিকে গাড়ির অবস্থান এবং অবস্থা সম্পর্কে সচেতন রাখে৷ উদাহরণস্বরূপ, যানবাহনটি ONLINE
বা OFFLINE
হতে পারে এবং ট্রিপ অগ্রসর হওয়ার সাথে সাথে গাড়ির অবস্থান পরিবর্তিত হয়৷
নূন্যতম সিস্টেমের জন্য আবশ্যক
পূর্বশর্ত
এই নির্দেশিকাটি অনুমান করে যে আপনার অ্যাপ ইতিমধ্যেই নেভিগেশন SDK প্রয়োগ করেছে এবং ফ্লিট ইঞ্জিন ব্যাকএন্ড সেট আপ এবং উপলব্ধ। যাইহোক, ন্যাভিগেশন SDK কিভাবে সেট আপ করতে হয় তার নমুনা কোডটি প্রদান করে।
এছাড়াও আপনাকে অবশ্যই আপনার Google ক্লাউড প্রজেক্টে iOS এর জন্য Maps SDK সক্ষম করতে হবে এবং একটি API কী পেতে হবে ৷
প্রকল্প কনফিগারেশন
সুইফট প্যাকেজ ম্যানেজার
ড্রাইভার SDK সুইফট প্যাকেজ ম্যানেজারের মাধ্যমে ইনস্টল করা যেতে পারে। SDK যোগ করতে, নিশ্চিত করুন যে আপনি যেকোন বিদ্যমান ড্রাইভার SDK নির্ভরতা মুছে ফেলেছেন।
একটি নতুন বা বিদ্যমান প্রকল্পে SDK যোগ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- আপনার Xcode
project
বাworkspace
খুলুন, তারপর ফাইল > প্যাকেজ নির্ভরতা যোগ করুন এ যান। - URL হিসেবে https://github.com/googlemaps/ios-driver-sdk লিখুন, প্যাকেজ টানতে এন্টার টিপুন এবং "প্যাকেজ যোগ করুন" এ ক্লিক করুন।
- একটি নির্দিষ্ট
version
ইনস্টল করতে, নির্ভরতা নিয়ম ক্ষেত্রটি সংস্করণ-ভিত্তিক বিকল্পগুলির একটিতে সেট করুন। নতুন প্রকল্পগুলির জন্য, আমরা সর্বশেষ সংস্করণ নির্দিষ্ট করার এবং "সঠিক সংস্করণ" বিকল্পটি ব্যবহার করার পরামর্শ দিই৷ একবার সম্পূর্ণ হলে, "প্যাকেজ যোগ করুন" এ ক্লিক করুন। - প্যাকেজ পণ্য চয়ন করুন উইন্ডো থেকে, যাচাই করুন
GoogleRidesharingDriver
আপনার নির্ধারিতmain
লক্ষ্যে যোগ করা হবে। একবার সম্পূর্ণ হলে, "প্যাকেজ যোগ করুন" এ ক্লিক করুন। - আপনার ইনস্টলেশন যাচাই করতে, আপনার লক্ষ্যের
General
ফলকে নেভিগেট করুন। ফ্রেমওয়ার্ক, লাইব্রেরি এবং এমবেডেড সামগ্রীতে আপনার ইনস্টল করা প্যাকেজগুলি দেখতে হবে। আপনি প্যাকেজ এবং এর সংস্করণ যাচাই করতে "প্রজেক্ট নেভিগেটর" এর "প্যাকেজ নির্ভরতা" বিভাগটি দেখতে পারেন।
একটি বিদ্যমান প্রকল্পের জন্য package
আপডেট করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
আপনি যদি 9.0.0 এর আগে কোনো সংস্করণ থেকে আপগ্রেড করছেন, তাহলে আপনাকে অবশ্যই নিম্নলিখিত নির্ভরতাগুলি সরিয়ে ফেলতে হবে: আপগ্রেড করার পরে
GoogleMapsBase
,GoogleMapsCore
, এবংGoogleMapsM4B
৷GoogleMaps
এর জন্য নির্ভরতা মুছে ফেলবেন না। আরও তথ্যের জন্য, সংস্করণ 9.0.0 রিলিজ নোট দেখুন।আপনার Xcode প্রকল্প কনফিগারেশন সেটিংস থেকে, ফ্রেমওয়ার্ক, লাইব্রেরি এবং এমবেডেড সামগ্রী খুঁজুন। নিম্নলিখিত কাঠামো অপসারণ করতে বিয়োগ চিহ্ন(-) ব্যবহার করুন:
-
GoogleMapsBase
(শুধুমাত্র 9.0.0 এর আগের সংস্করণ থেকে আপগ্রেডের জন্য) -
GoogleMapsCore
(শুধুমাত্র 9.0.0 এর আগের সংস্করণ থেকে আপগ্রেডের জন্য) -
GoogleMapsM4B
(শুধুমাত্র 9.0.0 এর আগের সংস্করণ থেকে আপগ্রেডের জন্য)
-
- এক্সকোড থেকে, "ফাইল> প্যাকেজ> সর্বশেষ প্যাকেজ সংস্করণে আপডেট" এ যান।
- আপনার ইনস্টলেশন যাচাই করতে, প্যাকেজ এবং এর সংস্করণ যাচাই করতে প্রজেক্ট নেভিগেটরের প্যাকেজ নির্ভরতা বিভাগে যান।
CocoaPods
ব্যবহার করে যোগ করা বিদ্যমান ড্রাইভার SDK নির্ভরতাগুলি সরাতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- আপনার এক্সকোড ওয়ার্কস্পেস বন্ধ করুন। টার্মিনাল খুলুন এবং নিম্নলিখিত কমান্ডটি চালান:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
Podfile
,Podfile.resolved
এবং Xcodeworkspace
সরিয়ে ফেলুন যদি আপনি CocoaPods ছাড়া অন্য কিছুর জন্য ব্যবহার না করেন।
ম্যানুয়ালি ইনস্টল করা বিদ্যমান ড্রাইভার SDK সরাতে, এই পদক্ষেপগুলি অনুসরণ করুন:
আপনার Xcode প্রকল্প কনফিগারেশন সেটিংস থেকে, ফ্রেমওয়ার্ক, লাইব্রেরি এবং এমবেডেড সামগ্রী খুঁজুন। নিম্নলিখিত কাঠামো সরাতে বিয়োগ চিহ্ন
(-)
ব্যবহার করুন:-
GoogleRidesharingDriver.xcframework
-
আপনার Xcode প্রকল্পের শীর্ষ স্তরের ডিরেক্টরি থেকে,
GoogleRidesharingDriver
বান্ডেলটি সরান৷
কোকোপডস
CocoaPods ব্যবহার করে ড্রাইভার SDK কনফিগার করতে, আপনার নিম্নলিখিত আইটেমগুলির প্রয়োজন:
- CocoaPods টুল: এই টুলটি ইনস্টল করতে, টার্মিনাল খুলুন এবং নিম্নলিখিত কমান্ডটি চালান।
sudo gem install cocoapods
ড্রাইভার SDK-এর জন্য একটি Podfile তৈরি করুন এবং API এবং এর নির্ভরতা ইনস্টল করতে এটি ব্যবহার করুন: আপনার প্রকল্প ডিরেক্টরিতে Podfile নামে একটি ফাইল তৈরি করুন। এই ফাইলটি আপনার প্রকল্পের নির্ভরতা সংজ্ঞায়িত করে। Podfile সম্পাদনা করুন এবং আপনার নির্ভরতা যোগ করুন। এখানে একটি উদাহরণ যা নির্ভরতা অন্তর্ভুক্ত করে:
source "https://github.com/CocoaPods/Specs.git" target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GoogleRidesharingDriver' end
এখানে একটি উদাহরণ রয়েছে যা নির্ভরতা হিসাবে ড্রাইভার SDK-এর জন্য আলফা এবং বিটা পডগুলি অন্তর্ভুক্ত করে:
source "https://cpdc-eap.googlesource.com/ridesharing-driver-sdk.git" source "https://github.com/CocoaPods/Specs.git" target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GoogleRidesharingDriver' end
Podfile সংরক্ষণ করুন। একটি টার্মিনাল খুলুন এবং Podfile ধারণকারী ডিরেক্টরিতে যান:
cd <path-to-project>
পড ইনস্টল কমান্ড চালান। এটি Podfile-এ নির্দিষ্ট করা APIগুলিকে ইনস্টল করবে, সাথে তাদের যে কোনো নির্ভরতা থাকতে পারে।
pod install
Xcode বন্ধ করুন, এবং তারপর Xcode চালু করতে আপনার প্রকল্পের .xcworkspace ফাইল খুলুন (ডাবল-ক্লিক করুন)। এই সময় থেকে, আপনাকে প্রকল্পটি খুলতে .xcworkspace ফাইলটি ব্যবহার করতে হবে।
আরো বিস্তারিত জানার জন্য CocoaPods শুরু করার নির্দেশিকা পড়ুন।
ম্যানুয়াল ইনস্টলেশন
একটি XCFramework হল একটি বাইনারি প্যাকেজ যা আপনি ড্রাইভার SDK ইনস্টল করতে ব্যবহার করেন। আপনি অ্যাপল সিলিকন ব্যবহার করে মেশিন সহ একাধিক প্ল্যাটফর্মে এই প্যাকেজটি ব্যবহার করতে পারেন। এই নির্দেশিকাটি দেখায় কিভাবে ম্যানুয়ালি আপনার প্রোজেক্টে ড্রাইভার SDK ধারণকারী XCFramework যোগ করতে হয় এবং Xcode-এ আপনার বিল্ড সেটিংস কনফিগার করতে হয়।
SDK বাইনারি এবং সম্পদ ডাউনলোড করুন:
XCFramework এবং সংস্থানগুলি অ্যাক্সেস করতে ফাইলগুলি বের করুন৷
Xcode শুরু করুন এবং হয় একটি বিদ্যমান প্রকল্প খুলুন, অথবা একটি নতুন প্রকল্প তৈরি করুন। আপনি যদি iOS এ নতুন হন, একটি নতুন প্রকল্প তৈরি করুন এবং iOS অ্যাপ টেমপ্লেট নির্বাচন করুন।
আপনার প্রোজেক্ট গ্রুপের অধীনে একটি ফ্রেমওয়ার্ক গ্রুপ তৈরি করুন যদি একটি ইতিমধ্যে বিদ্যমান না থাকে।
ড্রাইভার SDK ইনস্টল করতে,
GoogleRidesharingDriver.xcframework
ফাইলটিকে আপনার প্রকল্পে ফ্রেমওয়ার্ক, লাইব্রেরি এবং এমবেডেড সামগ্রীর অধীনে টেনে আনুন। যখন অনুরোধ করা হয়, প্রয়োজন হলে আইটেমগুলি অনুলিপি করুন নির্বাচন করুন।ডাউনলোড করা
GoogleRidesharingDriver.bundle
টিকে আপনার Xcode প্রকল্পের শীর্ষ স্তরের ডিরেক্টরিতে টেনে আনুন৷ যখন অনুরোধ করা হয়,Copy items if needed
নির্বাচন করুন।প্রজেক্ট নেভিগেটর থেকে আপনার প্রজেক্ট সিলেক্ট করুন এবং আপনার অ্যাপ্লিকেশনের টার্গেট বেছে নিন।
বিল্ড ফেজ ট্যাবটি খুলুন এবং লাইব্রেরির সাথে লিঙ্ক বাইনারিতে, নিম্নলিখিত ফ্রেমওয়ার্ক এবং লাইব্রেরিগুলি যোগ করুন যদি সেগুলি ইতিমধ্যে উপস্থিত না থাকে:
-
Accelerate.framework
-
AudioToolbox.framework
-
AVFoundation.framework
-
CoreData.framework
-
CoreGraphics.framework
-
CoreLocation.framework
-
CoreTelephony.framework
-
CoreText.framework
-
GLKit.framework
-
ImageIO.framework
-
libc++.tbd
-
libxml2.tbd
-
libz.tbd
-
LocalAuthentication.framework
-
OpenGLES.framework
-
QuartzCore.framework
-
SystemConfiguration.framework
-
UIKit.framework
-
WebKit.framework
-
একটি নির্দিষ্ট লক্ষ্যের পরিবর্তে আপনার প্রকল্পটি বেছে নিন এবং বিল্ড সেটিংস ট্যাবটি খুলুন। অন্যান্য লিঙ্কার ফ্ল্যাগ বিভাগে, ডিবাগ এবং রিলিজ উভয়ের জন্য
-ObjC
যোগ করুন। যদি এই সেটিংসগুলি দৃশ্যমান না হয়, তবে বিল্ড সেটিংস বারে ফিল্টারটি মৌলিক থেকে সকলে পরিবর্তন করুন৷
অ্যাপল প্রাইভেসি ম্যানিফেস্ট ফাইল পরিদর্শন করুন
অ্যাপলের অ্যাপ স্টোরে অ্যাপের জন্য অ্যাপের গোপনীয়তার বিবরণ প্রয়োজন। আপডেট এবং আরও তথ্যের জন্য অ্যাপল অ্যাপ স্টোরের গোপনীয়তা বিবরণ পৃষ্ঠাতে যান।
Apple Privacy Manifest ফাইলটি SDK-এর জন্য রিসোর্স বান্ডেলে অন্তর্ভুক্ত করা হয়েছে। গোপনীয়তা ম্যানিফেস্ট ফাইলটি অন্তর্ভুক্ত করা হয়েছে তা যাচাই করতে এবং এর বিষয়বস্তু পরিদর্শন করতে, আপনার অ্যাপের একটি সংরক্ষণাগার তৈরি করুন এবং সংরক্ষণাগার থেকে একটি গোপনীয়তা প্রতিবেদন তৈরি করুন ৷
অনুমোদন এবং প্রমাণীকরণ বাস্তবায়ন
যখন আপনার ড্রাইভার অ্যাপ ফ্লিট ইঞ্জিন ব্যাকএন্ডে আপডেট তৈরি করে এবং পাঠায়, তখন অনুরোধে অবশ্যই বৈধ অ্যাক্সেস টোকেন অন্তর্ভুক্ত থাকতে হবে। এই অনুরোধগুলিকে অনুমোদন এবং প্রমাণীকরণ করতে, ড্রাইভার SDK আপনার বস্তুটিকে GMTDAuthorization
প্রোটোকলের সাথে সঙ্গতিপূর্ণ কল করে৷ বস্তুটি প্রয়োজনীয় অ্যাক্সেস টোকেন প্রদানের জন্য দায়ী।
অ্যাপ ডেভেলপার হিসেবে, আপনি কীভাবে টোকেন তৈরি করবেন তা বেছে নিন। আপনার বাস্তবায়ন নিম্নলিখিত কাজ করার ক্ষমতা প্রদান করা উচিত:
- একটি অ্যাক্সেস টোকেন আনুন, সম্ভবত JSON ফর্ম্যাটে, একটি HTTPS সার্ভার থেকে।
- টোকেনটি পার্স করুন এবং ক্যাশে করুন।
- মেয়াদ শেষ হয়ে গেলে টোকেনটি রিফ্রেশ করুন।
ফ্লিট ইঞ্জিন সার্ভার দ্বারা প্রত্যাশিত টোকেনগুলির বিশদ বিবরণের জন্য, অনুমোদনের জন্য একটি JSON ওয়েব টোকেন (JWT) তৈরি করা দেখুন।
প্রদানকারী আইডিটি Google ক্লাউড প্রকল্প আইডির মতোই। আরও তথ্যের জন্য ফ্লিট ইঞ্জিন কুইকস্টার্ট গাইড দেখুন।
নিম্নলিখিত উদাহরণ একটি অ্যাক্সেস টোকেন প্রদানকারী প্রয়োগ করে:
সুইফট
import GoogleRidesharingDriver
private let providerURL = "INSERT_YOUR_TOKEN_PROVIDER_URL"
class SampleAccessTokenProvider: NSObject, GMTDAuthorization {
private struct AuthToken {
// The cached vehicle token.
let token: String
// Keep track of when the token expires for caching.
let expiration: TimeInterval
// Keep track of the vehicle ID the cached token is for.
let vehicleID: String
}
enum AccessTokenError: Error {
case missingAuthorizationContext
case missingData
}
private var authToken: AuthToken?
func fetchToken(
with authorizationContext: GMTDAuthorizationContext?,
completion: @escaping GMTDAuthTokenFetchCompletionHandler
) {
// Get the vehicle ID from the authorizationContext. This is set by the Driver SDK.
guard let authorizationContext = authorizationContext else {
completion(nil, AccessTokenError.missingAuthorizationContext)
return
}
let vehicleID = authorizationContext.vehicleID
// If appropriate, use the cached token.
if let authToken = authToken,
authToken.expiration > Date.now.timeIntervalSince1970 && authToken.vehicleID == vehicleID
{
completion(authToken.token, nil)
return
}
// Otherwise, try to fetch a new token from your server.
let request = URLRequest(url: URL(string: providerURL))
let task = URLSession.shared.dataTask(with: request) { [weak self] data, _, error in
guard let strongSelf = self else { return }
guard error == nil else {
completion(nil, error)
return
}
// Replace the following key values with the appropriate keys based on your
// server's expected response.
let vehicleTokenKey = "VEHICLE_TOKEN_KEY"
let tokenExpirationKey = "TOKEN_EXPIRATION"
guard let data = data,
let fetchData = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
let token = fetchData[vehicleTokenKey] as? String,
let expiration = fetchData[tokenExpirationKey] as? Double
else {
completion(nil, AccessTokenError.missingData)
return
}
strongSelf.authToken = AuthToken(
token: token, expiration: expiration, vehicleID: vehicleID)
completion(token, nil)
}
task.resume()
}
}
উদ্দেশ্য গ
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
// SampleAccessTokenProvider.h
@interface SampleAccessTokenProvider : NSObject<GMTDAuthorization>
@end
static NSString *const PROVIDER_URL = @"INSERT_YOUR_TOKEN_PROVIDER_URL";
// SampleAccessTokenProvider.m
@implementation SampleAccessTokenProvider{
// The cached vehicle token.
NSString *_cachedVehicleToken;
// Keep track of the vehicle ID the cached token is for.
NSString *_lastKnownVehicleID;
// Keep track of when tokens expire for caching.
NSTimeInterval _tokenExpiration;
}
- (void)fetchTokenWithContext:(nullable GMTDAuthorizationContext *)authorizationContext
completion:(nonnull GMTDAuthTokenFetchCompletionHandler)completion {
// Get the vehicle ID from the authorizationContext. This is set by the Driver SDK.
NSString *vehicleID = authorizationContext.vehicleID;
if (!vehicleID) {
NSAssert(NO, @"Vehicle ID is missing from authorizationContext.");
return;
}
// Clear cached vehicle token if vehicle ID has changed.
if (![_lastKnownVehicleID isEqual:vehicleID]) {
_tokenExpiration = 0.0;
_cachedVehicleToken = nil;
}
_lastKnownVehicleID = vehicleID;
// Clear cached vehicletoken if it has expired.
if ([[NSDate date] timeIntervalSince1970] > _tokenExpiration) {
_cachedVehicleToken = nil;
}
// If appropriate, use the cached token.
if (_cachedVehicleToken) {
completion(_cachedVehicleToken, nil);
return;
}
// Otherwise, try to fetch a new token from your server.
NSURL *requestURL = [NSURL URLWithString:PROVIDER_URL];
NSMutableURLRequest *request =
[[NSMutableURLRequest alloc] initWithURL:requestURL];
request.HTTPMethod = @"GET";
// Replace the following key values with the appropriate keys based on your
// server's expected response.
NSString *vehicleTokenKey = @"VEHICLE_TOKEN_KEY";
NSString *tokenExpirationKey = @"TOKEN_EXPIRATION";
__weak typeof(self) weakSelf = self;
void (^handler)(NSData *_Nullable data, NSURLResponse *_Nullable response,
NSError *_Nullable error) =
^(NSData *_Nullable data, NSURLResponse *_Nullable response, NSError *_Nullable error) {
typeof(self) strongSelf = weakSelf;
if (error) {
completion(nil, error);
return;
}
NSError *JSONError;
NSMutableDictionary *JSONResponse =
[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&JSONError];
if (JSONError) {
completion(nil, JSONError);
return;
} else {
// Sample code only. No validation logic.
id expirationData = JSONResponse[tokenExpirationKey];
if ([expirationData isKindOfClass:[NSNumber class]]) {
NSTimeInterval expirationTime = ((NSNumber *)expirationData).doubleValue;
strongSelf->_tokenExpiration = [[NSDate date] timeIntervalSince1970] + expirationTime;
}
strongSelf->_cachedVehicleToken = JSONResponse[vehicleTokenKey];
completion(JSONResponse[vehicleTokenKey], nil);
}
};
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *mainQueueURLSession =
[NSURLSession sessionWithConfiguration:config delegate:nil
delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *task = [mainQueueURLSession dataTaskWithRequest:request completionHandler:handler];
[task resume];
}
@end
একটি RidesharingDriverAPI উদাহরণ তৈরি করুন
একটি GMTDVehicleReporter
ইনস্ট্যান্স পেতে, আপনাকে প্রথমে প্রোভাইডারআইডি, ভেহিক্যালআইডি, ড্রাইভার কনটেক্সট এবং অ্যাক্সেস টোকেনপ্রোভাইডার ব্যবহার করে একটি GMTDRidesharingDriverAPI
ইনস্ট্যান্স তৈরি করতে হবে। প্রদানকারী আইডি Google ক্লাউড প্রজেক্ট আইডির মতোই। এবং আপনি সরাসরি ড্রাইভার API থেকে GMTDVehicleReporter
উদাহরণ অ্যাক্সেস করতে পারেন।
নিম্নলিখিত উদাহরণটি একটি GMTDRidesharingDriverAPI
উদাহরণ তৈরি করে:
সুইফট
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController {
private let mapView: GMSMapView
override func viewDidLoad() {
super.viewDidLoad()
let vehicleID = "INSERT_CREATED_VEHICLE_ID"
let accessTokenProvider = SampleAccessTokenProvider()
let driverContext = GMTDDriverContext(
accessTokenProvider: accessTokenProvider,
providerID: providerID,
vehicleID: vehicleID,
navigator: mapView.navigator)
let ridesharingDriverAPI = GMTDRidesharingDriverAPI(driverContext: driverContext)
}
}
উদ্দেশ্য গ
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
NSString *vehicleID = @"INSERT_CREATED_VEHICLE_ID";
SampleAccessTokenProvider *accessTokenProvider =
[[SampleAccessTokenProvider alloc] init];
GMTDDriverContext *driverContext =
[[GMTDDriverContext alloc] initWithAccessTokenProvider:accessTokenProvider
providerID:PROVIDER_ID
vehicleID:vehicleID
navigator:_mapView.navigator];
GMTDRidesharingDriverAPI *ridesharingDriverAPI = [[GMTDRidesharingDriverAPI alloc] initWithDriverContext:driverContext];
}
ঐচ্ছিকভাবে VehicleReporter ইভেন্টগুলি শুনুন
GMTDVehicleReporter
পর্যায়ক্রমে গাড়ি আপডেট করে যখন locationTrackingEnabled
true
হয়। এই পর্যায়ক্রমিক আপডেটগুলিতে প্রতিক্রিয়া জানাতে, যেকোনো বস্তু GMTDVehicleReporterListener
প্রোটোকল মেনে GMTDVehicleReporter
ইভেন্টগুলিতে সদস্যতা নিতে পারে।
আপনি নিম্নলিখিত ইভেন্টগুলি পরিচালনা করতে পারেন:
vehicleReporter(_:didSucceed:)
ড্রাইভার অ্যাপকে জানায় যে ব্যাকএন্ড পরিষেবাগুলি সফলভাবে গাড়ির অবস্থান এবং রাজ্য আপডেট পেয়েছে৷
vehicleReporter(_:didFail:withError:)
শ্রোতাকে অবহিত করে যে একটি গাড়ির আপডেট ব্যর্থ হয়েছে৷ যতক্ষণ লোকেশন ট্র্যাকিং সক্ষম থাকে,
GMTDVehicleReporter
ফ্লিট ইঞ্জিন ব্যাকএন্ডে সর্বশেষ ডেটা পাঠাতে থাকে।
নিম্নলিখিত উদাহরণ এই ঘটনাগুলি পরিচালনা করে:
সুইফট
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.add(self)
}
func vehicleReporter(_ vehicleReporter: GMTDVehicleReporter, didSucceed vehicleUpdate: GMTDVehicleUpdate) {
// Handle update succeeded.
}
func vehicleReporter(_ vehicleReporter: GMTDVehicleReporter, didFail vehicleUpdate: GMTDVehicleUpdate, withError error: Error) {
// Handle update failed.
}
}
উদ্দেশ্য গ
/*
* SampleViewController.h
*/
@interface SampleViewController : UIViewController<GMTDVehicleReporterListener>
@end
/*
* SampleViewController.m
*/
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
[ridesharingDriverAPI.vehicleReporter addListener:self];
}
- (void)vehicleReporter:(GMTDVehicleReporter *)vehicleReporter didSucceedVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate {
// Handle update succeeded.
}
- (void)vehicleReporter:(GMTDVehicleReporter *)vehicleReporter didFailVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate withError:(NSError *)error {
// Handle update failed.
}
@end
GMTDVehicleReporter কে GMSRoadSnappedLocationProvider-এ শ্রোতা হিসেবে যোগ করুন
ড্রাইভার SDK-কে অবস্থান আপডেট দেওয়ার জন্য, GMTDVehicleReporter
GMSRoadSnappedLocationProvider
এর শ্রোতা হিসাবে সেট করতে হবে।
সুইফট
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
if let roadSnappedLocationProvider = mapView.roadSnappedLocationProvider {
roadSnappedLocationProvider.add(ridesharingDriverAPI.vehicleReporter)
roadSnappedLocationProvider.startUpdatingLocation()
}
}
}
উদ্দেশ্য গ
/*
* SampleViewController.h
*/
@interface SampleViewController : UIViewController<GMTDVehicleReporterListener>
@end
/*
* SampleViewController.m
*/
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
[_mapView.roadSnappedLocationProvider addListener:ridesharingDriverAPI.vehicleReporter];
[_mapView.roadSnappedLocationProvider startUpdatingLocation];
}
@end
অবস্থান ট্র্যাকিং সক্ষম করুন
অবস্থান ট্র্যাকিং সক্ষম করতে, আপনার অ্যাপ GMTDVehicleReporter
এ locationTrackingEnabled
কে true
সেট করতে পারে। GMTDVehicleReporter
স্বয়ংক্রিয়ভাবে অবস্থান আপডেট পাঠায়. পরিষেবাগুলি মিলে যাওয়ার পরে এবং একটি ট্রিপে যানটিকে বরাদ্দ করার পরে, GMTDVehicleReporter
স্বয়ংক্রিয়ভাবে রুট আপডেট পাঠায় যখন GMSNavigator
নেভিগেশন মোডে থাকে (যখন একটি গন্তব্য setDestinations
এর মাধ্যমে সেট করা হয়)।
ট্রিপ আপডেটের সময় যে রুট সেট করা হবে সেই রুটে ড্রাইভার নেভিগেশন সেশনের সময় নেভিগেট করছে। সুতরাং, যাত্রা ভাগাভাগি সঠিকভাবে কাজ করার জন্য, setDestinations
মাধ্যমে সেট করা ওয়েপয়েন্টটি ফ্লিট ইঞ্জিন ব্যাকএন্ডে সেট করা গন্তব্যের সাথে মেলে।
যদি locationTrackingEnabled
true
সেট করা থাকে, তাহলে locationUpdateInterval
এর জন্য সেট করা মানের উপর ভিত্তি করে নিয়মিত বিরতিতে ফ্লিট ইঞ্জিন ব্যাকএন্ডে ট্রিপ এবং গাড়ির আপডেট পাঠানো হয়। যদি locationTrackingEnabled
false
সেট করা হয়, আপডেটগুলি বন্ধ হয়ে যায় এবং গাড়ির অবস্থা GMTDVehicleState.offline
এ সেট করতে ফ্লিট ইঞ্জিন ব্যাকএন্ডে একটি চূড়ান্ত যানবাহন আপডেটের অনুরোধ পাঠানো হয়। যখন locationTrackingEnabled
false
সেট করা থাকে তখন ব্যর্থতাগুলি পরিচালনা করার বিষয়ে বিশেষ বিবেচনার জন্য updateVehicleState
দেখুন।
নিম্নলিখিত উদাহরণ অবস্থান ট্র্যাকিং সক্ষম করে:
সুইফট
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.locationTrackingEnabled = true
}
}
উদ্দেশ্য গ
/*
* SampleViewController.m
*/
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.locationTrackingEnabled = YES;
}
@end
ডিফল্টরূপে, প্রতিবেদনের ব্যবধান 10 সেকেন্ড, কিন্তু প্রতিবেদনের ব্যবধানটি locationUpdateInterval
এর সাথে পরিবর্তন করা যেতে পারে। ন্যূনতম সমর্থিত আপডেট ব্যবধান হল 5 সেকেন্ড। সর্বাধিক সমর্থিত আপডেট ব্যবধান হল 60 সেকেন্ড। আরও ঘন ঘন আপডেটের ফলে ধীর অনুরোধ এবং ত্রুটি হতে পারে।
গাড়ির অবস্থা আপডেট করুন
নিম্নলিখিত উদাহরণ দেখায় কিভাবে গাড়ির অবস্থা ONLINE
এ সেট করতে হয়। বিস্তারিত জানার জন্য updateVehicleState
দেখুন।
সুইফট
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.update(.online)
}
}
উদ্দেশ্য গ
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
[ridesharingDriverAPI.vehicleReporter
updateVehicleState:GMTDVehicleStateOnline];
}
@end
একটি update_mask
ত্রুটি ঘটতে পারে যখন মাস্ক খালি থাকে এবং এটি সাধারণত শুরু হওয়ার পরে প্রথম আপডেটের জন্য ঘটে। নিম্নলিখিত উদাহরণ দেখায় কিভাবে এই ত্রুটি পরিচালনা করতে হয়:
সুইফট
import GoogleRidesharingDriver
class VehicleReporterListener: NSObject, GMTDVehicleReporterListener {
func vehicleReporter(
_ vehicleReporter: GMTDVehicleReporter,
didFail vehicleUpdate: GMTDVehicleUpdate,
withError error: Error
) {
let fullError = error as NSError
if let innerError = fullError.userInfo[NSUnderlyingErrorKey] as? NSError {
let innerFullError = innerError as NSError
if innerFullError.localizedDescription.contains("update_mask cannot be empty") {
emptyMaskUpdates += 1
return
}
}
failedUpdates += 1
}
override init() {
emptyMaskUpdates = 0
failedUpdates = 0
}
}
উদ্দেশ্য গ
#import "VehicleReporterListener.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
@implementation VehicleReporterListener {
NSInteger emptyMaskUpdates = 0;
NSInteger failedUpdates = 0;
}
- (void)vehicleReporter:(GMTDVehicleReporter *)vehicleReporter
didFailVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate
withError:(NSError *)error {
for (NSError *underlyingError in error.underlyingErrors) {
if ([underlyingError.localizedDescription containsString:@"update_mask cannot be empty"]) {
emptyMaskUpdates += 1;
return;
}
}
failedUpdates += 1
}
@end
অবস্থান আপডেট অক্ষম করুন এবং গাড়িটিকে অফলাইনে নিয়ে যান
আপনার অ্যাপ আপডেট অক্ষম করতে পারে এবং গাড়িটিকে অফলাইনে নিয়ে যেতে পারে। উদাহরণস্বরূপ, যখন একটি ড্রাইভারের শিফট শেষ হয়, তখন আপনার অ্যাপ locationTrackingEnabled
false
সেট করতে পারে। আপডেটগুলি নিষ্ক্রিয় করা ফ্লিট ইঞ্জিন ব্যাকএন্ডে গাড়ির স্থিতি OFFLINE
সেট করে।
সুইফট
vehicleReporter.locationTrackingEnabled = false
উদ্দেশ্য গ
_vehicleReporter.locationTrackingEnabled = NO;