From 48fd0e3ef50e3727b25e930855aaef8c46870eab Mon Sep 17 00:00:00 2001 From: Jason Wray Date: Wed, 14 Aug 2019 14:40:23 -0700 Subject: [ios] Updates for offline pricing --- platform/darwin/src/MGLOfflineStorage.h | 10 +++++++--- platform/darwin/src/http_file_source.mm | 9 +++++---- platform/darwin/test/MGLResourceTests.mm | 23 +++++++++++++++++------ 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/platform/darwin/src/MGLOfflineStorage.h b/platform/darwin/src/MGLOfflineStorage.h index 1ed364ddf3..d093bb938a 100644 --- a/platform/darwin/src/MGLOfflineStorage.h +++ b/platform/darwin/src/MGLOfflineStorage.h @@ -173,6 +173,11 @@ typedef NS_ENUM(NSUInteger, MGLResourceKind) { packs and ambient caching. All of this class’s instance methods are asynchronous, reflecting the fact that offline resources are stored in a database. The shared object maintains a canonical collection of offline packs in its `packs` property. + + Mapbox resources downloaded via this API are subject to separate Vector Tile and + Raster Tile API pricing and are not included in the Maps SDK’s “unlimited” requests. + See our pricing page for more + information. #### Related examples See the @@ -341,8 +346,7 @@ MGL_EXPORT attempt to download additional tiles until already downloaded tiles are removed by calling the `-removePack:withCompletionHandler:` method. - @note The Mapbox Terms of Service - prohibits changing or bypassing this limit without permission from Mapbox. + @param maximumCount The maximum number of tiles allowed to be downloaded. */ - (void)setMaximumAllowedMapboxTiles:(uint64_t)maximumCount; @@ -420,7 +424,7 @@ MGL_EXPORT - (void)resetDatabaseWithCompletionHandler:(void (^)(NSError *_Nullable error))completion; -/* +/** Inserts the provided resource into the ambient cache. This method mimics the caching that would take place if the equivalent resource diff --git a/platform/darwin/src/http_file_source.mm b/platform/darwin/src/http_file_source.mm index 5737d8b999..b1f2bfbb91 100644 --- a/platform/darwin/src/http_file_source.mm +++ b/platform/darwin/src/http_file_source.mm @@ -206,12 +206,13 @@ NSURL *resourceURLWithAccountType(const Resource& resource, NSInteger accountTyp ([url.host isEqualToString:@"mapbox.com"] || [url.host hasSuffix:@".mapbox.com"])) { NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; NSURLQueryItem *accountsQueryItem = [NSURLQueryItem queryItemWithName:@"sku" value:MGLAccountManager.skuToken]; - - NSMutableArray *queryItems = [NSMutableArray arrayWithObject:accountsQueryItem]; - - // offline here + NSMutableArray *queryItems = [NSMutableArray array]; + if (resource.usage == Resource::Usage::Offline) { [queryItems addObject:[NSURLQueryItem queryItemWithName:@"offline" value:@"true"]]; + } else { + // Only add SKU token to requests not tagged as "offline" usage. + [queryItems addObject:accountsQueryItem]; } if (components.queryItems) { diff --git a/platform/darwin/test/MGLResourceTests.mm b/platform/darwin/test/MGLResourceTests.mm index 0420997c39..7fcccc535c 100644 --- a/platform/darwin/test/MGLResourceTests.mm +++ b/platform/darwin/test/MGLResourceTests.mm @@ -22,18 +22,28 @@ namespace mbgl { NSURL *url = [NSURL URLWithString:@(testURL.c_str())]; NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; NSArray *items = components.queryItems; - XCTAssert(items.count == 2 ); + XCTAssert(items.count == 2); } Resource resource(Resource::Kind::Unknown, testURL); - // By default, resource are NOT offline + // By default, resources are NOT offline { + bool skuTokenQueryItemFound; NSURL *url = resourceURLWithAccountType(resource, 0); NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; for (NSURLQueryItem *item in components.queryItems) { XCTAssertFalse([item.name isEqualToString:@"offline"]); + if ([item.name isEqualToString:@"sku"]) { + skuTokenQueryItemFound = YES; + } } + +#if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR + XCTAssertTrue(skuTokenQueryItemFound, "Default resource URL should have SKU token query item"); +#else + XCTAssertFalse(skuTokenQueryItemFound, "Non-iOS platforms should not have a SKU token query item"); +#endif } // Now check offline @@ -43,20 +53,20 @@ namespace mbgl { NSURL *url = resourceURLWithAccountType(resource, 0); NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; - // For offline, we expect a single offline param and a sku param + // For offline, we expect a single offline query item NSInteger foundCount = 0; #if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR for (NSURLQueryItem *item in components.queryItems) { if (([item.name isEqualToString:@"offline"] && [item.value isEqualToString:@"true"]) || ([item.name isEqualToString:@"a"] && [item.value isEqualToString:@"one"]) || - ([item.name isEqualToString:@"b"] && [item.value isEqualToString:@"two"]) || - ([item.name isEqualToString:@"sku"])) { + ([item.name isEqualToString:@"b"] && [item.value isEqualToString:@"two"])) { foundCount++; } + XCTAssertFalse([item.name isEqualToString:@"sku"]); } - XCTAssert(foundCount == 4); + XCTAssert(foundCount == 3); #else // NOTE: Currently the macOS SDK does not supply the sku or offline query parameters for (NSURLQueryItem *item in components.queryItems) { @@ -64,6 +74,7 @@ namespace mbgl { ([item.name isEqualToString:@"b"] && [item.value isEqualToString:@"two"])) { foundCount++; } + XCTAssertFalse([item.name isEqualToString:@"sku"]); } XCTAssert(foundCount == 2); -- cgit v1.2.1