Files
suixinkan_uikit/suixinkan/Features/Location/AMapBootstrap.swift
T

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
}
}