Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iPhone - How to retrieve duration for auto-renewable subscription for in app purchases

I'm looking at setting up In App Purchases for an iPhone app. I'm planning on using the new auto-renewable subscription type. However, I want to offer multiple durations for a particular subscription, but can't see how I can retrieve the duration from the SKProduct that is returned in the SKProductsResponse.products array.

The SKProduct object has price, localizedTitle and localizedDescription. However, if you set up a subscription family with multiple durations the title/description are set once for the family so you cannot include the duration, and the docs explicitly say don't include the duration in the title/description. However, can't see any other field where I can retrieve the duration for displaying in my custom in app store. Either I'm missing something or it isn't going to be available until 4.3?

Pointers greatly appreciated!

like image 482
Martin Bayly Avatar asked Mar 06 '11 07:03

Martin Bayly


People also ask

How do I view recurring Payments in iOS?

To view and manage your Apple subscriptions, head to the Settings app on your iOS device, then tap your name, followed by iTunes & App Store. Hit the Apple ID link at the top, then View Apple ID, and Subscriptions. The next screen will show you all the subscriptions handled by Apple, including Apple Music.


2 Answers

You need to have some mapping product_id => length somewhere, either in your app or retrived from your app's backend.

like image 112
Sylvain Avatar answered Oct 21 '22 20:10

Sylvain


You can use a specific productIdentifier for each duration (in the code below the productIdentifier for a 1 month subscription is "com.domainname.myapp.sub1month" and for a 7 day duration it is "com.domainname.myapp.sub7day") and search for that in the paymentQueue:

-(void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
   for(SKPaymentTransaction *transaction in transactions){
     switch (transaction.transactionState){
        case SKPaymentTransactionStatePurchasing:
            break;
        case SKPaymentTransactionStatePurchased:
            if([transaction.payment.productIdentifier isEqualToString:@"com.domainname.myapp.sub1month"]{
                newSubscriptionEndDate=[transaction.transactionDate timeIntervalSinceReferenceDate]+3600*24*31;
            }
            if([transaction.payment.productIdentifier isEqualToString:@"com.domainname.myapp.sub7day"]  ){
                newSubscriptionEndDate=[transaction.transactionDate timeIntervalSinceReferenceDate]+3600*24*7;
            }
            [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
            break;
like image 43
Peter Kramer Avatar answered Oct 21 '22 21:10

Peter Kramer