Driver SDK를 사용하여 향상된 내비게이션 및 추적 기능을 이동 및 주문 진행 상황 애플리케이션 Driver SDK는 주문형 차량 공유 및 배송 솔루션 Fleet Engine의 위치 및 작업 업데이트입니다.
Driver SDK는 Fleet Engine 서비스와 커스텀 서비스에서 다음을 인식하도록 유지합니다.
차량의 위치와 상태입니다. 예를 들어 차량은 ONLINE
또는
OFFLINE
이며 이동이 진행됨에 따라 차량 위치가 변경됩니다.
최소 시스템 요구사항
기본 요건
이 가이드에서는 앱에서 이미 Navigation SDK와 Fleet 엔진 사용 가능한 상태가 됩니다 하지만 예시 코드는 Navigation SDK를 설정하는 방법
iOS용 Maps SDK도 사용 설정해야 합니다. Google Cloud 프로젝트에서 API를 가져옵니다. 키.
프로젝트 구성
Swift Package Manager
드라이버 SDK는 를 통해 설치할 수 있습니다. Swift Package Manager SDK를 추가하려면 기존 드라이버 SDK 종속 항목이 삭제되었습니다.
새 프로젝트 또는 기존 프로젝트에 SDK를 추가하려면 다음 단계를 따르세요.
-
Xcode
project
또는workspace
을 열고 File(파일) > 패키지 종속 항목 추가를 참조하세요. - URL에 https://github.com/googlemaps/ios-driver-sdk를 입력하고 Enter 키를 누릅니다. 패키지를 가져오고 '패키지 추가'를 클릭합니다.
-
특정
version
를 설치하려면 종속 항목 규칙 필드를 버전 기반 옵션입니다 새 프로젝트의 경우 최신 버전을 지정하고 '정확한 버전'을 사용하는 경우 옵션을 선택합니다. 완료되면 'Add Package'를 클릭합니다. -
Choose Package Products(패키지 제품 선택) 창에서
GoogleRidesharingDriver
가 지정된main
타겟 완료되면 'Add Package'를 클릭합니다. -
설치를 확인하려면 대상의
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 이전 버전에서 업그레이드하는 경우에만)
- Xcode에서 'File(파일) > 패키지 > Update To Latest Package Versions'(최신 패키지 버전으로 업데이트)'라는 오류 메시지가 표시됩니다.
- 설치를 확인하려면 Project Navigator의 Package Dependencies 섹션으로 이동합니다. 패키지와 해당 버전을 확인합니다.
다음을 사용하여 추가된 기존 드라이버 SDK 종속 항목 삭제
CocoaPods
인 경우 다음 단계를 따르세요.
- Xcode 작업공간을 닫습니다. 터미널을 열고 다음 명령어를 실행합니다.
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
Podfile
,Podfile.resolved
, CocoaPods 외의 용도로 사용하지 않는 경우 Xcodeworkspace
설치된 기존 드라이버 SDK 삭제 다음 단계를 따르세요.
Xcode 프로젝트 구성 설정에서 Frameworks, 라이브러리 및 삽입된 콘텐츠를 참조하세요. 빼기 기호
(-)
를 사용하여 삭제합니다. 다음 프레임워크를 참고하세요.GoogleRidesharingDriver.xcframework
Xcode 프로젝트의 최상위 디렉터리에서
GoogleRidesharingDriver
번들.
CocoaPods
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>
pod install 명령어를 실행합니다. 이렇게 하면 Podfile과 함께 종속 항목이 있을 수 있습니다.
pod install
Xcode를 닫은 다음 프로젝트의 .xcworkspace를 엽니다 (더블클릭). 파일을 만들어 Xcode를 실행합니다. 이제부터는 .xcworkspace 파일을 만들어 프로젝트를 엽니다.
자세한 내용은 CocoaPods 시작하기 가이드를 참조하세요. 확인하세요.
수동 설치
<ph type="x-smartling-placeholder">XCFramework는 컨테이너 이미지를 설치하는 데 사용하는 바이너리 패키지입니다. 드라이버 SDK. 이 패키지를 여러 모듈에서 여기에는 Apple을 사용한 실리콘을 사용합니다. 이 가이드에서는 이 Driver SDK를 프로젝트에 연결하고 빌드를 구성합니다. 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
특정 대상 대신 프로젝트를 선택하고 Build 설정 탭을 엽니다. 기타 링커 플래그 섹션에서
-ObjC
를 디버그 및 출시가 모두 가능합니다 이러한 설정이 표시되지 않으면 빌드 설정 표시줄에서 기본에서 전체로 필터를 설정합니다.
Apple 개인 정보 보호 매니페스트 파일 검사
Apple은 App Store의 앱에 대한 앱 개인 정보 보호 세부정보를 요구합니다. 업데이트 및 자세한 내용은 Apple App Store 개인 정보 보호 세부정보 페이지를 참고하세요.
Apple 개인 정보 보호 매니페스트 파일은 SDK의 리소스 번들에 포함되어 있습니다. 개인 정보 보호 매니페스트 파일이 포함되었는지 확인하고 콘텐츠를 검사하려면 앱의 보관 파일을 만들고 보관 파일에서 개인 정보 보호 보고서를 생성하세요.
승인 및 인증 구현
드라이버 앱에서 업데이트를 생성하고 Fleet Engine 백엔드로 전송하면
요청에 유효한 액세스 토큰이 포함되어야 합니다. 승인 및 인증
드라이버 SDK는
GMTDAuthorization
프로토콜을 준수합니다. 객체는
제공합니다.
앱 개발자는 토큰이 생성되는 방식을 선택합니다. 구현 다음 작업을 할 수 있는 기능을 제공해야 합니다.
- HTTPS 서버에서 액세스 토큰(JSON 형식)을 가져옵니다.
- 토큰을 파싱하고 캐시합니다.
- 토큰이 만료되면 새로고침합니다.
Fleet Engine 서버에서 예상하는 토큰에 대한 자세한 내용은 다음을 위한 JSON 웹 토큰 (JWT) 승인에 대해 자세히 알아보세요.
제공업체 ID는 Google Cloud 프로젝트 ID와 동일합니다. 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
RidesharingDriverAPI 인스턴스 만들기
GMTDVehicleReporter
인스턴스를 가져오려면 먼저
providerID, 차량 ID, 차량 ID를 사용하는 GMTDRidesharingDriverAPI
인스턴스
driveContext 및 accessTokenProvider로 이동합니다. providerID가 Google과 동일합니다.
Cloud 프로젝트 ID입니다. 또한 다음 위치에서 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];
}
원하는 경우 VehicleReporter 이벤트를 수신 대기합니다.
GMTDVehicleReporter
는 다음 시점에 차량을 주기적으로 업데이트합니다.
현재 locationTrackingEnabled
이(가) true
입니다. 이러한 주기적인 업데이트에 대응하기 위해
객체는 GMTDVehicleReporter
이벤트를 수신할 수 있도록
GMTDVehicleReporterListener
프로토콜
다음과 같은 이벤트를 처리할 수 있습니다.
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
위치 추적 사용 설정
앱에서 locationTrackingEnabled
를 설정하여 위치 추적을 사용 설정할 수 있습니다.
GMTDVehicleReporter
의 true
입니다. 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
로 설정할 수 있습니다.
업데이트를 사용 중지하면 차량의 상태도 Fleet Engine에서 OFFLINE
로 설정됩니다.
사용할 수 있습니다
Swift
vehicleReporter.locationTrackingEnabled = false
Objective-C
_vehicleReporter.locationTrackingEnabled = NO;