يمكنك استخدام Driver SDK لتوفير تنقل وتتبّع محسّن تطبيق Trip and Order Progress توفّر "حزمة تطوير البرامج (SDK) للسائق" معلومات عن المركبة الموقع وتحديثات المهمة الخاصة بمحرك مجموعة حلول النقل عند الطلب وعمليات التسليم.
تُبقي "حزمة تطوير البرامج (SDK) لبرنامج التشغيل" خدمات Fleet Engine والخدمات المخصّصة على دراية بها.
موقع المركبة وحالتها. على سبيل المثال، يمكن أن تكون المركبة ONLINE
أو
OFFLINE
، ويتغير الموقع الجغرافي للمركبة مع تقدّم الرحلة.
الحد الأدنى لمتطلبات النظام
المتطلبات الأساسية
يفترض هذا الدليل أن تطبيقك يستخدم ميزة التنقل لحزمة SDK وFleet المحرّك إعداد الواجهة الخلفية وإتاحتها. ومع ذلك، يوفر مثال التعليمة البرمجية عينة من كيفية إعداد حزمة SDK للتنقل.
يجب أيضًا تفعيل حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل iOS في مشروع Google Cloud والحصول على واجهة برمجة تطبيقات المفتاح:
إعدادات المشروع
مدير حزم Swift
يمكن تثبيت Driver SDK من خلال مدير حزم Swift لإضافة حزمة تطوير البرامج (SDK)، تأكَّد من أنّ لديك إزالة أي تبعيات حالية لحزمة تطوير البرامج (SDK) لبرنامج التشغيل.
لإضافة حزمة تطوير البرامج (SDK) إلى مشروع جديد أو حالي، اتّبِع الخطوات التالية:
-
افتح Xcode
project
أوworkspace
، ثم انتقِل إلى File >. أضِف تبعيات الحزمة. - أدخِل https://github.com/googlemaps/ios-driver-sdk كعنوان URL واضغط على Enter. لسحب الحزمة، والنقر فوق "Add Package" (إضافة حزمة).
-
لتثبيت قاعدة
version
محدّدة، اضبط حقل قاعدة التبعية على أحد الخيارات المستندة إلى الإصدار. وبالنسبة للمشروعات الجديدة، نوصي بتحديد أحدث إصدار باستخدام "الإصدار الدقيق" . بعد اكتمال عملية النقل، انقر على "إضافة حزمة". -
من نافذة اختيار منتجات الحزمة، تأكَّد من إضافة
GoogleRidesharingDriver
إلى هدفmain
المحدد. بعد اكتمال عملية النقل، انقر على "إضافة حزمة". -
للتحقّق من عملية التثبيت، انتقِل إلى جزء
General
في استهدافك. من المفترَض أن تظهر الحِزَم المثبَّتة في أُطر العمل والمكتبات والمحتوى المضمَّن. يمكنك أيضًا عرض قسم "تبعيات الحزمة" قسم "مستكشف المشروع" للتحقق من الحزمة وإصدارها.
لتعديل package
لمشروع حالي، اتّبِع الخطوات التالية:
في حال الترقية من إصدار أقدم من 9.0.0، يجب إزالة التبعيات التالية:
GoogleMapsBase
وGoogleMapsCore
وGoogleMapsM4B
بعد الترقية. لا تقم بإزالة تبعيةGoogleMaps
لمزيد من المعلومات، يُرجى الاطّلاع على ملاحظات الإصدار 9.0.0:من إعدادات ضبط مشروع Xcode، ابحث عن Frameworks وLibraries والمحتوى المضمَّن استخدِم علامة الطرح(-) لإزالة إطار العمل التالي:
GoogleMapsBase
(للترقيات من الإصدارات السابقة على 9.0.0 فقط)GoogleMapsCore
(للترقيات من الإصدارات السابقة على 9.0.0 فقط)GoogleMapsM4B
(للترقيات من الإصدارات السابقة على 9.0.0 فقط)
- من Xcode، انتقل إلى "File >" (ملف >) الحزم > التحديث إلى أحدث إصدارات الحزمة".
- للتحقّق من عملية التثبيت، انتقِل إلى قسم تبعيات الحزمة في Project Navigator (أداة التنقّل في المشروع) للتحقق من الحزمة وإصدارها.
لإزالة العناصر الاعتمادية الحالية لـ Driver SDK التي تمت إضافتها باستخدام
CocoaPods
، يُرجى اتّباع الخطوات التالية:
- أغلِق مساحة عمل Xcode. افتح المحطة الطرفية ونفِّذ الأمر التالي:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
إزالة
Podfile
وPodfile.resolved
و Xcodeworkspace
إذا كنت لا تستخدمهم لأي غرض آخر غير CocoaPods.
لإزالة تثبيت Driver SDK الحالي، يدويًا، اتبع الخطوات التالية:
من إعدادات ضبط مشروع Xcode، ابحث عن Frameworks، المكتبات والمحتوى المضمَّن استخدِم علامة الطرح
(-)
لإزالتها إطار العمل التالي:GoogleRidesharingDriver.xcframework
من دليل المستوى الأعلى لمشروع Xcode، أزِل حزمة
GoogleRidesharingDriver
.
CocoaPods
لضبط حزمة تطوير البرامج (SDK) لبرنامج التشغيل باستخدام CocoaPods، ستحتاج إلى العناصر التالية:
- أداة CocoaPods: لتثبيت هذه الأداة، افتح المحطة الطرفية وشغِّل الأمر التالي.
sudo gem install cocoapods
إنشاء ملف Podfile لـ Driver SDK واستخدامه لتثبيت واجهة برمجة التطبيقات ملحقاته: قم بإنشاء ملف يسمى 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>
شغِّل الأمر pod install. سيؤدي هذا إلى تثبيت واجهات برمجة التطبيقات المحددة في Podfile، إلى جانب أي تبعيات قد تكون موجودة.
pod install
أغلِق Xcode، ثم افتح ملف xcworkspace لمشروعك (بالنقر مرّتين). لتشغيل Xcode. ومن الآن فصاعدًا، يجب عليك استخدام .xcworkspace لفتح المشروع.
يُرجى الاطّلاع على مقالة بدء استخدام CocoaPods. لمزيد من المعلومات التفاصيل.
التثبيت اليدوي
XCFramework عبارة عن حزمة ثنائية تستخدمها لتثبيت SDK لبرنامج التشغيل. يمكنك استخدام هذه الحزمة على عدة حِزم بما في ذلك الأجهزة التي تستخدم نظام Apple السيليكون. يوضح هذا الدليل كيفية أضف XCFramework يدويًا الذي يحتوي على حزمة تطوير البرامج (SDK) لبرنامج التشغيل إلى مشروعك وإعداد إصدارك الإعدادات في Xcode.
تنزيل البرنامج الثنائي لحزمة SDK والموارد:
يمكنك استخراج الملفات للوصول إلى XCFramework والموارد.
ابدأ Xcode وافتح مشروعًا حاليًا أو أنشئ مشروعًا جديدًا مشروعك. إذا كنت مستخدمًا جديدًا لنظام التشغيل iOS، أنشئ مشروعًا جديدًا واختَر نظام التشغيل iOS. نموذج التطبيق.
إنشاء مجموعة أطر عمل ضمن مجموعة المشروعات إذا لم تكن هناك مجموعة بالفعل.
لتثبيت Driver SDK، اسحب ملف واحد (
GoogleRidesharingDriver.xcframework
) إلى مشروعك ضمن أُطر العمل والمكتبات والمحتوى المضمَّن: عندما يُطلب منك ذلك، اختَر انسخ العناصر إذا لزم الأمر.اسحب "
GoogleRidesharingDriver.bundle
" الذي تم تنزيله إلى المستوى الأعلى. دليل مشروع Xcode الخاص بك. اختَر "Copy items if needed
" عندما يُطلب منك ذلك.اختَر مشروعك من Project Navigator، ثم اختَر هدف التطبيق.
افتح علامة التبويب "مراحل الإنشاء"، وفي "Link Binary with Libraries" (رابط ثنائي مع المكتبات)، أضف أُطر العمل والمكتبات التالية إذا لم تكن موجودة بالفعل:
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 في حزمة الموارد لحزمة تطوير البرامج (SDK). للتأكّد من تضمين "ملف بيان الخصوصية" وفحص محتواه، عليك إنشاء أرشيف لتطبيقك وإنشاء تقرير خصوصية من الأرشيف.
تنفيذ التفويض والمصادقة
عندما ينشئ تطبيق Driver التحديثات ويرسلها إلى خلفية Fleet Engine،
يجب أن تتضمن الطلبات رموز دخول صالحة. للتفويض والمصادقة
هذه الطلبات، تستدعي حزمة Driver SDK كائن
بما يتوافق مع بروتوكول GMTDAuthorization
. الكائن مسئول عن
توفير رمز الدخول المطلوب.
بصفتك مطوّر التطبيق، أنت تختار كيفية إنشاء الرموز المميّزة. عملية التنفيذ القدرة على إجراء ما يلي:
- استرجاع رمز دخول، ربما بتنسيق JSON، من خادم HTTPS.
- تحليل الرمز المميّز وتخزينه مؤقتًا
- أعِد تحميل الرمز المميّز عند انتهاء صلاحيته.
للحصول على تفاصيل الرموز المميّزة المتوقعة من خادم Fleet Engine، يُرجى الاطّلاع على إنشاء رمز 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
إنشاء مثيل RideshareDriverAPI
للحصول على مثيل GMTDVehicleReporter
، عليك أولاً إنشاء
مثيل واحد (GMTDRidesharingDriverAPI
) يستخدم رقم تعريف المركبة ورقم تعريف المركبة
driverContext وaccessTokenProvider. معرِّف مقدم الخدمة هو نفسه Google
رقم تعريف مشروع Cloud ويمكنك الوصول إلى المثيل GMTDVehicleReporter
من
واجهة برمجة تطبيقات برنامج التشغيل مباشرةً.
ينشئ المثال التالي مثيل 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];
}
الاستماع بشكل اختياري إلى أحداث AutomotiveReporter
تُحدِّث "GMTDVehicleReporter
" المركبة بشكل دوري في حال
locationTrackingEnabled
هي true
. للاستجابة لهذه التحديثات الدورية، سيتم
يمكن للعنصر الاشتراك في أحداث GMTDVehicleReporter
من خلال التوافق مع
بروتوكول GMTDVehicleReporterListener
.
يمكنك التعامل مع الأحداث التالية:
vehicleReporter(_:didSucceed:)
تُبلغ تطبيق Driver بأنّ خدمات الخلفية قد تلقّت بنجاح وتحديث موقع المركبة والحالة.
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
تفعيل تتبع الموقع الجغرافي
لتفعيل ميزة تتبُّع الموقع الجغرافي، يمكن لتطبيقك ضبط locationTrackingEnabled
على
true
على GMTDVehicleReporter
. يرسل GMTDVehicleReporter
تلقائيًا
تحديثات الموقع الجغرافي. بعد تطابق الخدمات وتخصيص المركبة لرحلة،
يرسل تطبيق "GMTDVehicleReporter
" تحديثات المسار تلقائيًا عند استخدام "GMSNavigator
"
في وضع التنقل (عند تحديد وجهة من خلال setDestinations
).
سيكون المسار الذي تم ضبطه أثناء تعديل الرحلة هو المسار نفسه الذي يسلكه السائق.
الانتقال إليه أثناء جلسة التنقل. وبالتالي، لكي تعمل مشاركة الرحلة
بشكل صحيح، يجب أن تتطابق النقطة الوسيطة المحددة من خلال setDestinations
مع
البيانات المحددة في خلفية Fleet Engine.
إذا تم ضبط locationTrackingEnabled
على true
، سيتم إرسال آخر المعلومات عن الرحلة والمركبة.
إلى خلفية Fleet Engine على فترات منتظمة بناءً على القيمة المعينة
locationUpdateInterval
إذا تم ضبط locationTrackingEnabled
على false
،
إجراء التحديثات وإرسال طلب التحديث النهائي للمركبة إلى Fleet Engine
الخلفية لضبط حالة المركبة على GMTDVehicleState.offline
. عرض
updateVehicleState
لاعتبارات خاصة بشأن التعامل مع حالات الإخفاق عند locationTrackingEnabled
تم تعيينها على false
.
يوضّح المثال التالي ميزة تتبُّع الموقع الجغرافي:
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
. الحدّ الأدنى للفاصل الزمني المتوافق مع التحديثات
5 ثوانٍ. يبلغ الحدّ الأقصى للفاصل الزمني المسموح به للتحديث 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
.
يؤدي إيقاف التعديلات أيضًا إلى ضبط حالة المركبة على OFFLINE
في Fleet Engine.
الخلفية.
Swift
vehicleReporter.locationTrackingEnabled = false
Objective-C
_vehicleReporter.locationTrackingEnabled = NO;