I was wondering how can I ask a user for credit card details and charge him without using Apple's in-app purchasing mechanism.
My idea was to post the user's credit card to my online credit billing system and make the transaction on the website, behind the scenes, and then report back to the user with the transaction results.
Will Apple approve this kind of app?
Apple will not approve such an app, unless users are purchasing something which cannot be purchased via an in-app purchase.
For example, a pizza store is allowed to collect credit card details to pay for pizza's. But a digital music purchase must use the in-app purchase system.
From apple's documentation:
There are four supported kinds of products that you may sell using
In-App Purchase:
Content includes digital books, magazines, photos, artwork, game
levels, game characters, and other digital content that can be
delivered within your application.
Functionality products unlock or
expand features you’ve already delivered in your application. For
example, you could ship a game with multiple smaller games that could
be purchased by the user.
Services allow your application to charge
users for one-time services, such as voice transcription. Each time
the service is used is a separate purchase.
Subscriptions provide
access to content or services on an extended basis. For example, your
application might offer monthly access to financial information or to
an online game portal.
Anything in that list must use the in-app purchase system, and anything else must not use it.
By the way, these things have changed many times, and could change at any time in future.
Related
I'm developing an app that allows users to subscribe to each other's content via paid subscription. For example, user A can subscribe to user B's channel for $5/month and I take a small fee from the transaction (user B gets the remainder).
Apple policy states that all in-app digital purchases and subscriptions must be done with Apple In-App Purchase, but does this include digital user marketplaces? I'm in the middle of implementing Stripe but I'm not sure if this is allowed.
If I have to use the In-App Purchases, does this even support my model?
Thanks!
If you want to facilitate the transaction through your app, then yes, it needs to be done through an in-app purchase. You can use Stripe for users that subscribe on your website, but you can't direct users there to make a purchase from your app.
Apps that operate across multiple platforms may allow users to access
content, subscriptions, or features they have acquired elsewhere,
including consumable items in multi-platform games, provided those
items are also available as in-app purchases within the app. You must
not directly or indirectly target iOS users to use a purchasing method
other than in-app purchase, and your general communications about
other purchasing methods must not discourage use of in-app purchase.
With in-app purchases, you'll need to facilitate the payouts yourself. This could be difficult since you'll probably want to wait until Apple pays you before you distribute (usually 1+ month after purchase), and you'll have to track refunds and cancellations. If your app is available globally there's also the fact that you'll get paid out different $$ for the same subscription depending on the country it was purchased due to tax differences.
Also, since you can only be subscribed to a single product within a subscription group, you won't be able to have a user subscribe to channel A and channel B with 2 subscriptions.
Really, the best solution for this type of marketplace is to use something like Stripe Connect as you've figured out. However, you'll have to process this purchase outside of your app and not direct users there from within your app.
A solution to use in-app purchases could be to switch from a subscription to a consumable purchase to unlock content for a specific period and manage the expiration date yourself. This would allow a user to make multiple purchases to unlock multiple channels. The downside is that this won't auto-renew, which may mean less revenue for you. You'd still have to handle the payouts yourself, but it would be simpler to manage one-off purchases then dealing with all of the nuances of iOS subscriptions.
I'm currently building an iOS app which includes auto-renewing subscriptions via iTunes. I also provide a secondary subscription service via Stripe for web users, and a subscription on either platform enables premium features for all platforms.
A subscription is therefore tied to the user account in my backend database. I don't particularly care what device they are on.
One problem I am envisaging is that if a user creates a second account on my service, and presses restore purchase in the app, the subscription according to apple must be given. As far as I can tell, showing error such as "You're subscription is already active on another account" would not be allowed.
So I was wondering, instead of rejecting the subscription, can I instead transfer it? Something like this flow:
User creates an account aaa#foo.com
User pays for subscription on aaa#foo.com
User signs out and creates a second account zzz#foo.com
User presses "restore purchases"
Backend transfers the subscription from aaa#foo.com to zzz#foo.com.
User signs out of zzz#foo.com and back in to aaa#foo.com. The first account is no longer "premium", as the second one has the subscription.
Would this be an acceptable approach to take?
Well, in the Apple guideline is not clear enough to know if your option is good. But I think it would be a good option because like that you are allowing user to get their subscription on all of their device as if they use their good account
3.1.2(a) Permissible uses: If you offer an auto-renewing subscription, you must provide ongoing value to the customer, and the subscription period must last at least seven days and be available across all of the user’s devices. While the following list is not exhaustive, examples of appropriate subscriptions include: new game levels; episodic content; multi-player support; apps that offer consistent, substantive updates; access to large collections of, or continually updated, media content; software as a service (“SAAS”); and cloud support. In addition:
Subscriptions may be offered alongside a la carte offerings (e.g. you may offer a subscription to an entire library of films as well the purchase or rental of a single movie).
You may offer a single subscription that is shared across your own apps and services, but these subscriptions may not extend to third party apps or services. Games offered in a game subscription must be owned or exclusively licensed by the developer (e.g. not part of a game publishing platform). Each game must be downloaded directly from the App Store, must be designed to avoid duplicate payment by a subscriber, and should not disadvantage non-subscriber customers.
Subscriptions must work on all of the user’s devices where the app is available. Learn more about sharing a subscription across your apps.
Apps must not force users to rate the app, review the app, download other apps, or other similar actions in order to access functionality, content, or use of the app.
As with all apps, those offering subscriptions should allow a user to get what they’ve paid for without performing additional tasks, such as posting on social media, uploading contacts, checking in to the app a certain number of times, etc.
Subscriptions may include consumable credits, gems, in-game currencies, etc., and you may offer subscriptions that include access to discounted consumable goods (e.g. a platinum membership that exposes gem-packs for a reduced price).
If you are changing your existing app to a subscription-based business model, you should not take away the primary functionality existing users have already paid for. For example, let customers who have already purchased a “full game unlock” continue to access the full game after you introduce a subscription model for new customers.
Apple Review Guideline
I know that IAPs can be used only to sell "digital" products.
But I want to offer a subscription in the app, that will both have new features available in the app (more photos that can be uploaded) and a discount on a physical book in my bookstore.
Is it considered as a digital and physical product combination, or just a digital product?
Is that possible to do through Apple IAPs?
And if not, can you plz suggest a way to bypass the restriction?
If I switch to credit card subscription (using Stripe to handle it), wouldn't Apple ban my app for trying to sell both digital and physical product?
Thanks.
Also, in the most expensive plan, I want to offer free shipping of books for those who have the top subscription.
Among the questions that I've checked, this one seems close, but does not give an answer.
You cannot sell physical items through Apple's IAP. If your app provides services outside of the app itself, you can use your own payment processing within the app.
For instance, the Fandango app allows the user to purchase movie tickets through their app. Because of this, they are allowed to handle payment processing for buying movie tickets using their own mechanism instead of Apple's IAP.
I would suggest using Apple's IAP for digital purchases and a third party for physical sales.
We are a website based service. We do not charge for accounts. We charge for services the user selects to do (such as exporting data). We collect money through our website and store that as credits in our system.
We have built a free app app and have been updating the app.
We would like to provide a user sign up in our app. We are having troubles figuring out if Apple will take issue with that. We understand if we sign up a new account in the app, Apple will take a 30% cut (ala Spotify).
The question is how do they handle free accounts?
EDIT:
Our app currently lets the user charge for services against their current credit balance (such as exporting a file) and have not had an issue with that in 4 years we have been doing it.
EDIT 2:
At one point, they did reject our App for hot linking to our website. That was 3 years ago and I forget if it was because they could create a new accout or could add credits to their account. I can't find a way to go back and look up the rejection notification.
Accounts are unrelated to purchases. Purchases and accounts are often used together, but this is a convenience and not strict requirement.
In your case:
The user may access the app with an account.
No payment is asked for the account.
Through this account, the user may receive content which has been paid for by credit card.
Credit card details have been submitted through your web site.
This is ok, as long as you do not take credit card payments in the app, or provide any buttons or links to credit card payments, from in the app.
According to the App Store Review guide.
3.1.1 In-App Purchase: If you want to unlock features or functionality within your app, (by way of example: subscriptions, in-game
currencies, game levels, access to premium content, or unlocking a
full version), you must use in-app purchase. Apps may not include
buttons, external links, or other calls to action that direct
customers to purchasing mechanisms other than IAP. Any credits or
in-game currencies purchased via IAP must be consumed within the app
and may not expire, and you should make sure you have a restore
mechanism for any restorable in-app purchases. Please remember to
assign the correct purchasability type or your app will be rejected.
Apps should not directly or indirectly enable gifting of IAP content,
features, or consumable items to others. Apps distributed via the Mac
App Store may host plug-ins or extensions that are enabled with
mechanisms other than the App Store.
And
3.1.3 Content-based “Reader” Apps: Apps may allow a user to access previously purchased content or subscriptions (specifically:
magazines, newspapers, books, audio, music, video, access to
professional databases, VoIP, cloud storage, and approved services
such as educational apps that manage student grades and schedules),
provided the app does not direct users to a purchasing mechanism other
than IAP.
In other words, users may access content that has been paid for outside of the app.
If the user is directed by the app to pay for something, then you may not use external payment services, and you must use In App Purchase.
So, hot linking to your web site from your app to accept payments is not allowed, whereas downloading content which has already been paid for through your web site outside of the app is allowed.
If in doubt, contact Apple directly through their support form, or the Apple developer program technical support.
I'm about to develop an app (for iOS and Android) that allows users to create a collection of digital content from their phone (e.g. some videos and pictures), and send that content to other users who can consume that collection on the same iOS/Android app. I'd like to bill users for sending a collection, because this process involves uploading and processing the collection to the cloud (which I pay for) and the recipient's app downloading it again (causing traffic costs). Note that I don't want to charge any money from the recipient!
The way I see it, producing such an iOS app is not possible (because Apple will reject it, see App store guidelines and In App Purchase Guidelines) for the following reasons:
Setting a fixed price for the app ("paid app") is not reasonable, because I want to charge the user each time he sends a collection, so IAP (In-App-Purchases) would be more reasonable
The IAP-logic/flow would be that a user can create the collection in the app for free and then, when he clicks the "send collection" button, he is asked to approve a purchase, in return he gets the link that he can send to his friend. The logic would essentially be the same in the Android app, using Google's "In App Billing"
Such an app could be rejected by Apple because of rule "11.3. Apps using IAP to purchase physical goods or goods and services used outside of the App will be rejected" - because the user essentially paid for hosting the collection, and that collection can be used outside of the app (by an Android app user for example)
OTOH it's also impossible to use external means of payment. For example, I was thinking about forcing users to first create an account on my website, where they can pay for a voucher (with Paypal, say) that enables users to send collections. They'd first need to log into their account in the iOS app and then they might see a warning that they have not yet purchased (or no longer have) any credits for sending a collection. The IAP guidelines forbid me to directly link to my website with a note saying that users can pay for additional credits by other means. When Apple engineers sees that message during review (assuming they aren't putting very bright people in charge) the app might be rejected, too. Even if it were not, this work flow is very uncomfortable for the user, I'd prefer IAP as this also makes accounting (taxes and earnings for my company) a lot easier.
I'd like to get your opinions on this. Please note that I might be "too hard" on myself. As a matter of fact, I do know apps that have been approved to the store that do exactly that, see e.g. here and here. Maybe they have been approved because paragraph 11.3 actually just forbids the ability to purchase the functionality of uploading (converting a collection to a link) and then use this functionality somewhere else - effectively that would mean "to buy credits for an external service" mechanism. My app wouldn't do this. You'd have to do the purchase and the upload/convert-to-link functionality would only work on that device where you did the purchase.
Any thoughts?
I have similar experience with an app i worked on. It was a GPS device showing tracking data in the app. The device uses cellular data to send tracking information and we need to collect a fee to pay the SIM provider which is an external service. We did this using Stripe payment but Apple rejected the app and asked to implement In-App purchase. Because we were blocking the user and asking to pay in the app that looks like we are asking payment for app digital content.
Based on my experience, to answer your question :
Yes you have to use In-App purchase and it can be Consumable type. When user try to send a collection, show a consumable purchase type. Keep track of the purchase in the server using purchase receipt, collection id etc.
Even though the amount collected is used for hosting and web traffic, you can term this as a service fee for managing/sending the collection. Behind the seen, you use this fee to pay your hosting provider or anyone else, that's up to you. Apple won't reject the app for this reason. Because you are charging a fee for digital service you are provided in the app. In apple guidelines, external physical service means, for example taxi charge in Uber, shopping goods price in amazon etc.
This is very common mistake developer often doing while choosing the payment options for any Payment related feature into application. Specifically in iOS there are new rules defined by the Apple for choosing the payment model for your application.
Here are some important points :
If your application having some points system or coins system for which you needs user to pay for than you must use the inApp purchase. And inApp purchase must be of type Consumable. So it will be purchasable multiple times
If your application offering any pro features or facility inside the application you must use inApp purchase. Type will be non consumable. (Note : For Non Consumable inApp purchase you must give Restore Purchase option into your application other wise your application will get rejected.)
If your application is providing any feature or any internal content access for limited time than you must use the subscription based inApp Purchase.
If your application is selling any physical goods than you must use any third party payment options. You can't use inApp purchase for it.
If your application is selling external services or any donation related feature then you can't use inApp purchase for it. This will be a complicated case & in this case according to the apple guidelines you should use the Payment gate way with Webview redirection. So the user will do the payment from the Webview redirected component.
Hope this helps to everyone.