🎟 Mapbox Mobile Events

Bitrise codecov

Mapbox Mobile Events SDK 收集关于地图和设备位置的匿名数据,以持续更新和改进您的地图。

📦 客户端框架

🏎 快速开始

如果您正在使用其他 Mapbox SDK,则无需进行任何特殊设置即可使用 Mapbox Mobile Events。

如果您要将 Mapbox Mobile Events 集成到不使用其他 Mapbox SDK 的应用程序中,则需要在您的应用程序中包含 MapboxMobileEvents.framework,并在应用程序委托的 …didFinishLaunching… 方法中添加

MMEEventsManager *manager = [MMEventsManager.sharedManager 
    initializeWithAccessToken:@"your-mapbox-token" 
    userAgentBase:@"user-agent-string"
    hostSDKVersion:@"1.0.0"];
[manager sendTurnstileEvent];

或者,在 Swift 中

let eventsManager = MMEEventsManager.sharedManager().initialize(
    withAccessToken: "your-mapbox-token", 
    userAgentBase: "user-agent-string", 
    hostSDKVersion: "1.0.0")
eventsManager.sendTurnstileEvent()

🎟 发送事件

创建和发送事件的首选 API 使用私有方法 -MMEEventManager pushEvent:。如果您认为您的应用程序需要发送事件,请联系您的技术客户经理或在此存储库中打开一个包含详细信息的 issue。

💣 调试

通常,在模拟器中运行 Mobile Events SDK 时,它不会发送事件或发出调试消息。您可以通过在应用程序的 Info.plist 中设置键来启用这些功能

MMEDebugLogging: YES
MMECollectionEnabledInSimulator: YES

🗺 前台和后台位置收集

MapboxMobileEvents 框架收集位置数据,以帮助我们改进地图。我们努力保持低功耗和网络使用量,并非常小心地根据我们的隐私政策对所有数据进行匿名化处理。

在移动设备上使用 Mapbox SDK 和 API 受我们的
服务条款管辖,该条款要求您的应用程序不得干扰或限制 Mapbox SDK 发送给我们的数据,无论是通过修改 SDK 还是通过其他方式。如果您的应用程序需要不同的条款,请联系 Mapbox 销售

iOS 13 中的后台位置

如果您的应用程序启用了后台位置,则 MapboxMobileEvents 框架会在后台使用被动方法收集遥测数据,这种方法功耗非常低。 如果您的应用程序不使用后台位置,请确保在 Info.plist 中删除其权限键:NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription,以及 UIBackgroundMode location

⚠️错误和异常处理与报告

MapboxMobileEvents 框架努力包含所有内部异常和错误,以防止错误直接影响使用该框架的应用程序的最终用户。 该框架将尝试以经过编辑的形式将其报告给我们的后端,以供 Mapbox 分析。

嵌入 MapboxMobileEvents.framework 的应用程序和框架可以在设置 MMEEVentsManager.sharedManager.delegate 后实现 MMEEventsManagerDelegate 方法

- (void)eventsManager:(MMEEventsManager *)eventsManager 
    didEncounterError:(NSError *)error;

以获知框架遇到的任何 NSErrorNSExceptionNSException 被封装在 NSError 中报告,错误代码为 MMEErrorException,异常包含在用户信息字典中,键为 MMEErrorUnderlyingExceptionKey

如果框架希望通过 mobile events API 报告错误,则在 MMEEventsManager 上提供了两种便捷方法

NSError *reportableError = nil;
// make a call with an **error paramater
[MMEEventsManager.sharedManager reportError:reportableError];

@try {
    // do something dangerous
}
@catch (NSException *exceptional) {
    [MMEEventsManager.sharedManager reportException:exceptional];
}

🧪 测试

一些遗留的测试用例是使用 Cedar 编写的,要在 Xcode 中使用 Command-U 运行测试,您需要解压缩位于 Carthage/Build/iOS/ 中的框架才能运行这些测试。