iOS Question Non-renewable Subscription

aaronk

Well-Known Member
Licensed User
Longtime User
HI,

I have been trying to get an app to be approved by Apple for a few days now.

Apple keep rejecting the app due to my in-app purchases.

Currently I am using an Non-Consumable in app purchase. In my B4i app, once the user makes the payment and the event PurchaseCompleted is triggered (and payment is successful) then it will send a message to my B4J app to update the expiry date for the service.

For Example:
B4i / B4A app logs into my B4J app. To continue using the service they need to make a payment either through B4A/B4i app. Both are linked together since the customer can sign in with the same username. They can sign up to a 30 day / 120 day or 365 day access pass. The user can purchase the access pass multiple times, and each time they purchase the in-app purchase it just increases the expiry on the B4J app.

Apple rejected this and said:

Since the service offered by your app requires the user to make an advance payment to access the content or receive the service, please use the non-renewable subscription in-app purchase product type. Non-renewable subscription content must be made available to all iOS devices owned by a single user, as indicated in guideline 3.1.2 of the App Store Review Guidelines.

I have a few questions to ask:

1. Can I use Non-renewable subscription in B4i? Is it the same as calling:
B4X:
MyStore.RequestPayment(...) ' use the ProductID for the non-renewable subscription

I am guessing the above will work and works the same as what I have done with Non-Consumable in app purchase.

2. What happens if the user makes the payment for the non-renewable subscription, it then sends the payment to my B4J app (since the B4i app knows the payment was successful), and then the user closes the app and goes into the Settings app and cancels the subscription. They basically get the service for free?

I am guessing the only way my server will know about this cancellation is for the app it open and check if it was cancelled or for somehow my server to poll Apples server every hour to check if any have been cancelled?

Anyone know the answers to the above or know a workaround ?
 

Computersmith64

Well-Known Member
Licensed User
Longtime User
Probably the best place to find answers relating to subscriptions is by looking at the Apple Developer documentation -> https://developer.apple.com/library...ual/StoreKitGuide/Chapters/Subscriptions.html

There's also a pretty good tutorial on Non-Renewing subscriptions here -> https://www.raywenderlich.com/754-in-app-purchases-non-renewing-subscriptions-tutorial

The thing with iOS subscriptions is that even if a user cancels them, they are still current until the subscription expires. To get a refund on a subscription, the user has to contact Apple Support & request it. Whether they get a refund &/or how you will know, I'm not sure - but my understanding is that it's very rare for Apple to refund a subscription.

- Colin.
 
Upvote 0

aaronk

Well-Known Member
Licensed User
Longtime User
Another thing that come to mind..

Can you subscribe multiple times?

For example:
Let's say you have cars out in the field.
I want to do an in-app purchase for each car and once the payment has been made, the B4J app will send a command to the car and make it connect to the cloud.
The in-app purchase will allow the car to send commands to the cloud for 30 days. After 30 days the user has the option to pay again.

However the in-app purchase is valid for 30 days, 120 days or 365 days pending on the option they select. However, the customer has the option to use my iOS app or Android app to make the purchase.

I am guessing you can only subscribe the once per in-app subscription at one time, and not have multiple in-app subscriptions at the one time (with the same ProductID) ?
 
Upvote 0

tufanv

Expert
Licensed User
Longtime User
Subscribing multiple times is possible with non-renewing subscriptions as you are managing the subscriptions. You have to add those days for every subscription like if you are selling 30 days of subscription and lets say when the user has 25 days remaining he bought again, you have to add 30 days and make it 55 days.
 
Upvote 0

aaronk

Well-Known Member
Licensed User
Longtime User
You have to add those days for every subscription like if you are selling 30 days of subscription and lets say when the user has 25 days remaining he bought again, you have to add 30 days and make it 55 days.

That is exactly what I am currently doing. Except I am doing it with in-app purchase and not subscription.

Issue is let’s say you do it as above which is fine for car A. But now you want subscribe car B. When you choose 30 days subscription for car B it says it’s already been used.

Where using in-app non consumable purchase you can purchase the same thing multiple times and it doesn’t care if you purchase the same thing multiple times.

I think it’s the way I have worded it in the app. (30 Day Access Pass, 120 Day Access Pass etc)

I am going to change it so that when doing the in app purchase (like how I am doing it) it will add credit to the cloud account. Then you can add a car from the cloud credit account. Then I hopefully don’t need to do it the way Apple tells me how to do it, otherwise I will need to work out how to do the subscription with multiple products with the same product ID.
 
Upvote 0

tufanv

Expert
Licensed User
Longtime User
Why don't you ask which car to customer after purchase complete ?
That is exactly what I am currently doing. Except I am doing it with in-app purchase and not subscription.

Issue is let’s say you do it as above which is fine for car A. But now you want subscribe car B. When you choose 30 days subscription for car B it says it’s already been used.

Where using in-app non consumable purchase you can purchase the same thing multiple times and it doesn’t care if you purchase the same thing multiple times.

I think it’s the way I have worded it in the app. (30 Day Access Pass, 120 Day Access Pass etc)

I am going to change it so that when doing the in app purchase (like how I am doing it) it will add credit to the cloud account. Then you can add a car from the cloud credit account. Then I hopefully don’t need to do it the way Apple tells me how to do it, otherwise I will need to work out how to do the subscription with multiple products with the same product ID.
 
Upvote 0

aaronk

Well-Known Member
Licensed User
Longtime User
When the app opens it logs into the cloud. It will then display which cars the user has access too.
The user selects the car from the list as soon as they login.

From this point onwards everything is mapped to that one car only.

If they want to extend there expiry then they need to do the in-app purchase.

So when the payment is being made, the user will assume they are purchasing based on the car they selected when open the app.

I think making the in-app purchase add credit to the users profile on the cloud, they can then pay for the service based on the available credit. This way it will make it look to Apple that they are purchasing more credit like in a Game to continue using the app. I might get away with it. (guess I will find out once I submit the update)
 
Upvote 0

techknight

Well-Known Member
Licensed User
Longtime User
Cars? So what are you doing, hacking CANBUS now? or is this hypothetical speak.

Saw this thread, and couldn't help myself but be interested in it in a way.

Almost sounds like a rental service for your own-built electric vehicles/scooters or something.
 
Upvote 0

aaronk

Well-Known Member
Licensed User
Longtime User
Cars? So what are you doing, hacking CANBUS now? or is this hypothetical speak.
Using cars as an example to help understand what I am trying to do.

Apple Support said if I do it as per the below, then they will accept it. But I think I might go down the path of a subscription, but will require more work on my B4J server as it will now need to use the server-to-server notifications to keep track of the subscription status.

I think making the in-app purchase add credit to the users profile on the cloud, they can then pay for the service based on the available credit. This way it will make it look to Apple that they are purchasing more credit like in a Game to continue using the app. I might get away with it. (guess I will find out once I submit the update)
 
Upvote 0
Top