从Mapbox 6迁移至Mapbox 10:如何为矢量源设置授权头?
Mapbox 10 为矢量源设置授权头的解决方案
Mapbox 10 中依然可以通过自定义URLProtocol拦截请求并添加授权头,但配置方式和 Mapbox 6 有所不同,以下是具体实现步骤:
1. 复用原自定义URLProtocol逻辑
你之前在 Mapbox 6 中实现的URLProtocol子类可以直接复用,核心拦截、添加授权头的逻辑无需修改,示例如下:
class CustomAuthURLProtocol: URLProtocol { override class func canInit(with request: URLRequest) -> Bool { // 可限定仅拦截目标瓦片域名的请求,避免全局拦截 return request.url?.host == "www.demo-endpoint.com" } override class func canonicalRequest(for request: URLRequest) -> URLRequest { return request } override func startLoading() { var mutableRequest = request // 添加授权头,替换为你的实际授权凭证 mutableRequest.setValue("Bearer YOUR_AUTH_TOKEN", forHTTPHeaderField: "Authorization") let task = URLSession.shared.dataTask(with: mutableRequest) { [weak self] data, response, error in guard let self = self else { return } if let data = data { self.client?.urlProtocol(self, didLoad: data) } if let response = response { self.client?.urlProtocol(self, didReceive: response, cacheStoragePolicy: .notAllowed) } if let error = error { self.client?.urlProtocol(self, didFailWithError: error) } self.client?.urlProtocolDidFinishLoading(self) } task.resume() } override func stopLoading() {} }
2. 在 Mapbox 10 中注册自定义URLProtocol
Mapbox 10 弃用了MGLNetworkConfiguration,改为通过ResourceOptions或NetworkConfiguration配置网络会话,两种方式任选其一:
方式一:初始化 MapView 时绑定配置
// 初始化资源配置,传入你的 Mapbox Access Token let resourceOptions = ResourceOptions(accessToken: "YOUR_MAPBOX_ACCESS_TOKEN") // 创建自定义会话配置 let sessionConfig = URLSessionConfiguration.default // 将自定义协议加入列表,保留原有协议避免影响其他请求 sessionConfig.protocolClasses = [CustomAuthURLProtocol.self] + (sessionConfig.protocolClasses ?? []) // 绑定会话配置到资源选项 resourceOptions.urlSessionConfiguration = sessionConfig // 使用配置好的资源选项创建 MapView let mapView = MapView(frame: view.bounds, resourceOptions: resourceOptions)
方式二:全局修改网络配置
若无需针对单个 MapView 做差异化配置,可直接全局修改:
let sessionConfig = NetworkConfiguration.shared.urlSessionConfiguration sessionConfig.protocolClasses = [CustomAuthURLProtocol.self] + (sessionConfig.protocolClasses ?? []) NetworkConfiguration.shared.urlSessionConfiguration = sessionConfig
3. 验证效果
配置完成后,你的矢量源请求会被自定义URLProtocol拦截并自动添加授权头,即可正常访问需要权限的瓦片端点。
内容的提问来源于stack exchange,提问作者πter
相关产品推荐
相关产品推荐

