Same In-App product shared among multiple apps (Android) - android

Is it possible to have the same in-app product(managed) in multiple apps? Such that if a user buys a premium upgrade in one of the apps, he gets premium upgrade in all of them.
Note that I'm not planning to maintain a user database currently and trying to find a solution using Google's in-app billing API alone if it's possible.

No, it's not possible, unless you build your own database. Entitlements are always related to an app (package name), which means if a user buys a SKU of App A, the Play Billing library can only pull entitlements for App A from its code.

Related

Multiplatform app and consumable in-app purchases

I have a multiplatform app (Android, iOS, Windows) and implemented one license for the app. I have a webserver to make the license available across all the platforms. I use consumable in-apps to implement it. License is bought, added to a webserver and consumed.
It's consumable because it should be added to a webserver only once.
Everything was fine until now. (1.5 years since initial iOS release) Now my app got rejected. According to the apple I use incorrect in-app type. (I disputed that I have multiplatform app but they keep rejecting my app) But I do not understand what for do I need to use non-consumable in-app to make it comply to their guidelines. Any ideas what I did incorrectly and how to fix it? Should I completely remake licensing in my app?
They may be rejecting your app since users will have no way to restore their license if they reinstall the app, get a new phone, etc. Non-consumable purchases are permanently appended to the users Apple receipt file so they can be "restored" even years after they were purchased.
The other way to offer restore functionality is if you require all users to login with app specific accounts, where you can restore any purchases directly from your server.
Usually app review provides a rejection reason and violated guidelines. Anything here?
I had a phone call with Apple and they explained what they require:
Licenses must be non-consumable in-apps. Consumable in-apps may be only some kind of coins in the game and etc.;
non-consumable in-app should work without requiring registration;
If I want to have cross-platform license user may register account in our system and it should add the license from non-consumable in-app and check that this is the first time in-app with such id is used;
PS:
The idea with subscription sounds easier to implement and I decided to switch our licensing to non-renewable subscriptions as #Paulw11 suggested. The only disadvantage is that subscription must be time limited. So, I will have one year subscription.

In-app purchases: Share user In-App purchases between Android and iOS

I'm planning to add In-App purchases to my Productivity app. Enhanced features are purchase products (e.g., freemium).
I would like to have user access to purchased feature on both Android and iOS, if he has purchased on any one platform. Technically I plan to store purchase information on server and have it retrieved whenever user logs-in on either device, and unlock the feature if already purchased.
Is this allowed in both iOS and Android?
Apple App Store Review Guidelines on Section 11 have this explained.
Points "11.1/11.2" and "11.14" sounds conflicting (or I'm missing something.).
On Android, I do not see this point mentioning in Policies.
If you had any experiences (w.r.t sharing purchase info between devices) that I should take care additionally, any suggestions are welcome.
I'd like to add a note about subscriptions. Here's the quote from Apple guide:
Cross-Platform Considerations
Product identifiers are associated with a single app. Apps that have both an iOS and macOS version have separate products with separate product identifiers on each platform. You could let users who have a subscription in an iOS app access the content from an macOS app (or vice versa), but implementing that functionality is your responsibility. You would need some system for identifying users and keeping track of what content they’ve subscribed to, similar to what you would implement for an app that uses non-renewable subscriptions
Link to Apple docs: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html
Quote from Android docs:
You can also build on your existing external subscriber base from inside your Android apps
If you sell subscriptions on a web site, for example, you can add your own business logic to your Android app to determine whether the user has already purchased a subscription elsewhere, then allow access to your content if so or offer a subscription purchase from Google Play if not.
You can implement your own solution for sharing subscriptions across as many different apps or products as you want ...
Link to Android docs:
https://developer.android.com/google/play/billing/billing_subscriptions.html
At the moment of writing this answer (May 23, 2017) Windows Store doesn't have subscriptions but they were announced during the latest BUILD conference. Some details here and here
Subscriptions should be available later this summer.
Answering myself. I submitted to App Store mentioning this case and got it approved. I'm yet to submit to Google Play so not sure about it.
Below the snippet I mentioned in App Store review notes that may help some
If user already purchased premium outside the app(our website or
Android app), then we are unlocking Premium as soon as user
logs-in to the app on iOS device. We do not include any button or link
or information inside this app regarding purchasing outside. If you
have any concern or comments regarding this, please let us know.
Additionally mentioned that our in-app item's service is based on user data at our server and not solely on iOS platform. I think this is the key point that makes sense to reuse user's purchase of our service. However, I do not find this case mentioned clearly in App Store review Guidelines.
[Update for April 2019]
As I've already answer here - from developer Apple guidelines:
3.1.3(b) Multiplatform Services: 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.
So like #siddharth-gupta explain in his answer:
Apple's rule basically states that if you have a digital product in your app (in your case, your subscription), the only way to pay for it should be via Apple's in-app purchases. If instead of using in-app purchases, you redirect the user to pay using any other method, your app risks getting rejected.
Note: this Apple statement for April 2019 -> and can always change. To avoid potential rejection/ban Always verify it with current official Apple Documentation

Android App Billing per Account

How to set app billing to buy app just once per account ??
Can't find any examples with such situation. If possible provide some external links to see.
When you say 'upgrade' you mean within the app, meaning the user has already downloaded the app for free.
This could be accomplished by in app purchases (tied to Google account if you're using the Google Play API) or by purchasing a separate app (i.e. PRO version) which interfaces with the current app.
Here's the docs for in app purchases:
http://developer.android.com/google/play/billing/billing_overview.html
And here's another SO question if you want to go the PRO/unlocker route:
How can I use the paid version of my app as a "key" to the free version?

In-App billing get if the user purchased the app before it was free

I want to be able to get the state of the user purchases but on the current app they are in from when it was paid to free.
For example App SuperCars was paid app but the latest update makes it free with in-app purchases. I want previous users who paid for the app to have access to paid content but new users to have no access in which they would need to pay.
Can anyone give me an example of how I would do this? How do I get the user paid sate??
After looking around and contacting certain people I've found out that it's not supported by Google, I'm disappointed at the developing Apps for Google Play, lots of features still missing.
Think about it, essentially you have launched a new product. Its not the same product, its a modified more useful product. Infact you should release this as a different product, different package, and check if your other product is also installed. If yes, provide the in app features free. Let both products coexist.
One more way is to update the older product (with a bug fix) that broadcasts its "paid" status. Then when you install the new app (free with inapp purchases) you can know that they have already paid for the app.
But if they have uninstalled the older app, then they have to install the older app to use it free.
So essentially you customers have 2 choices
Install the older product, pay for it. And install and use the 2nd product free.
Install the newer product and use in-app purchases.
DONT look for a way for google play to give you a status of a user's paid progress of a previous version of the app. Sorry, this looks like a crazy api to implement (even for google :)).

Does a user lose their in app purchase if they uninstall the app?

I'm thinking of implementing in app billing instead of releasing a separate app with the pro features. and I'm wondering if the user would lose their purchase if they uninstall or factory reset
if you use the in app billing api from google, the purchase is bound to the users google account.
that means, as long as they use the same account, they have access to the purchased features
you can find more informations here http://developer.android.com/google/play/billing/api.html#purchase
Applications are tight to the account and can be installed multiple times on multiple devices. See this article.

Categories

Resources