Search Unity

Simple In-App Purchase System (SIS) - Shop solution

Discussion in 'Assets and Asset Store' started by Baroni, Aug 8, 2013.

?

Which billing plugin are you using in combination with Simple IAP System?

  1. Unity IAP

    173 vote(s)
    86.5%
  2. Voxel Busters

    10 vote(s)
    5.0%
  3. Stans Assets

    13 vote(s)
    6.5%
  4. Prime31

    4 vote(s)
    2.0%
  1. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    I was about to buy your very nice plugin until I found out that Prime31 Storekit and NGUI are required. I have both but due to Prime31 support issues (I had a big fight whit Mike of Prime31 today) (But NGUI support is excellent). I will refuse to use Prime31's software and will move to http://u3dxt.com. Is there any chance you will support u3dxt in the future in addition to Prime31's Storekit?

    P.S. here is the post of my problems with Prime31 http://forum.unity3d.com/threads/205506-Prime31-Plugins-The-Good-and-the-Bad/page2?p=1464638 (it's at the very end of the thread.
     
  2. u3dxt

    u3dxt

    Joined:
    Jul 6, 2013
    Posts:
    317
    @TokyoDan Thanks!

    @Baroni The basic version of our IOS SDK contains a fully functional IAP package and it's completely free: https://www.assetstore.unity3d.com/#/content/11817

    The IAP package is feature equivalent to the iOS SDK Pro version, so if it works in the basic version it will also work for those who have the Pro version of our plugin. Unlike other plugins, our IAP package supports all the APIs that Apple provides. Please send me a PM if you would like to discuss integration. Or just try it out with the packaged example. :)
     
  3. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    @u3dxt. I LUV you! Especially after the treatment I got from the Prime31 guy. One thing that got me to buy your asset is the kindness you show to your customers on this forum. That's the way to go.

    And @Baroni…You've got to work with @u3dxt.
     
  4. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Thanks for chiming in, Dan and u3dxt. I won't comment on your issue with Prime31, all I can say is that our asset handles the whole process of in app purchases and the documentation even states how to create products in iTunes Connect, so usually you won't have to contact the billing plugin support, ever.

    The key point of SIS is its cross-platform functionality. Because of this and other time constraints, I'm not able to commit to an u3dxt (iOS) integration in the foreseeable future. Neatplug and Unibill support will arrive soon and should at least cover the mainstream, other billing plugins will require more demand for the probability for an inclusion in SIS.
     
  5. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    @Baroni Couldn't SIS just support the Storkit part of U3DXT? That is not "yet another payment processor" that you have to integrate. It is just an alternative to Prim31's Storekit plugin. You could probably do that with just a few modifications.

     
  6. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    We have to write an additional IAP Manager script for each plugin provider and modify some of the other scripts and even example scenes, because the initialization behavior differs between plugins. Also, with our own online receipt verification method, supporting some functionality of a billing plugin may require additional work.

    It's not about the initial implementation though. Updating an asset that supports 4 plugins is a whole different story, believe me. I am preparing the upcoming 2.0 release with 3 plugins (+NGUI) and it's not a funny thing to do. I simply can't support each and every plugin out there, sorry.
     
  7. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    @Baroni Thanks. I understand. I am just desperate to get away from Prime31's plugins. But please keep U3DXT in mind.
     
  8. mattSydney

    mattSydney

    Joined:
    Nov 10, 2011
    Posts:
    171
    Excellent asset. I just have a slight problem. I took the demo project settings in the IAP manager and changed all the in game content from items, armoury and custom to my own items. That worked fine, but after saving the project and re opening my own items had disappeared and the default ones had reappeared. Is there a way of making sure the items have been saved correctly?
     
  9. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Hey matt,

    thanks for using SIS. The IAP settings editor saves changes to the IAP manager prefab whenever it gets closed. If you close your project and left the IAP settings editor open, they are not saved to the prefab. Maybe I should add a save button to the editor... does this answer your question?

    Edit: This will be fixed in version 1.3. If the IAP settings window is open, saving the project will also save previous changes to the prefab.
     
    Last edited: Jan 7, 2014
  10. Geo-Ego

    Geo-Ego

    Joined:
    Sep 25, 2012
    Posts:
    12
    Hey, Baroni. I'm really enjoying your product, but I've run into a problem I hope you can help me solve.

    Using logcat, I can see that when the store opens, I'm getting a BillingNotSupported exception. This is precisely the error that IAPManager is throwing:
    Any idea what would cause that? Thanks so much.
     
  11. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Hi Geo.Ego,

    thanks for using SIS!

    The error you are experiencing probably relates to the Google Developer Key on the IAP Manager prefab. Could you check whether you've entered the correct one there (the key from your Google Developer Console).
     
  12. Geo-Ego

    Geo-Ego

    Joined:
    Sep 25, 2012
    Posts:
    12
    I blew that key away, re-copied it in, and I'm still getting that error. Here's exactly what happened:

    The store was working fine initially, but I had a consumable IAP as a managed product in the Google IAPs. I was able to purchase it once, but then it told me I already owned it after that. So I created a new non unmanaged IAP with a different ID, created a corresponding IAP in the manager, and attempted it again. Now, I get the error that I referred to previously.

    Also, the information is no longer being fetched from Google Play Store. However, when I hit the button to buy it, it does go to the Google Play Store, kicking back the message that I already own the item, even though I'm targeting the new, unmanaged object (it's the only one even active).

    I'm quite confused by this behavior. Thanks for getting back to me and helping me out with this.
     
  13. Geo-Ego

    Geo-Ego

    Joined:
    Sep 25, 2012
    Posts:
    12
    By the way, I did a bit more testing, and I'm not sure that it's going out to the Google Play Store and receiving error 7 from it. Logcat does show that it is attempting to purchase the consumable product with the correct ID, but IAPManager almost immediately returns the PurchaseFailed error.
     
  14. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Thanks for your description.

    Google Play's In App Billing V3 does not support unmanaged IAPs, so I'm not sure if that even <should> work with the Prime31 plugin. In any case, managed IAPs are the way to go. Maybe now the Google Play product query fails because it is trying to find an item that does not exist (the new unmanaged one). Could you please try it again with managed products.

    That's a quite interesting part for me. What exactly happened at this point or how can I reproduce this? For resetting non-consumed consumable products and testing purposes the IAPManager has a method named "DebugConsumeProducts()". You can put a call to this method in the ProductDataReceived method (after "prods = purchases") , then it will consume all products made by that user and you can test all products again.
     
  15. Geo-Ego

    Geo-Ego

    Joined:
    Sep 25, 2012
    Posts:
    12
    Okay, understood. So I changed the billing plugin back to use the original managed product I had created. It is now the only IAP that is activated. That didn't change anything; it still doesn't fetch the information and I still get the exception first thing upon entering the store scene.

    I built a version calling DebugConsumeProducts () in ProductDataReceived. It appears to have initially attempted to purchase all of the products (which is only one at this point), and then presumably restored the purchased. Now everything seems to be working properly.

    My question for you: I clearly don't want to call DebugConsumeProducts () in production; I also don't want the customer to need to call a restore manually. What is the best way to go about automatically restoring this IAP, since I know that I'll always want to allow repeat purchases?
     
  16. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    To be honest I'm a little bit confused. Does "changed the billing plugin back to use the original managed product" mean you now have one product in the IAP Settings editor - the managed product from the Google Play console? Also the IAP Manager prefab should be placed in the very first scene of your game, not in the store scene, what would mean to get the exception right at game launch...

    Do we still talk about the consumable product here? DebugConsumeProducts() does not purchase products or restores them, it tries to consume them, which then fires HandleSuccessfulPurchase() in the IAPListener (what could look like a restore). When products get consumed, they are removed from your Google Play cache and you can purchase them again. Typically the IAP Manager should handle this automatically for consumable products without the need to call DebugConsumeProducts(). Just to make sure, have you set the product type to consumable in the IAP Settings editor? Regarding your last sentence: There is no way to restore consumable purchases because they are gone after consumption, what allows your users to repurchase them.

    I hope I understood your issue, feel free send me a private message or email with screenshots if I didn't get you right.
     
  17. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    I know that IAP for iTunes App Store and Google Play are covered. But does any one have any idea of how one would go about setting up / or what services one would use for

    1. browser-based game IAPs?
    2. and native Mac and Windows games IAPs?
     
  18. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Our support thread for SIS isn't the best place for a discussion on this matter I'm afraid (btw, I don't know any).
     
  19. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    Thanks Baroni. I was just trying here on a lark because people with the same issue probably visit this thread.
     
  20. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Version 1.3 is available on the stores, featuring locked items. Locked items are not available for purchase at the beginning and your players will have to meet special conditions (e.g. reach level 2) in order to unlock them. Here's the full changelog:

    Features
    • IAPManager, IAPEditor: added the option to specify requirements for shop items to unlock them. The menu example scenes now have two additional virtual items which serve as a sample and need to be unlocked by the user
    • DBManager: along with the above changes, added isRequirementMet and IncrementPlayerData methods
    Fixes Changes
    • Project: IAP Manager prefab moved to Resources folder – it has to be there!
    • Scripts: added #if UnityEditor checks to compile on non-mobile platforms
    • Scenes: fixed button and scrollbar positioning issues in horizontal list tabs
    • Scenes: fixed clipped panel cut off in vertical menu example scene
    • IAPManager: if verifyOnStart is enabled, restoreTransactions on iOS will only verify every item once. For subscriptions only the latest entry will be used
    • IAPEditor: if open, saves changes to the IAP Manager prefab on project save
    • Project Settings: .Net2.0 requirement removed, .Net2.0 Subset works too
    • NGUI: updated to version 3.0.8+, little modifications to UIPanelStretch
    Upgrade Notes:
    If you want to keep your IAPManager prefabs and all items, unselect the IAPManager prefab in this package on import. Also, move your IAPManager prefab to the Resources folder (new restriction).

     
    Last edited: Feb 2, 2014
  21. imtrobin

    imtrobin

    Joined:
    Nov 30, 2009
    Posts:
    1,548
    Can you please send out to people who bought from you directly.
     
  22. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Your download link in our thank-you email is valid for all future updates and will always point to the latest version.
     
  23. imtrobin

    imtrobin

    Joined:
    Nov 30, 2009
    Posts:
    1,548
    I mean notification as well.
     
  24. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Email notifications are quite costly with our payment processor, but we'll have a forum on our website soon where you'll be able to subscribe to changelogs. Thanks!
     
  25. loyalpenguin

    loyalpenguin

    Joined:
    Mar 5, 2013
    Posts:
    16
    Hi, I recently bought this and am very impressed. I just had a question regarding the sample scenes. Is it possible to adjust these so that they work for portrait orientation games? Basically I'm trying to adjust the ListVertical scene because the IAP items are getting cut off on my iPhone and iPad.

    I know it has to do with the IAPItem template because when I broke it down inside the Hierarchy window I noticed that objects like the Background and Description all have fixed widths. Any ideas? Thanks.
     
  26. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Hi loyalpenguin,

    I'm glad you like it, thanks!

    If you would like to use portrait layouts, you would want to create new IAPItem prefabs which fit the new aspect ratio. You could duplicate the existing IAPItem prefab located under SIS > Prefabs > ListVertical, name it something like "IAPItemPortrait", then drag this duplicate in the scene and adjust the width (and/or position) of its NGUI widgets. Apply your changes to the prefab. Finally, open the IAP Settings editor and assign the new prefab to your groups.

    Thanks for the hint on portrait orientiation, I will likely add portrait mode scenes in a future version too. Let me know if you need further assistance.
     
  27. TWaanders

    TWaanders

    Joined:
    Mar 27, 2013
    Posts:
    46
    Hi Baroni,

    I recently purchased SIS and I am very happy with the asset. It is well structered and I have so far been able to figure everything out.

    One thing that I have some problems with is the following.

    To manage the game's stats I have a singletonscript running in the background. I would like to replace this with the databasesystem in your package, but I am not exactly sure how to do so.

    The manual does shine some light on this aspect, but as a beginning programmer I am not entirely sure how and where in this script I would introduce new variables.

    I know that I need to look at this part of the script:

    Could you give some short examples on how to declare custom variables and modifying/calling them?

    Thanks in advance!
     
  28. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Hi TWaanders,

    thank you for your kind words, I'd appreciate a review on the Asset Store if you have the time ;)

    There is an example on accessing custom data in section 4.5 of the documentation, let's take a look at it in more detail:
    Code (csharp):
    1. DBManager.SetPlayerData("score", new SimpleJSON.JSONData(2250));
    In this case, "score" is the entry (string) we want to modify, where 2250 (int) is the score the player has reached. SetPlayerData takes a universal JSONData variable, so if you want to create a new JSONData object from your scripts (no need to modify the DBManager), you would have to create a new SimpleJSON.JSONData object. By universal I mean that it doesn't matter what kind of variable you pass in JSONData, it will handle all primitive data types. For example this would work too:
    Code (csharp):
    1. DBManager.SetPlayerData("score", new SimpleJSON.JSONData("my score string")); //storing a string value
    2. DBManager.SetPlayerData("score", new SimpleJSON.JSONData(false)); //storing a boolean
    By calling SetPlayerData("score", ...), the JSON script will automatically look up this entry or create it in case it didn't exist yet. That means you don't have to declare new variables, this method will do it for you.
    Code (csharp):
    1. DBManager.SetPlayerData("newEntry", new SimpleJSON.JSONData(1000)); //newEntry didn't exist, but now it does
    If you want to get the value of "newEntry" out of the DBManager, call one of these:
    Code (csharp):
    1. int value = DBManager.GetPlayerData("newEntry").AsInt; //value will be 1000
    2. string value = DBManager.GetPlayerData("newEntry").Value; //value will be "1000"
    You will need to know what kind of data type you stored previously to retrieve the correct type, that's what the .AsInt is for. E.g. AsBool, AsFloat, etc. will convert it to the desired types, while .Value will deliver it as a string. Hope this clears things up :)
     
    Last edited: Feb 13, 2014
  29. TWaanders

    TWaanders

    Joined:
    Mar 27, 2013
    Posts:
    46

    Thanks, it does! I am however still not entirely sure how to treat the JSONdata in my app. Your instructions work fine and I am able to get the data from the database and store new data in the database. What is not entire clear to me is how I set the initial variables, with the default values. I know how to set them, thanks to your instructions, but if I understand correctly the database stores the data on the user's device, and as such it saves the data and continues on top of the existing values. I guess my question is; how do I set the default values in case no game progress has been made yet and there is nothing to draw from the database except for default values?

    I hope my question makes sense :)

    Thanks for the excellent support so far, I will make sure to write a good review in a couple of days (after I have gained some more experience).
     
  30. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    If you call DBManager.GetPlayerData("score").AsInt without setting it before, the default value will be initialized automatically and will return 0. The same goes for other data types, basically. If you're trying to get values without setting them, they will return the lowest/shortest possible value.

    Now, say you want to have a default score value of 100 when calling it the first time. This would require a one-time initialization in your scripts, which could be determined by an additional "init" boolean in the database - if init is false, we set the initial values, otherwise we leave them as they are. For example:

    Code (csharp):
    1. void Awake()
    2. {
    3.      if (DBManager.GetPlayerData("init").AsBool == false)
    4.      {
    5.           DBManager.SetPlayerData("score", new SimpleJSON.JSONData(100));
    6.           //other values that should be initialized on the first game launch
    7.           //...
    8.           //then we set the "init" value to true, to not execute this again, ever
    9.           DBManager.SetPlayerData("init", new SimpleJSON.JSONData(true));
    10.      }
    11. }
    Thanks for your clarification ;)
     
  31. TWaanders

    TWaanders

    Joined:
    Mar 27, 2013
    Posts:
    46
    Excellent! Makes perfect sense. Thanks for the ultra-fast reply!
     
  32. loyalpenguin

    loyalpenguin

    Joined:
    Mar 5, 2013
    Posts:
    16
    Baroni, thanks for the help on how to set up the screens for portrait. I was also running into an issue when adding my own virtual iaps inside the editor. Everytime I press "New Object" the editor freezes and error at the bottom appears:

    NullReferenceException: Object reference not set to an instance of an object IAPEditor.OnGUI()(at Assets/SIS/Editor/IAPEditor.cs:198)

    If I save the project the screen unfreezes and shows the new item. But when I tried setting up a Single Selection List (only one item selected at a time) inside the ListVerticalMenu I get the following error at runtime:

    NullReferenceException: Object reference not set to an instance of an object ShopManager.SetToSelected(.IAPItem item)(at Assets/SIS/Scripts/ShopManager.cs:261)

    Strange thing is that it shows the items in a list but won't allow me to scroll it. Also if I try to select an item it repeats the error in the console.

    Any ideas on what might be going on?
     
  33. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    The first error points to the real money IAPs on Android. It's confusing why that error would show up when you're adding virtual IAPs (on the "In Game Content" tab). It could help to delete the IAPs on Android, then re-create them and press the "Copy all from Android" button in the IOS tab (just to make sure).

    The second error relates to the IAP Listener component. Obviously you don't have an IAP Listener in the scene (it should be a child of the IAP Manager prefab), because the ShopManager can't fire the itemSelectedEvent to it.

    Maybe you could send me a few screenshots to info[at]rebound-games.com, so we could solve this together?
     
  34. loyalpenguin

    loyalpenguin

    Joined:
    Mar 5, 2013
    Posts:
    16
    Baroni I sent you an email with all the screenshots. Let me know if you need anything else. Thanks.
     
  35. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Quick announcement:

    Version 2.0 of our Simple In-App Purchase System will be ready this week and broadens supported plugins from 1 to 4 - there's also a free alternative included, so you don't necessarily have to pay for a billing plugin!

    Supported billing plugins will be:
    • Prime31 (Google Play Apple App Store)
    • Unibill (all Unibill-supported platforms)
    • NeatPlug (Google Play Apple App Store)
    • OpenIAB (Google Play Apple App Store, free)


    More information very soon...
     
  36. imtrobin

    imtrobin

    Joined:
    Nov 30, 2009
    Posts:
    1,548
    wow great :)
     
  37. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Version 2.0 has been released on the stores! It still requires NGUI, but now supports an arsenal of more than just awesome billing plugins to work with.




    Features
    Fixes Changes
    • Project: embedded all scripts in the “SIS” namespace
    • IAPListener: was disabled on the IAP Manager prefab, but should not
    • IAPListener: fixed NullReference when getting callback without ShopManager
    • IAPEditor: fixed potential NullReference when defining new IAP objects
    • IAPManager: removed workaround for restoreTransactions introduced in 1.3
    • Receipt verification: updated verify.php to work with new Apple responses
    • DBManager: added methods SaveReceipt, GetReceipt, SetFunds
    • DBManager: made the encryption key public
    • Scenes: ListVerticalMenu Armory scrolling fixed
    Upgrade Notes
    • Back up your project to avoid potential conflicts with the namespace and backup your DBManager encryption key
     
  38. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Our new website and dedicated support forum is online. If you would like to receive email notifications on product updates, please register in our forum and subscribe to the "Release Notes" topic.

    -- http://www.rebound-games.com/
     
  39. loyalpenguin

    loyalpenguin

    Joined:
    Mar 5, 2013
    Posts:
    16
    @Baroni

    I created a category for characters that I am selling. Basically I replaced the Group "Armory" by changing the name to "Characters". After that I added in my characters and everything works perfect in the shop.

    The only issue is when I tried to access the group using the GetAllSelected() method in the DBManager class to see which item is selected it said that No Key Was Found. This was the code I used:

    Dictionary<string, List<string>> selectedItems = DBManager.GetAllSelected();
    List<string> selectedCharacter = selectedItems["Characters"];

    Any ideas?
     
  40. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    I guess you are trying to access the group right after the game starts, without selecting a character beforehand.

    The "Characters" entry in the DBManager would be created when you're actually selecting a character, thus it does not exist the first time your app launches. If you would like to set a "default selection" on the first start, you could check if there is a selection by using GetAllSelected(). If the "Characters" key does not exist, call SetToSelected with the character id you would like to be selected by default.

    All further calls to GetAllSelected will return the "Characters" entry with the selected character id.
     
  41. loyalpenguin

    loyalpenguin

    Joined:
    Mar 5, 2013
    Posts:
    16
    That worked perfect. One more question. How do I make a copy of one of the prefabs you included in your templates? For example on the ListHorizontal Scene I have 3 scenes using that template, so I need to create a copy of the IAPItem prefab. The only problem is when I copy it, it keeps referencing the original prefab and won't let me modify the name.
     
  42. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Just duplicate (Ctrl + D) the IAPItem prefab in your project panel, so a new copy will be created named "IAPItem 1". If you want to use this prefab in your shop scene, open the IAP Settings editor and assign it to the desired IAP group. You will have to create separate groups for each prefab when using multiple prefabs. I'm not sure about the part where you mention "For example on the ListHorizontal Scene I have 3 scenes using that template" though, usually you have one shop scene and a limited amount of IAP groups.
     
  43. loyalpenguin

    loyalpenguin

    Joined:
    Mar 5, 2013
    Posts:
    16
    Interesting. If you copy the file in the finder, it somehow creates a reference to the original and doesn't let you modify it. I don't think it necessarily has to do with your plugin. Thanks for the tip, it worked.

    My shop is pretty much done the only thing left is to modify the icons for the shop. From what I can see the store is calling sprites from within an atlas based on their name. How do I add my own sprites into the atlas so they show up in the shop?
     
  44. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    You would do that with NGUI's Atlas Maker, under NGUI > Open > Atlas Maker. You're right about the naming convention, each item icon looks for a texture with its title (not id) in the atlas.
     
  45. MattyMatt

    MattyMatt

    Joined:
    Oct 7, 2011
    Posts:
    21
    If I am using uniBill as my payment platform for ios is it important that I fill out the UniBill Inventory if I have the SIS settings filled out? I have everything "virtual" working great. However, when testing, UniBIller is reporting that there are no products to get. It is also failing with CRITICAL_ERROR from the get go and I also get a debug that UniBill setup is not completing. I'm trying to figure out the difference between the UniBill issues versus SIS issues. Should I still do all of the UniBIll "stuff" like initialize it and everything or is SIS taking care of everything?
     
  46. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Hi MattyMatt,

    you have to create your real money IAPs in Unibill's inventory editor as usual. Also, set up your Google developer key or iOS app number there and save the inventory. After that you can import it in SIS by using the "Import Unibill Items" button.

    For virtual money items and virtual currency you would have to specify these in our IAP Settings editor, as we manage our own database file. At runtime, SIS takes care of the rest and will handle everything with Unibill for you.
     
  47. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Here's a quick tutorial for Simple IAP System with OpenIAB, from importing to deployment and testing. Unibill and other tutorials will follow soon.

    [video=youtube_share;G8dSQzTLWDo]http://youtu.be/G8dSQzTLWDo
     
  48. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Latest Version: 2.0.1

    Fixes Changes
    - fixed compile errors on Windows Phone 8 related to Database obfuscation
    - WP8 obfuscation key requires 16 characters, iOS/Android stays at 8
    - obfuscation on other platforms than WP8/iOS/Android defaults to byte[]
     
  49. uniphonic

    uniphonic

    Joined:
    Jun 24, 2012
    Posts:
    130
    I just purchased this asset, and it looks like it's awesome! I love that you're supporting OpenIAB, which I was planning to use before I found Simple IAP System. One thing I really like about OpenIAB is that it supports other Android app stores, like Amazon and Samsung. Can you confirm if Simple IAP System supports these alternative Android app stores as well?

    Thanks!
    Jacob
     
  50. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,262
    Hi Jacob,

    thank you for your feedback! I haven't tested OpenIAB in conjunction with app stores other than Google Play and iOS yet, that's why they are not natively integrated in the current version. It is very easy to switch the active Android store in our IAPManager though, and the OpenIAB team made a great job on cross-platform support. To do that, you have to add the new store at line 162 in IAPManager.cs, like so:

    Code (csharp):
    1.  opt.storeKeys = new Dictionary<string, string>
    2. {
    3.     {OpenIAB_Android.STORE_GOOGLE, googleStoreKey},
    4.         {OpenIAB_Android.STORE_AMAZON, "Your Amazon Key"},
    5.         {OpenIAB_Android.STORE_SAMSUNG, "Your Samsung Key"}
    6. };
    Before building the apk, select the current store below (currentStore = OpenIAB_Android. ...). If necessary, open the IAP Settings editor to adjust your product ids and you're ready to go. I'd like to make this integration more streamlined in one of the upcoming versions. Please let me know if this works for you.