Last active
December 22, 2015 19:09
-
-
Save objectiveSee/6517572 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (void)_getProductsById:(NSSet *)productIDs | |
{ | |
NSAssert(self.requestingProducts, @"Should be busy from previous method (getProductsWithCompletion)"); | |
NSAssert(self.productRequest == nil, @"logic"); | |
EALog(@"Getting items: %@", productIDs); | |
SKProductsRequest *productRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIDs]; | |
[productRequest setDelegate:self]; | |
[productRequest start]; | |
self.productRequest = productRequest; | |
EALog(@"Starting request for products"); | |
} | |
#pragma mark - | |
#pragma mark SKProductRequest Protocols | |
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { | |
NSCAssert([NSThread isMainThread], @"Require main thread"); | |
NSParameterAssert(self.productRequest); // should be pending | |
EALog(@"Response to Product Request from Apple:\nValid Products:\n%@",response.products); | |
if ( response.invalidProductIdentifiers.count > 0 ) { | |
EAWarning(@"Invalid product identifiers: %@", response.invalidProductIdentifiers); | |
} | |
NSMutableDictionary *validProducts = [NSMutableDictionary dictionary]; | |
// find the valid products | |
if ( response.products ) { | |
for (SKProduct *product in response.products) { | |
[validProducts setObject:product | |
forKey:product.productIdentifier]; | |
} | |
} | |
NSMutableDictionary *mergedProductsHash = [NSMutableDictionary new]; | |
// merge the price info from valid products with the meta info from the Evil Apples server | |
[self.productsReturnedFromServer enumerateObjectsUsingBlock:^(NSDictionary *productInfoFromEAServer, NSUInteger idx, BOOL *stop) { | |
NSString *pid = [productInfoFromEAServer objectForKey:@"id" ofClass:@"NSString"]; | |
SKProduct *appleProduct = [validProducts objectForKey:pid]; | |
if ( appleProduct ) { | |
NSMutableDictionary *mergedProduct = [productInfoFromEAServer mutableCopy]; | |
[mergedProduct setObject:appleProduct forKey:@"SKProduct"]; | |
[mergedProductsHash setObject:mergedProduct forKey:pid]; | |
} | |
}]; | |
// use productRequest to prevent multiple requests | |
self.productRequest = nil; | |
// TODO: Handle errors! Where is a SKProductRequest error handled?! | |
[self _productRequestSuccess:mergedProductsHash]; | |
} | |
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error | |
{ | |
EALog(@"SKRequest Error = %@", error); | |
if ( [request isKindOfClass:[SKProductsRequest class]] ) { | |
NSAssert([request isEqual:self.productRequest], @"These should be the same because we only allow 1 products request at a time"); | |
self.productRequest = nil; | |
[self _productRequestFailed:error]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment