I have restore purchase feature for my app and I need to retrieve the original_application_version.
But connect to sandbox.itunes.apple.com always return NSPosixErrorDomain code 54 . Are you guys having the same issue?
Here's my code. Connection Error (line 40) when verify the receipt with sandbox link
- (void)requestDidFinish:(SKRequest *)request{
if (request == _skReceiptRequest){
NSURL* receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData* receipt = [NSData dataWithContentsOfURL:receiptURL];
if (!receipt) {
return;
}
NSError *error = nil;
NSDictionary *requestContents = @{ @"receipt-data":[receipt base64EncodedStringWithOptions:0] };
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents options:0 error:&error];
if (!requestData) {
NSLog(@"IAP No request");
return;
}
[self verifyReceipt:TRUE requestData:requestData];
}
}
- (void)verifyReceipt:(bool) envProduction requestData:(NSData *) requestData {
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSString* sandbox = @"https://sandbox.itunes.apple.com/verifyReceipt";
NSString* production = @"https://buy.itunes.apple.com/verifyReceipt";
NSURL *storeURL;
if (envProduction) {
storeURL = [NSURL URLWithString:production];
} else {
storeURL = [NSURL URLWithString:sandbox];
}
NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:storeURL];
[storeRequest setHTTPMethod:@"POST"];
[storeRequest setHTTPBody:requestData];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:storeRequest queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
if (connectionError) {
NSLog(@"IAP_Error with verify receipt: %@", connectionError);
} else {
NSError *error = nil;
NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
if (error) {
NSLog(@"IAP_Error with jsonResponse: %@", error);
[purchaseDelegate failedToVerifyReceiptWithApple:error];
} else {
NSInteger result = [[jsonResponse valueForKey:@"status"] integerValue];
if (result == 0) {
NSDictionary* receiptDict = [jsonResponse objectForKey:@"receipt"];
NSString* original_application_version = [receiptDict objectForKey:@"original_application_version"];
}
else if (result == 21007) {
[self verifyReceipt:FALSE requestData:requestData];
}
else if (result == 21008) {
[self verifyReceipt:TRUE requestData:requestData];
}
else {
}
}
}
}];
}Thanks,