52 lines
1.6 KiB
Swift
52 lines
1.6 KiB
Swift
//
|
||
// AMapBootstrap.swift
|
||
// suixinkan
|
||
//
|
||
|
||
import Foundation
|
||
|
||
/// 高德 SDK 隐私合规与 Key 初始化,必须在实例化任何 SDK 类之前完成。
|
||
enum AMapBootstrap {
|
||
|
||
private(set) static var isConfigured = false
|
||
private static let lock = NSLock()
|
||
|
||
/// 在用户已同意 App 隐私协议后配置高德 SDK,幂等。
|
||
@discardableResult
|
||
static func configureIfNeeded(appStore: AppStore = .shared) -> Bool {
|
||
guard appStore.session.privacyAgreementAccepted else { return false }
|
||
|
||
lock.lock()
|
||
defer { lock.unlock() }
|
||
guard !isConfigured else { return true }
|
||
|
||
#if !targetEnvironment(simulator)
|
||
AMapLocationManager.updatePrivacyShow(.didShow, privacyInfo: .didContain)
|
||
AMapLocationManager.updatePrivacyAgree(.didAgree)
|
||
MAMapView.updatePrivacyShow(.didShow, privacyInfo: .didContain)
|
||
MAMapView.updatePrivacyAgree(.didAgree)
|
||
AMapSearchAPI.updatePrivacyShow(.didShow, privacyInfo: .didContain)
|
||
AMapSearchAPI.updatePrivacyAgree(.didAgree)
|
||
|
||
AMapServices.shared().apiKey = AMapConfig.apiKey
|
||
AMapServices.shared().enableHTTPS = true
|
||
#endif
|
||
isConfigured = true
|
||
return true
|
||
}
|
||
|
||
/// 要求高德 SDK 已完成合规初始化,否则抛出错误。
|
||
static func requireConfigured(appStore: AppStore = .shared) throws {
|
||
guard configureIfNeeded(appStore: appStore) else {
|
||
throw LocationProviderError.privacyNotAccepted
|
||
}
|
||
}
|
||
|
||
/// 测试专用:重置初始化状态。
|
||
static func resetForTesting() {
|
||
lock.lock()
|
||
defer { lock.unlock() }
|
||
isConfigured = false
|
||
}
|
||
}
|