अपनी यात्रा और ऑर्डर की स्थिति बताने वाले ऐप्लिकेशन में बेहतर नेविगेशन और ट्रैकिंग की सुविधा देने के लिए, ड्राइवर का SDK टूल इस्तेमाल किया जा सकता है. ड्राइवर SDK, गाड़ी की जगह की जानकारी और टास्क से जुड़े अपडेट, मांग पर राइड और डिलीवरी करने में मदद करने वाले फ़्लीट इंजन की सुविधा देता है.
ड्राइवर SDK, फ़्लीट इंजन की सेवाओं और आपकी पसंद के मुताबिक बनाई गई सेवाओं को वाहन की जगह और स्थिति की जानकारी देता रहता है. उदाहरण के लिए, वाहन ONLINE
या
OFFLINE
हो सकता है और यात्रा के साथ-साथ वाहन की जगह बदल जाती है.
सिस्टम में कम से कम यह कॉन्फ़िगरेशन होना चाहिए
ज़रूरी शर्तें
इस गाइड में यह माना गया है कि आपके ऐप्लिकेशन में नेविगेशन SDK टूल पहले से लागू है और Fleet इंजन बैकएंड सेट अप किया गया है और उपलब्ध है. हालांकि, इस कोड में नेविगेशन SDK टूल सेट अप करने के तरीके का सैंपल दिया गया है.
आपको अपने Google Cloud प्रोजेक्ट में, iOS के लिए Maps SDK टूल को भी चालू करना होगा और एपीआई कुंजी पाएं.
प्रोजेक्ट कॉन्फ़िगरेशन
Swift पैकेज मैनेजर
ड्राइवर SDK टूल को Swift पैकेज मैनेजर की मदद से इंस्टॉल किया जा सकता है. SDK टूल जोड़ने के लिए, पक्का करें कि आपने ड्राइवर SDK टूल की सभी मौजूदा डिपेंडेंसी हटा दी हों.
SDK टूल को किसी नए या मौजूदा प्रोजेक्ट में जोड़ने के लिए, यह तरीका अपनाएं:
-
अपना Xcode
project
याworkspace
खोलें. इसके बाद, फ़ाइल > पैकेज डिपेंडेंसी जोड़ें पर जाएं. - यूआरएल के तौर पर, https://github.com/googlemaps/ios-driver-sdk डालें और पैकेज देखने के लिए, Enter दबाएं. इसके बाद, "पैकेज जोड़ें" पर क्लिक करें.
-
किसी खास
version
को इंस्टॉल करने के लिए, डिपेंडेंसी नियम फ़ील्ड को वर्शन के हिसाब से दिए गए विकल्पों में से किसी एक पर सेट करें. नए प्रोजेक्ट के लिए, हम सबसे नया वर्शन बताने और "एग्ज़ैक्ट वर्शन" विकल्प का इस्तेमाल करने का सुझाव देते हैं. यह प्रोसेस पूरी होने के बाद, "Add Package" पर क्लिक करें. -
पैकेज प्रॉडक्ट चुनें विंडो से, पुष्टि करें कि
GoogleRidesharingDriver
को आपके तय किए गएmain
टारगेट में जोड़ा गया है. यह प्रोसेस पूरी होने के बाद, "Add Package" पर क्लिक करें. -
अपने इंस्टॉलेशन की पुष्टि करने के लिए, टारगेट के
General
पैनल पर जाएं. फ़्रेमवर्क, लाइब्रेरी, और एम्बेड किए गए कॉन्टेंट में, आपको इंस्टॉल किए गए पैकेज दिखेंगे. पैकेज और उसके वर्शन की पुष्टि करने के लिए, "Project Navigator" के "पैकेज डिपेंडेंसी" सेक्शन में भी देखा जा सकता है.
अगर आपको किसी मौजूदा प्रोजेक्ट के लिए package
को अपडेट करना है, तो यह तरीका अपनाएं:
अगर आपने 9.0.0 से पहले के वर्शन से अपग्रेड किया है, तो अपग्रेड करने के बाद आपको ये डिपेंडेंसी हटानी होंगी:
GoogleMapsBase
,GoogleMapsCore
, औरGoogleMapsM4B
.GoogleMaps
के लिए डिपेंडेंसी न हटाएं. ज़्यादा जानकारी के लिए, वर्शन 9.0.0 के बारे में जानकारी देखें.अपने Xcode प्रोजेक्ट की कॉन्फ़िगरेशन सेटिंग में फ़्रेमवर्क, लाइब्रेरी, और एम्बेड किया गया कॉन्टेंट ढूंढें. नीचे दिए गए फ़्रेमवर्क को हटाने के लिए, माइनस साइन(-) का इस्तेमाल करें:
GoogleMapsBase
(सिर्फ़ 9.0.0 से पहले के वर्शन से अपग्रेड करने के लिए)GoogleMapsCore
(सिर्फ़ 9.0.0 से पहले के वर्शन से अपग्रेड करने के लिए)GoogleMapsM4B
(सिर्फ़ 9.0.0 से पहले के वर्शन से अपग्रेड करने के लिए)
- Xcode से, "फ़ाइल > पैकेज > नए पैकेज वर्शन पर अपडेट करें" पर जाएं.
- इंस्टॉल किए जाने की पुष्टि के लिए, Project Navigator के पैकेज डिपेंडेंसी सेक्शन पर जाएं और पैकेज और उसके वर्शन की पुष्टि करें.
CocoaPods
का इस्तेमाल करके जोड़ी गई मौजूदा ड्राइवर SDK डिपेंडेंसी हटाने के लिए, यह तरीका अपनाएं:
- अपना Xcode फ़ाइल फ़ोल्डर बंद करें. टर्मिनल खोलें और नीचे दिया गया निर्देश चलाएं:
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
CocoaPods का इस्तेमाल करके ड्राइवर SDK टूल को कॉन्फ़िगर करने के लिए, आपको इन आइटम की ज़रूरत होगी:
- CocoaPods टूल: इस टूल को इंस्टॉल करने के लिए, Terminal खोलें और नीचे दिया गया कमांड चलाएं.
sudo gem install cocoapods
ड्राइवर SDK टूल के लिए एक Podfile बनाएं. इसके बाद, एपीआई और उसकी डिपेंडेंसी को इंस्टॉल करने के लिए, इसका इस्तेमाल करें: अपनी प्रोजेक्ट डायरेक्ट्री में Podfile नाम की फ़ाइल बनाएं. यह फ़ाइल आपके प्रोजेक्ट की डिपेंडेंसी के बारे में बताती है. Podfile में बदलाव करें और अपनी डिपेंडेंसी जोड़ें. यहां डिपेंडेंसी का एक उदाहरण दिया गया है:
source "https://github.com/CocoaPods/Specs.git" target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GoogleRidesharingDriver' end
यहां एक उदाहरण दिया गया है, जिसमें Driver 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 में बताए गए एपीआई और उनकी डिपेंडेंसी इंस्टॉल हो जाएंगी.
pod install
Xcode बंद करें और Xcode लॉन्च करने के लिए अपने प्रोजेक्ट की .xcworkspace फ़ाइल खोलें (दो बार क्लिक करें). अब से, आपको प्रोजेक्ट खोलने के लिए .xcworkspace फ़ाइल का इस्तेमाल करना होगा.
ज़्यादा जानकारी के लिए, CocoaPods को इस्तेमाल करने के लिए शुरुआती निर्देश देखें.
मैन्युअल तरीके से इंस्टॉल करना
XCFramework एक बाइनरी पैकेज होता है, जिसका इस्तेमाल Driver SDK को इंस्टॉल करने के लिए किया जाता है. आप इस पैकेज को कई प्लैटफ़ॉर्म पर इस्तेमाल कर सकते हैं. इनमें Apple सिलिकॉन का इस्तेमाल करने वाली मशीनें भी शामिल हैं. इस गाइड में, अपने प्रोजेक्ट में Driver SDK वाले XCFramework को मैन्युअल तरीके से जोड़ने और Xcode में अपनी बिल्ड सेटिंग को कॉन्फ़िगर करने का तरीका बताया गया है.
SDK टूल बाइनरी और संसाधन डाउनलोड करें:
XCFramework और संसाधनों को ऐक्सेस करने के लिए, फ़ाइलों को निकालें.
Xcode शुरू करें और या तो कोई मौजूदा प्रोजेक्ट खोलें या कोई नया प्रोजेक्ट बनाएं. अगर आपने iOS का इस्तेमाल पहले नहीं किया है, तो नया प्रोजेक्ट बनाएं और iOS ऐप्लिकेशन टेंप्लेट चुनें.
अगर कोई फ़्रेमवर्क पहले से मौजूद नहीं है, तो अपने प्रोजेक्ट ग्रुप में एक फ़्रेमवर्क ग्रुप बनाएं.
ड्राइवर SDK टूल इंस्टॉल करने के लिए,
GoogleRidesharingDriver.xcframework
फ़ाइल को फ़्रेमवर्क, लाइब्रेरी, और एम्बेड किए गए कॉन्टेंट में जाकर अपने प्रोजेक्ट में खींचें और छोड़ें. जब कहा जाए, तब ज़रूरत पड़ने पर आइटम कॉपी करें को चुनें.डाउनलोड किए गए
GoogleRidesharingDriver.bundle
को अपने Xcode प्रोजेक्ट की टॉप लेवल डायरेक्ट्री में खींचें और छोड़ें. जब कहा जाए, तबCopy items if needed
चुनें.Project Navigator से प्रोजेक्ट चुनें और अपने ऐप्लिकेशन का टारगेट चुनें.
बिल्ड के चरण वाला टैब खोलें. इसके बाद, अगर यहां दिए गए फ़्रेमवर्क और लाइब्रेरी मौजूद नहीं हैं, तो उन्हें जोड़ें. इसके बाद, बाइनरी को लाइब्रेरी से लिंक करें:
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 की निजता मेनिफ़ेस्ट फ़ाइल की जांच करें
Apple को App Store पर मौजूद ऐप्लिकेशन के लिए, ऐप्लिकेशन की निजता से जुड़ी जानकारी की ज़रूरत होती है. अपडेट और ज़्यादा जानकारी के लिए, Apple App Store के निजता से जुड़ी जानकारी वाले पेज पर जाएं.
Apple Privacy मेनिफ़ेस्ट फ़ाइल, SDK टूल के लिए संसाधनों के बंडल में शामिल होती है. यह पुष्टि करने के लिए कि निजता मेनिफ़ेस्ट फ़ाइल शामिल की गई है और इसके कॉन्टेंट की जांच करने के लिए, अपने ऐप्लिकेशन का संग्रह बनाएं और संग्रह से निजता रिपोर्ट जनरेट करें.
अनुमति देने और पुष्टि करने की प्रोसेस लागू करें
जब आपका ड्राइवर ऐप्लिकेशन, फ़्लीट इंजन बैकएंड को जनरेट करके अपडेट भेजता है, तो
अनुरोधों में मान्य ऐक्सेस टोकन शामिल होने चाहिए. इन अनुरोधों को अनुमति देने और पुष्टि करने के लिए, ड्राइवर SDK टूल GMTDAuthorization
प्रोटोकॉल के मुताबिक आपके ऑब्जेक्ट को कॉल करता है. ऑब्जेक्ट, ज़रूरी ऐक्सेस टोकन उपलब्ध कराने के लिए ज़िम्मेदार है.
ऐप्लिकेशन डेवलपर के तौर पर, आपको यह चुनना होता है कि टोकन कैसे जनरेट किए जाएं. लागू करने पर ये काम किए जा सकते हैं:
- किसी एचटीटीपीएस सर्वर से ऐक्सेस टोकन फ़ेच करें. हो सकता है कि यह JSON फ़ॉर्मैट में हो.
- टोकन को पार्स और कैश मेमोरी में सेव करें.
- टोकन की समयसीमा खत्म होने पर उसे रीफ़्रेश करें.
फ़्लीट इंजन सर्वर से मिले टोकन के बारे में जानने के लिए, अनुमति पाने के लिए JSON वेब टोकन (JWT) बनाना लेख पढ़ें.
प्रोवाइडर आईडी और Google Cloud प्रोजेक्ट आईडी एक ही होते हैं. ज़्यादा जानकारी के लिए, Fleet Engine क्विकस्टार्ट गाइड देखें.
यहां दिए गए उदाहरण में, ऐक्सेस टोकन देने वाली कंपनी के बारे में बताया गया है:
Swift
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()
}
}
Objective-C
#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
राइडशेयरिंगड्राइवरएपीआई इंस्टेंस बनाएं
GMTDVehicleReporter
इंस्टेंस पाने के लिए, आपको सबसे पहले providerID,vehicleID,driverContext, और accessTokenProvider का इस्तेमाल करके GMTDRidesharingDriverAPI
इंस्टेंस बनाना होगा. providerID और Google Cloud प्रोजेक्ट आईडी एक ही होते हैं. साथ ही, GMTDVehicleReporter
इंस्टेंस को सीधेdriver API से ऐक्सेस किया जा सकता है.
नीचे दिए गए उदाहरण में, GMTDRidesharingDriverAPI
इंस्टेंस बनाया गया है:
Swift
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)
}
}
Objective-C
#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];
}
वाहन के बारे में जानकारी देने वाली सुविधा के इवेंट भी सुनें
locationTrackingEnabled
के true
होने पर, GMTDVehicleReporter
समय-समय पर वाहन को अपडेट करता है. समय-समय पर होने वाले इन अपडेट का जवाब देने के लिए, कोई भी ऑब्जेक्ट GMTDVehicleReporterListener
प्रोटोकॉल का पालन करके, GMTDVehicleReporter
इवेंट की सदस्यता ले सकता है.
आपके पास इन इवेंट को मैनेज करने का विकल्प होता है:
vehicleReporter(_:didSucceed:)
इससे ड्राइवर ऐप्लिकेशन को सूचना मिलती है कि बैकएंड सेवाओं को गाड़ी की जगह और स्थिति से जुड़े अपडेट मिल गए हैं.
vehicleReporter(_:didFail:withError:)
लिसनर को सूचना दी जाती है कि गाड़ी को अपडेट नहीं किया जा सका. जब तक जगह की जानकारी ट्रैक करने की सुविधा चालू रहेगी, तब तक
GMTDVehicleReporter
, Fleet Engine बैकएंड को नया डेटा भेजता रहेगा.
नीचे दिए गए उदाहरण में, इन इवेंट को हैंडल किया गया है:
Swift
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.
}
}
Objective-C
/*
* 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
के लिसनर के तौर पर सेट करना ज़रूरी है.
Swift
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()
}
}
}
Objective-C
/*
* 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
, जगह की जानकारी के अपडेट अपने-आप भेजता है. जब सेवाएं, वाहन को किसी यात्रा के लिए मैच और असाइन कर देती हैं, तब GMSNavigator
के नेविगेशन मोड में होने पर GMTDVehicleReporter
, रास्ते के अपडेट अपने-आप भेजता है. ऐसा तब होता है, जब डेस्टिनेशन को setDestinations
के ज़रिए सेट किया गया हो.
यात्रा के अपडेट के दौरान सेट किया गया रास्ता वही होगा जिस पर ड्राइवर नेविगेशन सेशन के दौरान नेविगेट कर रहा था. इसलिए, यात्रा शेयर करने की सुविधा ठीक से काम करे, इसके लिए setDestinations
से सेट किया गया वेपॉइंट, फ़्लीट इंजन के बैकएंड में सेट किए गए डेस्टिनेशन से मेल खाना चाहिए.
अगर locationTrackingEnabled
को true
पर सेट किया गया है, तो यात्रा और वाहन से जुड़े अपडेट, locationUpdateInterval
के लिए सेट की गई वैल्यू के आधार पर, फ़्लीट इंजन बैकएंड को एक तय समय में भेजे जाते हैं. अगर locationTrackingEnabled
को false
पर सेट किया गया है, तो वाहन की स्थिति को GMTDVehicleState.offline
पर सेट करने के लिए, वाहन के अपडेट को रोका जाता है और वाहन को अपडेट करने का आखिरी अनुरोध फ़्लीट इंजन के बैकएंड को भेजा जाता है. अगर locationTrackingEnabled
को false
पर सेट किया गया हो, तो फ़ेलियर से जुड़ी खास बातों के लिए, updateVehicleState
पर जाएं.
यहां दिए गए उदाहरण में, जगह की जानकारी ट्रैक करने की सुविधा चालू की गई है:
Swift
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
}
}
Objective-C
/*
* 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
की मदद से बदला जा सकता है. अपडेट के लिए कम से कम पांच सेकंड का इंटरवल
इस्तेमाल किया जा सकता है. अपडेट के लिए ज़्यादा से ज़्यादा 60 सेकंड का इंटरवल इस्तेमाल किया जा सकता है. ज़्यादा बार अपडेट होने की वजह से, अनुरोध मिलने में ज़्यादा समय लग सकता है और गड़बड़ियां हो सकती हैं.
वाहन की स्थिति अपडेट करना
नीचे दिए गए उदाहरण में, वाहन की स्थिति को ONLINE
पर सेट करने का तरीका बताया गया है. ज़्यादा जानकारी के लिए, updateVehicleState
पर जाएं.
Swift
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)
}
}
Objective-C
#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
गड़बड़ी हो सकती है. आम तौर पर, यह समस्या, स्टार्टअप के बाद पहले अपडेट पर होती है. नीचे दिए गए उदाहरण में, इस गड़बड़ी को ठीक करने का तरीका बताया गया है:
Swift
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
}
}
Objective-C
#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
पर सेट कर सकता है.
अपडेट को बंद करने पर, Fleet Engine बैकएंड पर वाहन की स्थिति OFFLINE
पर सेट हो जाती है.
Swift
vehicleReporter.locationTrackingEnabled = false
Objective-C
_vehicleReporter.locationTrackingEnabled = NO;