diff options
author | Jason Wray <jason@mapbox.com> | 2019-08-14 14:40:23 -0700 |
---|---|---|
committer | Jason Wray <jason@mapbox.com> | 2019-08-14 15:00:38 -0700 |
commit | 48fd0e3ef50e3727b25e930855aaef8c46870eab (patch) | |
tree | 0f3cc5eabae2544f9fe28835756046ab0fdc5703 | |
parent | cd129612c1d5472a7054ba4a3dd3a99ef29fe182 (diff) | |
download | qtlocation-mapboxgl-48fd0e3ef50e3727b25e930855aaef8c46870eab.tar.gz |
[ios] Updates for offline pricing
-rw-r--r-- | platform/darwin/src/MGLOfflineStorage.h | 10 | ||||
-rw-r--r-- | platform/darwin/src/http_file_source.mm | 9 | ||||
-rw-r--r-- | 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 <a href="https://www.mapbox.com/pricing/">our pricing page</a> for more + information. #### Related examples See the <a href="https://docs.mapbox.com/ios/maps/examples/offline-pack/"> @@ -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 <a href="https://www.mapbox.com/tos/">Mapbox Terms of Service</a> - 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<NSURLQueryItem *> *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); |