می توانید از Driver SDK برای ارائه ناوبری و ردیابی پیشرفته به برنامه سفر و پیشرفت سفارش خود استفاده کنید. Driver SDK بهروزرسانیهای مکان خودرو و وظایف را به موتور ناوگان راهحل بر اساس تقاضا و تحویل ارائه میکند.
Driver SDK خدمات Fleet Engine و خدمات سفارشی شما را از موقعیت و وضعیت خودرو آگاه می کند. برای مثال، وسیله نقلیه میتواند ONLINE
یا OFFLINE
باشد، و مکان وسیله نقلیه با پیشرفت سفر تغییر میکند.
کمترین سیستم مورد نیاز
پیش نیازها
این راهنما فرض میکند که برنامه شما قبلاً Navigation SDK را پیادهسازی کرده است و پشتیبان Fleet Engine راهاندازی و در دسترس است. با این حال، کد مثال نمونه ای از نحوه راه اندازی Navigation SDK را ارائه می دهد.
همچنین باید Maps SDK برای iOS را در پروژه Google Cloud خود فعال کنید و یک کلید API دریافت کنید .
پیکربندی پروژه
مدیر بسته سوئیفت
Driver SDK را می توان از طریق Swift Package Manager نصب کرد. برای افزودن SDK، مطمئن شوید که وابستگیهای Driver SDK موجود را حذف کردهاید.
برای افزودن SDK به یک پروژه جدید یا موجود، مراحل زیر را دنبال کنید:
-
project
یاworkspace
Xcode خود را باز کنید، سپس به File > Add Package Dependencies بروید. - https://github.com/googlemaps/ios-driver-sdk را به عنوان URL وارد کنید، Enter را فشار دهید تا بسته را وارد کنید و روی «افزودن بسته» کلیک کنید.
- برای نصب یک
version
خاص، قسمت Dependency Rule را روی یکی از گزینه های مبتنی بر نسخه تنظیم کنید. برای پروژه های جدید، توصیه می کنیم آخرین نسخه را مشخص کنید و از گزینه "نسخه دقیق" استفاده کنید. پس از تکمیل، روی "افزودن بسته" کلیک کنید. - از پنجره انتخاب محصولات بسته ، تأیید کنید که
GoogleRidesharingDriver
به هدفmain
تعیینشده شما اضافه میشود. پس از تکمیل، روی "افزودن بسته" کلیک کنید. - برای تأیید نصب خود، به صفحه
General
هدف خود بروید. در Frameworks، Libraries و Embedded Content باید بسته های نصب شده را ببینید. همچنین میتوانید برای تأیید بسته و نسخه آن، بخش «وابستگیهای بسته» در «ناوبر پروژه» را مشاهده کنید.
برای به روز رسانی package
برای یک پروژه موجود، این مراحل را دنبال کنید:
- از Xcode، به "File > Packages > Update To Latest Package Versions" بروید.
- برای تأیید نصب خود، به بخش Package Dependencies در Project Navigator بروید تا بسته و نسخه آن را تأیید کنید.
برای حذف وابستگیهای Driver SDK موجود با استفاده از CocoaPods
، این مراحل را دنبال کنید:
- فضای کاری Xcode خود را ببندید. ترمینال را باز کنید و دستور زیر را اجرا کنید:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
- اگر از آنها برای چیزی غیر از CocoaPods استفاده نمی کنید،
Podfile
،Podfile.resolved
وworkspace
Xcode را حذف کنید.
برای حذف Driver SDK نصب شده به صورت دستی، این مراحل را دنبال کنید:
از تنظیمات پیکربندی پروژه Xcode خود، Frameworks، Libraries و Embedded Content را پیدا کنید. از علامت منفی
(-)
برای حذف چارچوب زیر استفاده کنید:-
GoogleRidesharingDriver.xcframework
-
از دایرکتوری سطح بالای پروژه Xcode خود، بسته
GoogleRidesharingDriver
را حذف کنید.
CocoaPods
برای پیکربندی Driver SDK با استفاده از CocoaPods، به موارد زیر نیاز دارید:
- ابزار CocoaPods: برای نصب این ابزار، Terminal را باز کرده و دستور زیر را اجرا کنید.
sudo gem install cocoapods
یک Podfile برای Driver SDK ایجاد کنید و از آن برای نصب API و وابستگی های آن استفاده کنید: فایلی به نام 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 بروید:
cd <path-to-project>
دستور نصب pod را اجرا کنید. این API های مشخص شده در Podfile را به همراه وابستگی هایی که ممکن است داشته باشند نصب می کند.
pod install
Xcode را ببندید و سپس فایل xcworkspace. پروژه خود را باز کنید (دوبار کلیک کنید) تا Xcode راه اندازی شود. از این زمان به بعد باید از فایل .xcworkspace برای باز کردن پروژه استفاده کنید.
برای جزئیات بیشتر به راهنمای شروع CocoaPods مراجعه کنید.
نصب دستی
XCFramework یک بسته باینری است که برای نصب Driver SDK از آن استفاده می کنید. شما می توانید از این بسته بر روی چندین پلتفرم از جمله ماشین هایی که از سیلیکون اپل استفاده می کنند استفاده کنید. این راهنما نشان می دهد که چگونه XCFramework حاوی Driver SDK را به صورت دستی به پروژه خود اضافه کنید و تنظیمات ساخت خود را در Xcode پیکربندی کنید.
باینری و منابع SDK را دانلود کنید:
برای دسترسی به XCFramework و منابع، فایل ها را استخراج کنید.
Xcode را راه اندازی کنید و یک پروژه موجود را باز کنید یا یک پروژه جدید ایجاد کنید. اگر در iOS تازه کار هستید، یک پروژه جدید ایجاد کنید و قالب iOS App را انتخاب کنید.
در صورتی که قبلاً وجود نداشته باشد، یک گروه Frameworks در زیر گروه پروژه خود ایجاد کنید.
برای نصب Driver SDK، فایل
GoogleRidesharingDriver.xcframework
را به داخل پروژه خود در بخش Frameworks, Libraries, and Embedded Content بکشید. هنگامی که از شما خواسته شد، در صورت نیاز، کپی موارد را انتخاب کنید.GoogleRidesharingDriver.bundle
دانلود شده را به دایرکتوری سطح بالای پروژه Xcode خود بکشید. هنگامی که از شما خواسته شد،Copy items if needed
را انتخاب کنید.پروژه خود را از Project Navigator انتخاب کنید و هدف برنامه خود را انتخاب کنید.
تب Build Phases را باز کنید و در پیوند باینری با کتابخانهها، چارچوبها و کتابخانههای زیر را در صورتی که قبلاً موجود نیستند اضافه کنید:
-
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
-
پروژه خود را به جای یک هدف خاص انتخاب کنید و تب Build Settings را باز کنید. در بخش Other Linker Flags ،
-ObjC
هم برای رفع اشکال و هم برای انتشار اضافه کنید. اگر این تنظیمات قابل مشاهده نیستند، فیلتر موجود در نوار تنظیمات ساخت را از Basic به All تغییر دهید.
فایل Manifest Privacy Apple را اضافه کنید
اپل به جزئیات حریم خصوصی برنامه برای برنامه های موجود در فروشگاه App نیاز دارد. برای بهروزرسانیها و اطلاعات بیشتر، از صفحه جزئیات حریم خصوصی فروشگاه App Apple دیدن کنید.
- بسته Manifest را برای Driver SDK برای iOS دانلود کنید: GoogleRidesharingDriverPrivacy .
- برای دسترسی به
GoogleRidesharingDriverPrivacy.bundle
فایل را استخراج کنید. -
GoogleRidesharingDriverPrivacy.bundle
را با استفاده از یکی از این روش ها به ناوبری پروژه Xcode اضافه کنید. مطمئن شوید که کادر «افزودن به اهداف» برای هدف برنامه شما علامت زده شده است. پس از اضافه شدن، فایل PrivacyInfo در Project Navigator نمایش داده می شود و می توانید مقادیر را بررسی کنید. - با ایجاد یک بایگانی از برنامه خود و ایجاد یک گزارش حریم خصوصی از بایگانی، تأیید کنید که مانیفست حریم خصوصی اضافه شده است.
اجرای مجوز و احراز هویت
هنگامی که برنامه Driver شما بهروزرسانیهایی را به باطن Fleet Engine ارسال میکند، درخواستها باید شامل نشانههای دسترسی معتبر باشند. برای تأیید و تأیید اعتبار این درخواستها، Driver SDK شی شما را مطابق با پروتکل GMTDAuthorization
فراخوانی میکند. شی مسئول ارائه نشانه دسترسی مورد نیاز است.
به عنوان توسعهدهنده برنامه، نحوه تولید توکنها را انتخاب میکنید. پیاده سازی شما باید توانایی انجام موارد زیر را داشته باشد:
- یک نشانه دسترسی، احتمالاً در قالب JSON، از یک سرور HTTPS واکشی کنید.
- رمز را تجزیه و کش کنید.
- زمانی که توکن منقضی شد، آن را رفرش کنید.
برای جزئیات بیشتر توکنهای مورد انتظار توسط سرور Fleet Engine، به ایجاد یک نشانه وب JSON (JWT) برای مجوز مراجعه کنید.
شناسه ارائه دهنده همان شناسه پروژه Google Cloud است. برای اطلاعات بیشتر به راهنمای Fleet Engine Quick Start مراجعه کنید.
مثال زیر یک ارائه دهنده نشانه دسترسی را پیاده سازی می کند:
سریع
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()
}
}
هدف-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
یک نمونه RidesharingDriverAPI ایجاد کنید
برای دریافت نمونه GMTDVehicleReporter
، ابتدا باید با استفاده از شناسه ارائه دهنده، شناسه خودرو، driverContext و accessTokenProvider یک نمونه GMTDRidesharingDriverAPI
ایجاد کنید. شناسه ارائه دهنده همان شناسه پروژه Google Cloud است. و می توانید مستقیماً از 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)
}
}
هدف-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];
}
به صورت اختیاری به رویدادهای VehicleReporter گوش دهید
GMTDVehicleReporter
به صورت دوره ای وسیله نقلیه را زمانی که locationTrackingEnabled
true
باشد به روز می کند. برای پاسخ به این بهروزرسانیهای دورهای، هر شی میتواند با انطباق با پروتکل GMTDVehicleReporterListener
GMTDVehicleReporter
شود.
شما می توانید رویدادهای زیر را مدیریت کنید:
vehicleReporter(_:didSucceed:)
به برنامه Driver اطلاع می دهد که سرویس های پشتیبان با موفقیت موقعیت خودرو و به روز رسانی وضعیت را دریافت کردند.
vehicleReporter(_:didFail:withError:)
به شنونده اطلاع می دهد که به روز رسانی خودرو ناموفق است. تا زمانی که ردیابی موقعیت مکانی فعال باشد،
GMTDVehicleReporter
به ارسال آخرین دادهها به Fleet Engine ادامه میدهد.
مثال زیر به این رویدادها رسیدگی می کند:
سریع
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.
}
}
هدف-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 اضافه کنید
برای ارائه بهروزرسانیهای مکان در Driver 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()
}
}
}
هدف-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
ردیابی موقعیت مکانی را فعال کنید
برای فعال کردن ردیابی موقعیت مکانی، برنامه شما میتواند locationTrackingEnabled
را روی true
در GMTDVehicleReporter
تنظیم کند. GMTDVehicleReporter
بهطور خودکار بهروزرسانیهای مکان را ارسال میکند. پس از تطبیق سرویسها و اختصاص وسیله نقلیه به سفر، GMTDVehicleReporter
بهروزرسانیهای مسیر را بهطور خودکار هنگامی که GMSNavigator
در حالت ناوبری است ارسال میکند (زمانی که مقصدی از طریق setDestinations
تنظیم شده است).
مسیری که در طول بهروزرسانی سفر تعیین میشود، همان مسیری است که راننده در طول جلسه ناوبری به آن پیمایش میکند. بنابراین، برای اینکه اشتراک گذاری سفر به درستی کار کند، نقطه بین تعیین شده از طریق setDestinations
باید با مقصد تعیین شده در باطن موتور ناوگان مطابقت داشته باشد.
اگر locationTrackingEnabled
روی true
تنظیم شده باشد، بهروزرسانیهای سفر و وسیله نقلیه در یک بازه زمانی منظم بر اساس مقدار تعیینشده برای locationUpdateInterval
، به پشتیبان Fleet Engine ارسال میشوند. اگر locationTrackingEnabled
روی false
تنظیم شود، بهروزرسانیها متوقف میشوند و درخواست بهروزرسانی نهایی خودرو به بخش پشتیبان Fleet Engine ارسال میشود تا وضعیت خودرو را روی 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
}
}
هدف-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
به طور پیش فرض، فاصله گزارش دهی ثانیه است، اما فاصله گزارش را می توان با 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)
}
}
هدف-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
ممکن است زمانی رخ دهد که ماسک خالی باشد و معمولاً برای اولین بهروزرسانی پس از راهاندازی رخ میدهد. مثال زیر نحوه رسیدگی به این خطا را نشان می دهد:
سریع
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
}
}
هدف-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
تنظیم میکند.
سریع
vehicleReporter.locationTrackingEnabled = false
هدف-C
_vehicleReporter.locationTrackingEnabled = NO;