Skip to content

Instantly share code, notes, and snippets.

@objectiveSee
Last active December 22, 2015 19:09
Show Gist options
  • Save objectiveSee/6517572 to your computer and use it in GitHub Desktop.
Save objectiveSee/6517572 to your computer and use it in GitHub Desktop.
- (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