A Unity ID allows you to buy and/or subscribe to Unity products and services, shop in the Asset Store and participate
in the Unity community.
Discussion in 'Assets and Asset Store' started by Baroni, Aug 8, 2013.
Thanks, I've posted it here
I'm interested in your asset but I have one question. The shop I'm creating is a little complex that maybe non of your templates are fitting my needs. I have many subcategories in which some of them are actually purchasable items and they contain subcategories inside, and inside subcategories there are items to purchase.
For example: one of the main categories I have is "Characters". Inside, there are many characters. Player can buy these characters and also can select a character to view its subcategories: Clothes, Hairs ..etc. Inside Hairs for example, there are items to purchase that are specific to this character. And some of these items are shared between all the characters.
I have already implemented classes that manage all of the above. But I'm not sure how it is easy to adapt your template to meet my design. I can create my own template but I don't know if it's easy to apply the same functionalities as your template.
I appreciate your quick response, thanks.
Hi @mbrmj, thanks for your interest.
Our shop templates contain only one high-level category with many items inside as you might have seen, but this should not prevent you from using the asset. If the shop templates do not fit your needs, which would be the case here, they are all built with Unity UI after all - it should be easy for you to apply the same concepts to your own UI.
In SIS, item prefabs (for each product) are instantiated to a pre-defined group at runtime. This works best for a "Characters" category which always stays the same, or a category with items unique to a specific character (e.g. Char1_Clothes). For shared items between characters, you would combine all of them in a separate group (e.g. Clothes) and instantiate them manually (or let them be instantiated by SIS, but move them around in the UI to avoid garbage collection).
If you're already done with your data classes and have a "get all available products for this selection" method, I would just recommend instantiating the item prefabs manually - or not using the prefab part of Simple IAP System at all! There is no magic involved for this, both our ShopManager and IAPManager classes provide many public methods so you can gain access to either the products and item prefabs for the shop UI instantiation, or completely use your own shop UI and let SIS handle only the billing part.
Hello, I've got a very similar question to the one asked here: https://www.rebound-games.com/forum/topic/2258/paypal-iap-with-android-app
I'm trying to create an android-based app through which users can buy a physical item and have it delivered to them. The only solution I've seen for this so far is Shopify, and their monthly account charge is too much for this small project.
Have there been any updates since your answers in the link above, or is there another option that I've overlooked?
Hi @yusefkerr, unfortunately there is no option for physical products implemented currently. I will make a note of your feature request - even if it doesn't help you out right now, or in the future. Might I ask what kind of implementation are you looking for? e.g. a direct implementation with Stripe or PayPal?
I'm not 100% sure what you mean by a direct implementation. I basically want a page on my game's main menu where a user can purchase a fixed-price item of merchandise (say, a t-shirt), and enter their payment details and address, as if they were buying something from me through Paypal. I'd then need to receive a notification of payment with the delivery address, etc. I'd want to use something that was as secure as possible.
I was hoping that I'd be able to do this with Google Play, but physical goods aren't allowed, and I can't find much info on Google Pay.
My fall-back option is just to provide an in-app link to a web page, but I had hoped that I'd be able to do everything inside the app with a plugin.
Thanks for the reply. We are currently using mostly external plugins (such as Unity IAP or PlayFab) for billing on certain platforms. So by "direct implementation", I meant a way for billing outside that scope, maybe not even related to our existing billing solutions at all. This could be done via a self-written PayPal plugin. On purchase within the app, it would then open the user's default web-browser for checking and approving the PayPal transaction.
It is correct that App Stores (including iTunes and Google Play) do not allow selling physical goods using their native in-app billing systems. You will have to use an external billing provider for that (like PayPal).
As I wrote above, if I would add PayPal to Simple IAP System, the user would be redirected to the web browser (outside the app) as well. This is because you cannot ensure a safe connection to the PayPal servers within your app. The browser establishes a secure connection via SSL protocols, so it is much less likely for user accounts & passwords to get hacked by man in the middle attacks.
Hey, I posted this in the Discord channel, but also posting here since welcome message says you are not always active on there to help with support:
Hey guys, thinking of integrating Simple IAP System into my game.
I'm currently using Unity's IAP but it doesn't support Paypal, so this is the main reason I want to buy this asset.
The tutorial video clearly shows how to integrate Simple IAP System if you don’t have it already, but not how to integrate it if you already have Unity IAP enabled.
Also Unity IAP released a new version 2.2.2, does Simple IAP System use an older version, do I need to revert to 2.0.0--I have questions like these etc.
Would appreciate any advice on this topic, or if you can point me somewhere if it's been answered already, thanks so much.
And another question...This guide tells me I need to integrate playfab to have Paypal work...Really?? Correct me if I'm wrong. https://www.rebound-games.com/forum/topic/1992/guide-paypal
Hi @tms_dev, I see every message (also on the Discord), but am not available on weekends.
I am not quite sure what you mean by that. Having "Unity IAP enabled" is a requirement for Simple IAP System to work, if you would like to implement purchases for real money. However, it replaces any custom Unity IAP code you might have already, so you can get rid of that.
Unity IAP versions 2.0+ are the least stable versions I have seen in a long time. Looking at the Unity IAP section in this forum and the bugs reported there, I do not recommend using that at all. I am planning to make use of Unity IAP version 2.2.3 when it comes out in a week or so. At the moment, version 1.23.5 would still be a better choice.
This is correct. Without a server backend storing player purchases, users would only store their receipts locally. If they switch devices and are not able to login using a unique account, all their purchases would be lost, with nothing you could do to help them. PlayFab was a natural decision for covering that part. Could I ask what platform you are targeting and whether you already have a server or your own login system?
Thanks so much for getting back to me.
Yeah I assumed you would reply on Monday, no worries.
I think you misunderstood me, I think my explanation was confusing. Let me explain more clearly...
You have a video here that clearly explains how to integrate Simple IAP System(your asset) for people who don't already have Unity IAP setup. I already have Unity IAP Setup and working and the game is available on asset stores.
What I'm, asking is...For people who already have it Unity IAP, how can I integrate your asset without having any weird hiccups/error. For examples, you say in the video tutorial to get Simple IAP System asset, and then through your system setup Unity IAP, would I still have to do that if I already have it setup? Also you mentioned later that the version I am using is not stable...So would I have to remove Unity IAP completely and then follow your steps, would that be better? I'm just not very clear on the process, I would really like to avoid errors.
And what is the cleanest way to completely remove Unity IAP? Remove it from Plugins -> Unity Purchasing(delete this folder) and that's it?
I have a deadline so I would like to integrate your system this week with the 1.23.5 version(once the above question is answered), but once version 2.2.3 is created will there be any significant changes with Simple IAP System?
I also read in version 3.0.0(which will be added in January) they will combine the package and plugin. Will there be any significant changes with System IAP System for this version, or is this something you would have to research more when it comes out?
Yeah, that's a good question, sorry forgot to mention that before. So for now the game is only available for android and I am using Google Play Services for both login and saving their data. Currently I am validating if they bought the game without using receipts, instead through some personal game logic, but I would like to do both once Simple IAP System is installed.
Once I create for iPhones, which will be about 7 months down the road from now, most likely I will use something like PlayFab for iPhone users, but it doesn't make sense for me to do this and pay for this storage if I don't need it right now and can just save the receipts using Google Play Services Saved feature for free. Is there something I can change in your code to make this possible instead of using PlayFab?
Oh and I would like to confirm something here:
What do you mean by "own store"? You're saying if I upload my game to Google Play that I won't be able to integrate paypal to my game correct? I wonder if there is just a simple way to disable Paypal within Unity IAP because I can't find it.
Lastly, you mentioned Version 2.0.0 is not stable. If I wanted to import the older version 1.23.5, as you mentioned how can we do that since when you setup Unity IAP purchases in the Services tab and click import, doesn't it automatically setup the latest Unity IAP, not the older versions?
I'm assuming the one in the asset store: https://assetstore.unity.com/packages/add-ons/services/billing/unity-iap-68207
...and the one here should be the same version number, correct?
Sorry for all the questions. I'm still learning Unity IAP details, as I'm using the codeless version.
Maybe the easiest thing to solve all these issues is:
1. Remove all Unity IAP, please explain the cleanest way to do this.
2. Buy your asset and install cleanly with your video tutorial.
3. Find a way to disable paypal, please explain how. Since I think I read Google Play suspends your app if you are not purchasing with them, since they want their 30%.
Thanks so much for your help.
Wow, so many questions I'm replying to your latest points, but am trying to take your previous post into account.
The Unity IAP package downloaded via the PackageManager should be version 2.0.6. The Unity IAP package downloaded from the forum should be 1.23.5. Prior to importing that, just delete the "Plugins > Purchasing" folder in your project.
While Unity IAP 3.0.0 will not be a major change - they just combine their sources into one package to download - I am planning to add more events and some features regarding subscriptions for Unity IAP 2.2.3. If you are not targeting subscriptions, you should be good to go with the versions above.
The video tutorial is 4 years old and partly outdated, especially the setup. The documentation included in the asset describe the correct process - basically doing what I wrote in point 1, then opening our "Plugin Setup" window.
Correct, you cannot use PayPal for in-app purchases on mobile platforms because of their 30% share. PayPal would only be allowed for selling physical goods on these platforms. There is nothing to disable in Simple IAP System to begin with - it is not supported for Google Play or the Apple App Store currently.
This is our own implementation, not from Unity IAP. It only exists in our asset.
Bonus: I cannot go into much detail on this as I do not know what Unity IAP related data you are storing, but I assume that if you save purchases via Google Saved Games, you also need to tell Simple IAP System which products the user did purchase already. Because if you don't, since Simple IAP System manages its own local database (when not using PlayFab) all products will stay on "unpurchased" internally.
Thanks so much for the reply.
Ok I will delete "UnityPurchasing" in the Plugins folder, but what about "In App Purchasing" in Package Manager? Currently I have version 2.1.0, should I remove it from Package Manager, there is an option to "remove" through there. Is this necessary, or when I import 1.23.5 from the forum, it will just overwrite? I wouldn't want two versions issues etc.
Ok, that's good to know.
I just find it strange that one of my players was able to access Paypal when they chose to pay as an option. Strange since you say it's not available. It was available for them, but when they tried to pay, the payment wouldn't go through. That's what I meant when I said, I would like to hide/disable the option in the first place within Unity IAP, since I'm simply using the Codeless IAP button currently.
Yes I use Google Saved Games. There are only a few people who purchased the game since it's new and not promoted yet, so to solve this, I think the best thing to do is to refund them and in the update explain we have a new purchasing system. After that, everything should be stored correctly for new purchases.
Do you have some methods or something I can used for this? What do you mean?
Is this PlayerPrefs, PersistantData, or what? And will I have access to this data so I can transfer it to a saved file for storing it to the Cloud via Google Saved Games. I would prefer it not be saved to PlayerPrefs and PersistantData since purchases would be sensitive data and I would rather have control over it. The only things I have stored locally in their Persistant Data is encrypted. Can I just get the purchases through your system without it being stored locally on Player's System and save it to cloud?
Thank you for the clarification ^_^
These are separate, independent packages. Importing the Unity IAP package from the forum will do nothing to the PackageManager package. I ran tests against 1.23.5 with 2.0.6, I am not sure if 1.23.5 is compatible with 2.1.0. You will have to find out
Maybe your user meant that he was able to pay Google using PayPal? That would still work, of course. Only PayPal as an external payment system is forbidden. E.g. selling your app subscriptions on Ebay. PayPal (external) is definitely not part of Unity IAP.
Well if you refund them, it wouldn't matter. I mean if you have user purchases saved on Google Saved Games and provide a shop interface with Simple IAP System like in our sample scenes and list all products, some of them should be set to sold already, so the user is not able to buy it twice (which would not be harmful, but display an error).
Encryption is supported Simple IAP System as well, it's just ticking a checkbox to enable it = encrypted PlayerPrefs (see "encrypt" variable on the DBManager page). But you also have the choice of not saving anything locally (again, a different checkbox - see "memoryOnly" variable on the DBManager). Saving and uploading to the cloud would then be your responsibility.
Yes, you're right. I found out that they tried to pay via GooglePay -> Paypal account that's connected to their Google Account but it didn't work for them.
That's the thing, I didn't save their receipts. A mistake I made since it's my first time implementing Unity IAP. Instead, I change something in the code to prove that they made that purchase, but I think it would make more sense to save their receipts as well now that I understand how it all works better. So, in this case, I would have to refund them to fix this issue, unfortunately. I can't think of another way...Maybe see if the logic that shows they made the purchase was made before a certain date then count that as a full purchase...? Er, it's messy. Refunding might be the easiest way, as far as I can think of...
These methods are great, thank you https://www.rebound-games.com/docs/sis/DBManager.html#details
Ok that's great! Yeah I was going to save it to the cloud (Google Saved Games), not PlayerPrefs, since PlayerPrefs get removed when a person deletes the app on one phone but they might want to play on another.
Although if I click "memoryOnly", I can simply retrieve all the purchases via `GetAllPurchased` method, correct?
If so, then the rest will be simple for me since I'm already storing their data on the cloud.
And one last question I saw a feature you include is "Dynamic Shop Layout & Shop Templates", but it's not mandatory to use one of the layouts correct, because I already designed my own. Considering how many methods you provide, I think you are a person who implements flexibility in their assets but I just wanted to ask to make sure before I buy.
Thanks for all your help!
Simple IAP System provides a "restore" button. On iOS, users can press that button and enter their password to receive all purchases. On Android, the restore is initiated when uninstalling and reinstalling the app. Purchase data is then written to SIS' local database, in order to have previous purchases available. Each purchase also delivers a receipt (via Unity IAP), which you could then save to your cloud. Just something to remember.
All purchases that happen in that specific session. If you save purchases somewhere else (Google cloud), you will want to initialize Simple IAP System with the data you already have. Since it doesn't save anything on its own anymore.
Correct, the sample scenes are exactly that: samples. It is highly recommended to use your own graphics and layout, to match the look & feel of your app and increase conversion rates.
I bought the asset and will explore it now.
I registered on your website and just so you know it goes automatically to this page after registration. I went back and it looks like it was indeed registered though.
FYI some links are broken in the "About" section. Wish I could just send these to you directly through email or something.
I would also like to confirm since the plugin and packaging name is super confusing =/
UnityPurchasing in Plugins folder is set to 1.23.5
In App Purchasing packaging via PackageManager in Packages folder is set to 2.0.6
This is what you meant, correct? Please see screenshots for confirmation.
@tms_dev Since you're a SIS customer now (thanks for that!), please switch to our forum in case of further questions. Yes, the screenshots showing 1.23.5 and 2.0.6 seem to be right.
I posted some things in the forum about 8 hours ago, just wondering if you are able to respond since you said you're not available on weekends. Thanks.
You wrote at 8 pm... please do not post in multiple channels as I get email notifications for all of them.
Well it may have been 8pm for you, but for me I posted around early afternoon/late morning and waited all day for a reply. I guess we're in different time zones, are you in Europe?
Sure, sorry about multi-post.
Your asset is used in my project now for subscription way: AR Masker app.
Hello @Baroni, Im using your plugin in my project and I cant understand how the fund increase work. It seems that its necessary to call DBManager.IncreaseFunds but in your IAPListener script is not present anymore. Is it called directly in IAPManager?
Hi @newlife, when purchasing virtual currency, DBManager.IncreaseFunds is automatically called internally with the amount you specify in the IAP Settings editor. You only have to call this manually e.g. when collecting currency while playing in-game.
If you have any further support questions, please register on the dedicated support forum. Thanks!
Thanks for your reply @Baroni. Are the currency values in the DBManager encrypted? It seems not.
EDIT: sorry I checked better and it support encryption.
Another question: I noticed that DBManager uses Linq for mergedIDs.Union and obj.virtualPrice.Any. Is it possible to avoid using Linq by replacing this code with something else?
I do not track change requests here, please use the support forum instead.
I am happy to announce that Simple IAP System 2 was released on the Unity Asset Store today!
You can now sell virtual or physical goods using the native PayPal implementation, in addition to using a native billing system (such as Google Play)
Xsolla has been added as a new payment provider
The IAP Editor was fully replaced and moved to the Project Settings
You can now define products that grant other products as reward
Full consumption workflow added: products that have a usage count can be consumed immediately, or later. For example, buying one "health" during the game - immediately, or buying "health kits" in the shop for later use
Simplified example scenes
For the full changelog and upgrade notes, please refer to the changelog
Why an upgrade?
Simple IAP System was first released more than 7 years ago. Over that time, more features and billing platforms were added, requiring consistent updates and more support, while the asset price always stayed the same. Simple IAP System 2 is a major rewrite, which involved more than 3 months of work. As such, it was a natural decision to create an upgrade path for a flat compensation fee.
You will be able to upgrade from Simple IAP System 1 to Simple IAP System 2 for a one-time payment of $10 (50% of the price increase).
If you've bought Simple IAP System 1 within the last 90 days, the upgrade will be free for you.
You are not forced to update: Simple IAP System 1 received a final maintenance update supporting Unity IAP 3.x, so you can still continue using it in your projects. However, please note that Simple IAP System 1 will not receive further updates.
Although the update has been thoroughly tested, there could be minor issues due to the massive list of changes done. As always, please report them in the support forum. Thank you!
Hi @Baroni !
I have a question about the following platforms :
- Google Play
- Apple App Store
Does your asset provides the ability to request all the products that a specific player has bought on these platforms ?
For example, let's say that a player buy a specific skin on STEAM, can I later retrieve data from STEAM containing all products IDs that the player has bought ?
I would like to avoid tracking myself which product the player has bought and to just request STEAM, Google Play Store and Apple App Store for data about these.
Hi @Etitrane, thanks for your interest!
The ability to access the user's inventory is a base functionality provided on all stores that do server-side user inventory storage - which is done on all stores, except PayPal (it's not really a store, only a payment processor).
Simple IAP System keeps a local copy of the products purchased, retrieved from the stores, in the DBManager. You can simply call methods of this class to get information about purchases. Restoring purchases (e.g. when switching devices or logging in from a different device) is also supported on stores mentioned above.
Thanks @Baroni for the quick answer
So correct me if I'm wrong :
If a player buys a skin on a STEAM game, once the transaction is complete, the DBManager automatically stores the data about that transaction and will be able to tell me that the player owns the skin ( with a method such as GetAllPurchased() ).
But then, if the player decides to play from another computer, I will have to restore his purchase into the new local instance of the DBManager.
Which leads me to this question :
Is the restoring process fully managed by the asset ? Or do I have to work directly with these platforms APIs and then inject this data into the new local instance of the DBManager (with for example the AddPurchase() method) ?
Once again, thanks for your time and your help
Exactly, GetAllPurchased() would return the list of currently owned products, on Steam or any other platform your app is running on.
It is - the restore functionality follows best practice principles. E.g. on the App Store, user can press a "Restore Transactions" button to regain access to their purchases after switching phones (adding this button is also forced by Apple). On Android, restore is automatically processed on each app install. And because you were asking for Steam: here the restore process is also invoked on each app launch, directly feeding the products returned into the DBManager.
Amazing, looks like it will fit all my needs
One last question,
Is there a way to perform fake / dummy transactions just for connectivity testing purposes ? (with a "debug" attribute to enable / disable or some specific methods ?)
I know that platforms expose dummy / sandbox services to perform testing operations (such as the ISteamMicroTxnSandbox interface) and I would like to be sure that we can use them with your tool (or that it provides his own "fake transaction" feature).
Thanks for your help @Baroni
A sandbox environment is provided for all platforms and stores. Usually, this is enabled automatically if you enabled "Development Build" within Unity. As for the Steam integration, both the PlayFab and native Steam store implementation make use of Steamworks.NET. While there is a "sandbox" checkbox on PlayFab, I am not sure if the native implementation actually uses ISteamMicroTxnSandbox. However, you will definitely be able to test your purchases using your developer account (that's what I did too).
Ok, then I'm getting your asset and will be using on my project
Will probably ask you further questions on the customer dedicated forum in the upcoming weeks/monthes if needed.
Thanks @Baroni !
Recently, we get mail from google that requires us to update all the game to using Billing version 3
Is "Simple IAP System 2" already support that version yet?
both Simple IAP System 1 and 2 have support for Unity IAP 3.x which implements the Android billing library v3.
Our game uses a third-party GUI plugin, not Unity UI at all. Does it mean we need to implement all the related UI from scratch to integrate Simple IAP System 2? Is it doable?
With the help of SIS 2, is it possible to use both PayPal for physical merchandise purchase and Apple App Store subscription for another service purchase in an App?
Simple IAP System comes with shop example scenes and prefabs, which you could copy and modify with little effort to fit your game's design. They would also work either embedded or as a separate scene in your game. If you would like to use a different UI - the components included make use of Unity UI elements as well, so rewriting several scripts to use other UI variable types would be more effort.
Yes, the PayPal integration can be additive to a native payment solution.
I'm assuming the relevant source code is available so we can refer to it to integrate to the new UI, right?
Correct, the asset is delivered with full source code, no DLLs.
Hi looking at this solution with our game, ran into a problem with simple paypal storefront due to our game being on unity 2018.4.15f, will your solution work on this version?
Hi @DynastyoftheMagi, unfortunately the PayPal classes inherit of Unity IAP interfaces, whose most recent versions (3.x and 4.x) are not available for Unity 2018 anymore. That's why Unity 2019 is the minimum supported version.
Hi there @Baroni ! Just installed the latest versions of Unity IAP and SIS 2 on clean project. Got this bunch of errors:
P.S. Seems that it's impossible to use your support forum for now, right?
Hi @justtime, are you sure you've updated to the current version of SIS - 5.0.3? That version is compatible with the latest Unity IAP.
That's right, I'm going back to the Unity forum for support. Like in the old days
Seems that it's Unity Package manager bug, because in changelog it's 5.0.2, but here the screen form manager:
I installed SIS 2 from the Asset Store and problems went away. Thanks!
Hello, Baroni !!!
I am using Simple IAP 2 (the latest update) for implement purchasing in my Oculus Rift application. But when I am testing my app in the platform occurs an exception after succeed purchasing - " Cannot set currency to an empty or null string" and my app cannot get succeed purchase event for refresh product state. (But on the next app session the product state is set to bought state) I know it can be a problem in the unity IAP package. But can you help me to get around this problem ? For example I can implement function without using unity IUP package ?
@PhilatovMA_ thank you for posting here and including the log! In the OculusStore script at line 111, could you try replacing the part at the end:
Theoretically the values in there are getting sent to Unity Analytics by Unity IAP. It is not implemented for Oculus anyway, so it does not matter. Please report back if that helps!
The store classes are build on top of Unity IAP's interfaces, so removing it is not possible.
Yes !!!!! It is working now !!! Thank you !!!!!!!
@Baroni - apologies if this is the wrong place to post this, I believe your other forum has stopped new registrations?
I'm having some issues with receipt validation with Simple IAP. I'm using Playfab and I've followed your guide but I'm getting no feedback from Playfab and Apple keep rejecting my app for missing receipt validation.
Am I missing something? I've setup the Playfab account, imported the SDK assigned all the required elements in the PlayFabSharedSettings, and the PlayfabManager is in my scene (with validation only ticked) I'm just not getting anything from Playfab's end.