Dev01
Dev01

Reputation: 14149

How do I read receipt data with existing paid iOS app?

I have a paid app that I'm thinking about making free with in app purchases. If I make the switch I'll need to check if the user has already paid for the app and then enable the paid features.

I think the below code should do what I need but I'm not sure how to test it. I built the app and ran it using my development provisioning profile on my device and receitpData is empty. So I built the app with a distribution provisioning profile and submitted it to the app store then downloaded the app using test flight but I'm still having the same problem.

How do I get the receipt data from an existing app?

Do I need to enable in-app purchases for this app to get this data?

NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receiptData = [NSData dataWithContentsOfURL:receiptUrl];

Upvotes: 4

Views: 1425

Answers (1)

Dev01
Dev01

Reputation: 14149

I figured it out:

#import <StoreKit/StoreKit.h>

Don't forget to add its delegates

<SKPaymentTransactionObserver, SKProductsRequestDelegate>

Here's the code:

SKReceiptRefreshRequest* request = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil];
request.delegate = self;
[request start];

and then:

-(void)requestDidFinish:(SKRequest*)request{
    if([request isKindOfClass:[SKReceiptRefreshRequest class]]){
        NSLog(@"YES, You purchased this app");
    }
}

- (void)request:(SKRequest*)request didFailWithError:(NSError *)error{
    NSLog(@"NO, you need to buy it");
}

Upvotes: 3

Related Questions