separate Paid/trial version vs IAP questions

Hello again fellow community members.

I know this topic was discussed before, but i have a few question regarding this issue

i have hard time finding the answers to, so here they are:

i am building a cross platform game for both iphone and android.

correct me if i’m wrong, but i know apple does not allow 2 versions of the same game in their store

so i need to go with In App Purchases on the iphone version, but i am wondering if i need to do the same

with android. 

  1. can i use on android the code:  system.openUrl(androidProductId) like i do with “rateit” only apply the paid version id on the trial version? sounds kind of reasonable.

  2. if i use the IAP in both of them to cut in development time so it will be easy to use the same version on both platforms, what do i need the store.restore() function for? i mean i saw the documents but i still do not understand what does it return? 

  • if i want to check for if the version is “restored” i check if a file the saved data file exists- if not i run 

store.init( [storeName,] listener ) to check what is the status of the purchase. if “purchased”, i unlock

paid content from inside the trial version. (why do i need to differ if the status is “purchased” or “restored” (

i know google returns only “purchased”)). then i save a data file.

if there is a data file saved i just checked if PAID variable is “true”, then unlock the data.

  1. finally just to be sure, i make a button for purchase full version. it will trigger the store.purchase(), right?

thanks and sorry if those seem like stupid questions, but i realy need to know how this works.

good day.

Hi there,

It sounds like you’re asking about whether, instead of having IAP in your free app to unlock additional features, you would instead direct the user to download a paid version.

  1. Actually, Apple does allow you to have both paid and free versions of the same app on the App Store.

  2. That should work.  You could probably also just link to the Google Play store URL and open it using system.openURL()

  3. Your app probably shouldn’t respond differently to a “purchased” versus a “restored” event.  Both events mean the user has (at some point) purchased the product.  The purpose of store.restore() is to handle situations when the user had deleted your app or their device was wiped, and then they reinstalled your app.  In that case, your saved data file will be gone, so your app will have no way of knowing what they previously purchased.  Fortunately, the App Store and Google Play keep a record of the transactions for what they call non-consumable (iOS) or managed (Google) products.  By calling store.restore(), they’ll return to you what the user previously purchased.

  4. If you make a button to purchase the full version, it’ll trigger store.purchase() if you set up your button handler to call store.purchase.  :-)  But yes, if you’re planning to use IAP to unlock additional content, then calling store.purchase({“product_id_here”}) is appropriate when someone taps the button.

Of course, keep in mind that if you direct a user to download a paid version, any progress or data they have in the free version won’t be accessible in the paid version.

  • Andrew

ok, thanks Andrew, your answers are very much appreciated.

i"ll look more into this IAP thingy. 

another question poped into my mind while checking the documents:

i see that in the documents they call the store.restore() at the end of the code, after they called the

transactionCallback function. meaning i dont realy do any use of the returned value of store.restore().

because whatever i needed to  is basicly done inside transactionCallback. (saving the status of ISPAID)

does the store.restore() is a build in (already writen) function or do i need to tell it what to do?

like if i want to make any use of the ISPAID value i just ask at the beginning what is the value and lock/unlock content as a result.

i dont see what use do i make of the store.restore().

sorry again for seem dumb about it, i just need to understand this whole process.

thanks again.

Hi there,

It sounds like you’re asking about whether, instead of having IAP in your free app to unlock additional features, you would instead direct the user to download a paid version.

  1. Actually, Apple does allow you to have both paid and free versions of the same app on the App Store.

  2. That should work.  You could probably also just link to the Google Play store URL and open it using system.openURL()

  3. Your app probably shouldn’t respond differently to a “purchased” versus a “restored” event.  Both events mean the user has (at some point) purchased the product.  The purpose of store.restore() is to handle situations when the user had deleted your app or their device was wiped, and then they reinstalled your app.  In that case, your saved data file will be gone, so your app will have no way of knowing what they previously purchased.  Fortunately, the App Store and Google Play keep a record of the transactions for what they call non-consumable (iOS) or managed (Google) products.  By calling store.restore(), they’ll return to you what the user previously purchased.

  4. If you make a button to purchase the full version, it’ll trigger store.purchase() if you set up your button handler to call store.purchase.  :-)  But yes, if you’re planning to use IAP to unlock additional content, then calling store.purchase({“product_id_here”}) is appropriate when someone taps the button.

Of course, keep in mind that if you direct a user to download a paid version, any progress or data they have in the free version won’t be accessible in the paid version.

  • Andrew

ok, thanks Andrew, your answers are very much appreciated.

i"ll look more into this IAP thingy. 

another question poped into my mind while checking the documents:

i see that in the documents they call the store.restore() at the end of the code, after they called the

transactionCallback function. meaning i dont realy do any use of the returned value of store.restore().

because whatever i needed to  is basicly done inside transactionCallback. (saving the status of ISPAID)

does the store.restore() is a build in (already writen) function or do i need to tell it what to do?

like if i want to make any use of the ISPAID value i just ask at the beginning what is the value and lock/unlock content as a result.

i dont see what use do i make of the store.restore().

sorry again for seem dumb about it, i just need to understand this whole process.

thanks again.