Search Unity

Simple In-App Purchase System (SIS) for SOOMLA

Discussion in 'Assets and Asset Store' started by Baroni, Jan 8, 2015.

  1. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Please note that Simple IAP System for SOOMLA has been deprecated on the Unity Asset Store. Over the past year, we've had a great business relationship with the guys at SOOMLA, along with an agreement on this asset which has been mutually cancelled few weeks ago. As a separate version of our main Simple IAP System asset, this adaptation did not fully meet my expectations when it comes to market potential on the Asset Store. This is why I've decided to focus my efforts and resources on our main Simple IAP System asset.

    Simple IAP System for SOOMLA is not removed or deleted - existing customers who have already purchased or downloaded the package will still be able to download it. As always, I will also keep supporting it by answering any inquiries throughout the year and possibly even further. For those of you who would like to hop on the Unity IAP train instead, I've created an upgrade path from Simple IAP System for SOOMLA to our main Simple IAP System asset on the Unity Asset Store. Thank you for your understanding.

    ------

    Simple IAP System for SOOMLA (SIS) provides in-app purchase management right within Unity. Create products or complete shops in minutes by using an intuitive editor window! SIS handles all the different purchase callbacks technically and visually, while the design and shop templates included are fully customizable. By using SOOMLA Store, extending it with unlockable product logic and allowing to update IAP data remotely, it offers the full range of professional in-app purchase techniques. The integration with SOOMLA GROW ensures that you immediately know how your users are acting in your game, customer conversion rates and how your app performs compared to industry benchmarks.

    As you may know from our other products, we really put emphasis on the ease of use of our assets. If you want to get going with in-app purchases right away, you can just start with one of the shop templates, set up the IAP Settings and integrate purchased products in your game logic. That’s it! I appreciate any feedback or comments and will be happy to answer any questions you may have!

    SIS features:
    • Unity 4.6 uGUI integration
    • IAP Editor for creating IAPs without coding
    • Dynamic Shop Layout & Shop Templates
    • Locked IAPs based on user progress
    • Localization from the App Stores (online)
    • Localization using Smart Localization (offline)
    • Adjust IAP data without updating your app
    • iOS App Store, Google Play & Amazon support
    SOOMLA provides:
    • Store Economy Model: real money & virtual currency purchases, consumable and non-consumable products and equippable or upgradable products or even product packs are supported
    • Storage: encrypted on-device database for saving your app data in a secure way
    • Game progression framework: users can earn rewards by completing missions in levels, unlock new worlds and reach certain scores (optional)
    • Social module: perform actions on popular social networks and reward your users (optional)
    • GROW: a community-driven analytics dashboard, where developers can use smart metrics to compare their game's performance to benchmarks of other games!
    Please visit our product page for more in depth information.​

    Docs:

    YouTube:
    Get it here:






     
    Last edited: May 1, 2016
  2. potkpot

    potkpot

    Joined:
    Mar 8, 2013
    Posts:
    17
    Hi.
    Really nice asset:)

    I buy SIS for SOOMLA today and really want to understand some in your documentation

    it means if i have parent Hand and want to change skin with prefabs objects Glowe1, Glowe2, Glowe3 i'll set Glowe1 as prefab with parent Hand in IAP settings inspector etc., and prefabs will changing in game scene after i set one of them in IAP menu scene?
     
  3. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Hi potkpot, thanks for the comment!

    The Shop Manager has nothing to do with your game logic. Prefabs and parents in the IAP Settings editor are used for creating your in-app purchase items, like these: Image.

    For example if you want to change your character in-game, you have to check what the user has bought or selected, and instantiate your character parts accordingly. Something along the lines of:
    Code (csharp):
    1. //when the game starts
    2. if(StoreInventory.GetItemBalance("Helmet1") > 0)) //user purchased Helmet1
    3. {
    4.     //instantiate your prefab for this item and attach it to the character
    5. }
    You can also do this by using StoreInventory.IsVirtualGoodEquipped("Helmet1"), which would check whether the user actually equipped Helmet1.
     
  4. potkpot

    potkpot

    Joined:
    Mar 8, 2013
    Posts:
    17
    Thanks, Baroni

    When i setup with your documentation i took some problems.

    After all points of manual i set demo scenes and
    - Scenes can work only after scene "AllSelection"
    - Deafult coins in IAP settings set to 2000, after play on player or device 0 coins
    - All items can equip without buying

    Errors in console




    As i see problem is initialize of soomla. But i didnt try cause
     
  5. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Hi again,

    let's go over this one by one. Did you put the CoreEvents & StoreEvents prefabs from SOOMLA in the AllSelection scene (step 4 in the documentation)?
     
  6. potkpot

    potkpot

    Joined:
    Mar 8, 2013
    Posts:
    17
    THANKS! All is work perfect!
     
    Baroni likes this.
  7. potkpot

    potkpot

    Joined:
    Mar 8, 2013
    Posts:
    17
    I cant find in manager possibility to create 2 or more groups with auto switchoff checkboxes on one screen, like weapons in demo scenes. How can i get it?
     
  8. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    @potkpot Auto switch off checkboxes? In the weapons example, these products are defined as "Equippable" with the "Specific Setting" set to "Category" in the IAP Settings editor. IAPItem prefabs for this type of product have the "Select Button" assigned. See page 5 in the documentation for more details about different product types. If you want to share the "auto switchoff" functionality over more than one group, they have to have the same category name.
     
  9. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Last edited: Feb 7, 2015
  10. potkpot

    potkpot

    Joined:
    Mar 8, 2013
    Posts:
    17
    @Baroni Maybe some mistakes on my project but i have no changes in player after setting anotheranother products to "category" in IAP manager. Only in weapons products from your demo works well.
     
  11. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Do you use one of the "_EquipCategory" / "_EquipLocal" prefabs and are your products actually in the same category? If that doesn't solve it, please post some screenshots to illustrate the problem better.
     
  12. potkpot

    potkpot

    Joined:
    Mar 8, 2013
    Posts:
    17
    If IAP redactor opened without playing options to change prefabs is disabled. It can change only if scene is on play. After stop scene prefabs changes to default
     
  13. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    I'm not sure what you mean by "redactor". You have to open the IAP Settings editor in your shop scene and change the prefab/parent references there (in the IAP Settings editor).
     
  14. OMAXLIVE3

    OMAXLIVE3

    Joined:
    Oct 31, 2014
    Posts:
    8
    Hi Baroni,
    What is the difference between this asset from unity store and the one from github?
     
  15. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Hi @OMAXLIVE3,
    this asset extends SOOMLA's Store plugin with a shop system and allows setting up in-app purchases without coding (see the feature list and screenshots in the first post for a full overview). Basically it makes handling in-app purchases in Unity a whole lot easier instead of creating it from the ground up.
     
    OMAXLIVE3 likes this.
  16. OMAXLIVE3

    OMAXLIVE3

    Joined:
    Oct 31, 2014
    Posts:
    8
    Thanks for clarifying @Baroni ,
    I think it helps so much but I'm not sure if would be good for me, I will explain you my case, right now I have the option for changing clothes of the player, for example shoes, shirt etc.. it's implemented with SQLite, so I save what the player is wearing. The idea is to have a list for each category and for example when I tap one Product/shirt, change the player prefab to that shirt selected in real time and then press to buy if needed "I'm already doing that with my own list. I just need to detect when a Product was pressed from the Simple IAP System for SOOMLA plugin to make the change".

    Do you think it's possible?
     
  17. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Simple IAP System already saves current purchases and selections locally on the device, so you don't have to save that remotely. You can then query the selections via IAPManager.GetAllEquipped and instantiate the correct item in your game according to that. The example scenes have a sample for setting up selectable products: image.
     
  18. potkpot

    potkpot

    Joined:
    Mar 8, 2013
    Posts:
    17
    Thanks for your fast feedback.

    How can i initialize this in game scene?
    Do I need include to scene ShopManager or same prefams?

    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using SIS;
    4. using Soomla;
    5. public class Equip : MonoBehaviour {
    6.  
    7.     public GameObject BMP1;
    8.     public GameObject BMP2;
    9.     public GameObject BMP3;
    10.     public GameObject BMP4;
    11.  
    12.       void Start () {
    13.         BMP1.gameObject.SetActive(true);
    14.         BMP2.gameObject.SetActive(false);
    15.         BMP3.gameObject.SetActive(false);
    16.         BMP4.gameObject.SetActive(false);
    17.     }
    18.  
    19.     void Update(){
    20.         if(StoreInventory.IsVirtualGoodEquipped("BMP1") > 0){
    21.  
    22.             killAll();
    23.             BMP1.gameObject.SetActive(true);
    24.         }
    25.  
    26.         if(StoreInventory.IsVirtualGoodEquipped("BMP2") > 0){
    27.  
    28.             killAll();
    29.             BMP2.gameObject.SetActive(true);
    30.         }
    31.  
    32.         if(StoreInventory.IsVirtualGoodEquipped("BMP3") > 0){
    33.  
    34.             killAll();
    35.             BMP3.gameObject.SetActive(true);
    36.         }
    37.         if(StoreInventory.IsVirtualGoodEquipped("BMP4") > 0){
    38.  
    39.             killAll();
    40.             BMP4.gameObject.SetActive(true);
    41.         }
    42.     }
    43.  
    44.     void killAll(){
    45.         BMP1.gameObject.SetActive(false);
    46.         BMP2.gameObject.SetActive(false);
    47.         BMP3.gameObject.SetActive(false);
    48.         BMP4.gameObject.SetActive(false);
    49.     }
    50. }
    Now i have error with this sample code

     
  19. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    @potkpot
    StoreInventory is in the Soomla.Store namespace, not just Soomla. It'll work with "using Soomla.Store;". I wouldn't call that in every frame though, because right now you are disabling and enabling your gameobjects at the same time.
     
  20. potkpot

    potkpot

    Joined:
    Mar 8, 2013
    Posts:
    17
    Great! Works well. Thank you, Baroni

    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using SIS;
    4. using Soomla;
    5. using Soomla.Store;
    6. public class Equip : MonoBehaviour {
    7.  
    8.     public GameObject BMP1;
    9.     public GameObject BMP2;
    10.     public GameObject BMP3;
    11.     public GameObject BMP4;
    12.  
    13.     // Use this for initialization
    14.  
    15.  
    16.     // Update is called once per frame
    17.     void Start(){
    18.         if(StoreInventory.IsVirtualGoodEquipped("BMP1")){
    19.  
    20.             killAll();
    21.             BMP1.gameObject.SetActive(true);
    22.         }
    23.  
    24.         if(StoreInventory.IsVirtualGoodEquipped("BMP2")){
    25.  
    26.             killAll();
    27.             BMP2.gameObject.SetActive(true);
    28.         }
    29.  
    30.         if(StoreInventory.IsVirtualGoodEquipped("BMP3")){
    31.  
    32.             killAll();
    33.             BMP3.gameObject.SetActive(true);
    34.         }
    35.         if(StoreInventory.IsVirtualGoodEquipped("BMP4")){
    36.  
    37.             killAll();
    38.             BMP4.gameObject.SetActive(true);
    39.         }
    40.     }
    41.  
    42.     void killAll(){
    43.         BMP1.gameObject.SetActive(false);
    44.         BMP2.gameObject.SetActive(false);
    45.         BMP3.gameObject.SetActive(false);
    46.         BMP4.gameObject.SetActive(false);
    47.     }
    48. }
     
    gurdotan and Baroni like this.
  21. Soy13

    Soy13

    Joined:
    Oct 28, 2013
    Posts:
    2
    Just got my pack last night, works perfect. First time I imported him was a mess, PROBLEM=> was the building environment in Android Setup.

    Just pointing this for nubs like me, if you import the pack and give you errors in the websmthing folder, you should change the app to PC/Mac environment in teh build settings of Unity.

    That's all, thank you for this pack Baroni, save me a lot of time (I'll rate after a few more tries, but for me is an 5 start extension.).

    Peace.
     
    Baroni likes this.
  22. Rodrigo S

    Rodrigo S

    Joined:
    Jan 12, 2015
    Posts:
    12
    Hi.
    First of all, thank you for making this plugin, and specially for making it affordable :), a real bargain in fact. Before buying this i had no clue on how to implement IAP on my game, now there is a light at the end of the tunnel :D.
    I have a couple of questions , first i notice that the "IAP Manager" prefab comes with both scrips attached disabled by default


    I activate it manually before entering Play Mode , otherwise the store does not work and throws an error. but i'm not sure if this is the correct approach.
    Another issue that i have is that although the store works well inside of Unity, after enabling those scripts, it does not work on the android device after the build.
    What am I doing wrong?
     
  23. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Hi Rodrigo, thanks for the kind words!
    Actually both scripts should be enabled by default and I'll re-check it in my package. You can just search for the IAPManager prefab in your project and enable them there too.

    There's no ultimate answer to this question :) Please check the FAQ section in the documentation for common mistakes and also the device log for suspicious messages, then I'll be able to help you out further.
     
  24. Rodrigo S

    Rodrigo S

    Joined:
    Jan 12, 2015
    Posts:
    12
    It only throws these warnings, but it seems unrelated...

    I have been through the documentation which has helped with other errors, but i can't find anything related to this...
     
  25. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    @Rodrigo S Yeah those are not related to our asset. What I meant is the log directly from your Android device, using adb logcat (filtering specifically for Unity messages can be done by entering: adb logcat -s Unity)
     
  26. Rodrigo S

    Rodrigo S

    Joined:
    Jan 12, 2015
    Posts:
    12
    Ok, had no idea what a logcat was, thanks for that :D,
    It throws a bunch of NullReferenceException's , I have no idea why.
    Here's what it says;

    Microsoft Windows XP [Versão 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    E:\Documents and Settings\Administrador\AppData\Local\Android\sdk\platform-tools
    >adb logcat -s Unity
    --------- beginning of /dev/log/system
    --------- beginning of /dev/log/main
    D/Unity (26274): GL_EXT_debug_marker GL_OES_texture_npot GL_OES_compressed_ETC
    1_RGB8_texture GL_OES_standard_derivatives GL_OES_EGL_image GL_OES_depth24 GL_AR
    M_rgba8 GL_ARM_mali_shader_binary GL_OES_depth_texture GL_OES_packed_depth_stenc
    il GL_EXT_texture_format_BGRA8888 GL_EXT_blend_minmax GL_OES_EGL_image_external
    GL_OES_EGL_sync GL_OES_rgb8_rgba8 GL_EXT_multisampled_render_to_texture GL_EXT_d
    iscard_framebuffer GL_OES_get_program_binary GL_ARM_mali_program_binary GL_EXT_s
    hader_texture_lod GL_EXT_robustness
    I/Unity (26274): NullReferenceException: Object reference not set to an instan
    ce of an object
    I/Unity (26274): at Soomla.Store.StoreInventory.GetItemBalance (System.Strin
    g itemId) [0x00000] in <filename unknown>:0
    I/Unity (26274): at UpdateFunds.OnEnable () [0x00000] in <filename unknown>:
    0
    I/Unity (26274):
    I/Unity (26274): (Filename: Line: -1)
    I/Unity (26274):
    I/Unity (26274): NullReferenceException: Object reference not set to an instan
    ce of an object
    I/Unity (26274): at Soomla.Store.StoreInventory.GetItemBalance (System.Strin
    g itemId) [0x00000] in <filename unknown>:0
    I/Unity (26274): at SIS.IAPManager.GetAllPurchased () [0x00000] in <filename
    unknown>:0
    I/Unity (26274): at SIS.ShopManager.SetItemState () [0x00000] in <filename u
    nknown>:0
    I/Unity (26274): at SIS.ShopManager.Init () [0x00000] in <filename unknown>:
    0
    I/Unity (26274): at SIS.IAPManager.OnLevelWasLoaded (Int32 level) [0x00000]
    in <filename unknown>:0
    I/Unity (26274):
    I/Unity (26274): (Filename: Line: -1)
    I/Unity (26274):
    I/Unity (26274): VirtualItemNotFoundException: Virtual item was not found when
    searching with itemId=pistol
    I/Unity (26274): at Soomla.Store.StoreInfo.GetItemByItemId (System.String it
    emId) [0x00000] in <filename unknown>:0
    I/Unity (26274): at Soomla.Store.StoreInventory.BuyItem (System.String itemI
    d, System.String payload) [0x00000] in <filename unknown>:0
    I/Unity (26274): at Soomla.Store.StoreInventory.BuyItem (System.String itemI
    d) [0x00000] in <filename unknown>:0
    I/Unity (26274): at SIS.IAPManager.PurchaseProduct (System.String productId)
    [0x00000] in <filename unknown>:0
    I/Unity (26274): at SIS.IAPItem.Purchase () [0x00000] in <filename unknown>:
    0
    I/Unity (26274): at UnityEngine.Events.InvokableCall.Invoke (System.Object[]
    args) [0x00000] in <filename unknown>:0
    I/Unity (26274): at UnityEngine.Events.InvokableCallList.Invoke (System.Obje
    ct[] parameters) [0x00000] in <filename unknown>:0
    I/Unity (26274): at UnityEngine.Events.UnityEventBase.Invoke (System.Object[
    ] parameters) [0x00000] in <filename unknown>:0
    I/Unity (26274): at UnityEngine.Events.UnityEvent.Invoke () [0x00000] in <fi
    lename unknown>:0
    I/Unity (26274): at UnityEngine.UI.Button.Press () [0x000
    I/Unity (26274): VirtualItemNotFoundException: Virtual item was not found when
    searching with itemId=coins
    I/Unity (26274): at Soomla.Store.StoreInfo.GetItemByItemId (System.String it
    emId) [0x00000] in <filename unknown>:0
    I/Unity (26274): at Soomla.Store.StoreInventory.BuyItem (System.String itemI
    d, System.String payload) [0x00000] in <filename unknown>:0
    I/Unity (26274): at Soomla.Store.StoreInventory.BuyItem (System.String itemI
    d) [0x00000] in <filename unknown>:0
    I/Unity (26274): at SIS.IAPManager.PurchaseProduct (System.String productId)
    [0x00000] in <filename unknown>:0
    I/Unity (26274): at SIS.IAPItem.Purchase () [0x00000] in <filename unknown>:
    0
    I/Unity (26274): at UnityEngine.Events.InvokableCall.Invoke (System.Object[]
    args) [0x00000] in <filename unknown>:0
    I/Unity (26274): at UnityEngine.Events.InvokableCallList.Invoke (System.Obje
    ct[] parameters) [0x00000] in <filename unknown>:0
    I/Unity (26274): at UnityEngine.Events.UnityEventBase.Invoke (System.Object[
    ] parameters) [0x00000] in <filename unknown>:0
    I/Unity (26274): at UnityEngine.Events.UnityEvent.Invoke () [0x00000] in <fi
    lename unknown>:0
    I/Unity (26274): at UnityEngine.UI.Button.Press () [0x0000
    I/Unity (26274): NullReferenceException: Object reference not set to an instan
    ce of an object
    I/Unity (26274): at Soomla.Store.StoreInventory.GetItemBalance (System.Strin
    g itemId) [0x00000] in <filename unknown>:0
    I/Unity (26274): at SIS.IAPManager.GetAllPurchased () [0x00000] in <filename
    unknown>:0
    I/Unity (26274): at SIS.ShopManager.SetItemState () [0x00000] in <filename u
    nknown>:0
    I/Unity (26274): at SIS.ShopManager.Init () [0x00000] in <filename unknown>:
    0
    I/Unity (26274): at SIS.IAPManager.OnLevelWasLoaded (Int32 level) [0x00000]
    in <filename unknown>:0
    I/Unity (26274):
    I/Unity (26274): (Filename: Line: -1)
    I/Unity (26274):
    I/Unity (26274): VirtualItemNotFoundException: Virtual item was not found when
    searching with itemId=coins
    I/Unity (26274): at Soomla.Store.StoreInfo.GetItemByItemId (System.String it
    emId) [0x00000] in <filename unknown>:0
    I/Unity (26274): at Soomla.Store.StoreInventory.BuyItem (System.String itemI
    d, System.String payload) [0x00000] in <filename unknown>:0
    I/Unity (26274): at Soomla.Store.StoreInventory.BuyItem (System.String itemI
    d) [0x00000] in <filename unknown>:0
    I/Unity (26274): at SIS.IAPManager.PurchaseProduct (System.String productId)
    [0x00000] in <filename unknown>:0
    I/Unity (26274): at SIS.IAPItem.Purchase () [0x00000] in <filename unknown>:
    0
    I/Unity (26274): at UnityEngine.Events.InvokableCall.Invoke (System.Object[]
    args) [0x00000] in <filename unknown>:0
    I/Unity (26274): at UnityEngine.Events.InvokableCallList.Invoke (System.Obje
    ct[] parameters) [0x00000] in <filename unknown>:0
    I/Unity (26274): at UnityEngine.Events.UnityEventBase.Invoke (System.Object[
    ] parameters) [0x00000] in <filename unknown>:0
    I/Unity (26274): at UnityEngine.Events.UnityEvent.Invoke () [0x00000] in <fi
    lename unknown>:0
    I/Unity (26274): at UnityEngine.UI.Button.Press () [0x0000
     
  27. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Thanks for that, ok first off it seems like it can't find your Store instance. Did you put the CoreEvents & StoreEvents prefabs from SOOMLA in the first scene too, next to the IAP Manager prefab (and start your game from this scene)?
     
  28. Rodrigo S

    Rodrigo S

    Joined:
    Jan 12, 2015
    Posts:
    12
    Yes I did do both, otherwise it wouldn't even work in unity, those were my first mistakes, i got that sorted through the documentation, :),

    I think the issue is not directly related to your asset, because i have been having this problem for a week now, while trying to implement soomla store without Simple IAP system, I can get it to work in unity but not on the android device. The only exception was the MuffinRush example they provide, that one i was able to get it to work on android... but i couldn't understand it well enough to make it work in my project...
     
    Last edited: Mar 26, 2015
  29. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Hmm I'm in the dark here. Could you please zip up the project and send it to my mail, this will be faster than me guessing potential errors.
     
  30. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Do not share the project in public... please remove the link immediately.
     
  31. Rodrigo S

    Rodrigo S

    Joined:
    Jan 12, 2015
    Posts:
    12
  32. Rodrigo S

    Rodrigo S

    Joined:
    Jan 12, 2015
    Posts:
    12
  33. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    The message is missing in your log, but you didn't set the Google Store key in SOOMLA's settings (where it says "YOUR GOOGLE PLAY PUBLIC KEY"). Your app has to be live and published as an alpha/beta build on Google Play too.
     
  34. Rodrigo S

    Rodrigo S

    Joined:
    Jan 12, 2015
    Posts:
    12
    ok thanks, so even for the in game currency to work, a google key must be set?
     
  35. Rodrigo S

    Rodrigo S

    Joined:
    Jan 12, 2015
    Posts:
    12
    the reason im asking is because at this point i was thinking of implementing only in game currency, no real money,
     
  36. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    You must set "something" for the Google Store key. Otherwise SOOMLA will detect that you didn't change it and cancel the initialization.
     
  37. Rodrigo S

    Rodrigo S

    Joined:
    Jan 12, 2015
    Posts:
    12
    Thank so much for your help, cant believe i was stuck in this for days and the answers was this simple:D
    It works great now!
    You're awesome :D
    And sorry again for posting the link in public, wasn't thinking:rolleyes:, i also removed it from mediafire.
    thanks again!
     
    Baroni likes this.
  38. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    Version 1.1

    There is now a demo game with in-app purchases included, that showcases earning coins and equipping different items (characters) which effect the game. You can see a short clip by clicking on the image:

     
    Rodrigo S likes this.
  39. PrisonerOfLies

    PrisonerOfLies

    Joined:
    Dec 6, 2013
    Posts:
    105
    i am using latest version of soomla and SIS together with UnityAds and Unity Analytics in my project and I cant build to android.

    CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
    D:\Program Files\Java\lib\jdk1.8.0_11\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="D:/Downloads/adt-bundle-windows-x86_64-20140702/sdk\tools" -Dfile.encoding=UTF8 -jar "C:/Program Files/Unity/Editor/Data/BuildTargetTools/AndroidPlayer\sdktools.jar" -

    stderr[

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/soomla/rewards/VirtualItemReward;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/android/vending/billing/IInAppBillingService$Stub$Proxy;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/soomla/AndroidBus$1;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/squareup/otto/AnnotatedHandlerFinder;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/soomla/unity/StoreEventHandler;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/soomla/core/unity/SoomlaEventHandler;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)
    6 errors; aborting
    ]
    stdout[
    processing archive bin\classes.jar...
    processing com/unity3d/player/a$1.class...
    processing com/unity3d/player/a$2.class...
    processing com/unity3d/player/a$a.class...
    processing com/unity3d/player/a.class...
    processing com/unity3d/player/b$1.class...
    processing com/unity3d/player/b$2.class...
    processing com/unity3d/player/b.class...
    processing com/unity3d/player/c.class...
    processing com/unity3d/player/d$1.class...
    processing com/unity3d/player/d$2.class...
    processing com/unity3d/player/d.class...
    processing com/unity3d/player/e.class...
    processing com/unity3d/player/f.class...
    processing com/unity3d/player/g.class...
    processing com/unity3d/player/h.class...
    processing com/unity3d/player/i.class...
    processing com/unity3d/player/j$1.class...
    processing com/unity3d/player/j$2$1$1.class...
    processing com/unity3d/player/j$2$1.class...
    processing com/unity3d/player/j$2.class...
    processing com/unity3d/player/j.class...
    processing com/unity3d/player/k$1.class...
    processing com/unity3d/player/k.class...
    processing com/unity3d/player/l.class...
    processing com/unity3d/player/m.class...
    processing com/unity3d/player/n$1.class...
    processing com/unity3d/player/n.class...
    processing com/unity3d/player/NativeLoader.class...
    processing com/unity3d/player/o.class...
    processing com/unity3d/player/ReflectionHelper$1.class...
    processing com/unity3d/player/ReflectionHelper$a.class...
    processing com/unity3d/player/ReflectionHelper.class...
    processing com/unity3d/player/p.class...
    processing com/unity3d/player/q$1.class...
    processing com/unity3d/player/q$2.class...
    processing com/unity3d/player/q$3.class...
    processing com/unity3d/player/q.class...
    processing com/unity3d/player/r.class...
    processing com/unity3d/player/s.class...
    processing com/unity3d/player/UnityPlayer$1.class...
    processing com/unity3d/player/UnityPlayer$2.class...
    processing com/unity3d/player/UnityPlayer$3.class...
    processing com/unity3d/player/UnityPlayer$4.class...
    processing com/unity3d/player/UnityPlayer$5.class...
    processing com/unity3d/player/UnityPlayer$6.class...
    processing com/unity3d/player/UnityPlayer$7.class...
    processing com/unity3d/player/UnityPlayer$8.class...
    processing com/unity3d/player/UnityPlayer$9.class...
    processing com/unity3d/player/UnityPlayer$10.class...
    processing com/unity3d/player/UnityPlayer$11.class...
    processing com/unity3d/player/UnityPlayer$12$1.class...
    processing com/unity3d/player/UnityPlayer$12.class...
    processing com/unity3d/player/UnityPlayer$13.class...
    processing com/unity3d/player/UnityPlayer$14.class...
    processing com/unity3d/player/UnityPlayer$15.class...
    processing com/unity3d/player/UnityPlayer$16.class...
    processing com/unity3d/player/UnityPlayer$17.class...
    processing com/unity3d/player/UnityPlayer$18.class...
    processing com/unity3d/player/UnityPlayer$a.class...
    processing com/unity3d/player/UnityPlayer$b.class...
    processing com/unity3d/player/UnityPlayer$c.class...
    processing com/unity3d/player/UnityPlayer.class...
    processing com/unity3d/player/UnityPlayerActivity.class...
    processing com/unity3d/player/UnityPlayerNativeActivity.class...
    processing com/unity3d/player/UnityPlayerProxyActivity.class...
    processing com/unity3d/player/t.class...
    processing com/unity3d/player/u$1.class...
    processing com/unity3d/player/u.class...
    processing com/unity3d/player/WWW.class...
    processing org/fmod/FMODAudioDevice$a.class...
    processing org/fmod/FMODAudioDevice.class...
    processing org/fmod/a.class...
    processing bin\classes\.\com\google\android\gms\R$attr.class...
    processing bin\classes\.\com\google\android\gms\R$color.class...
    processing bin\classes\.\com\google\android\gms\R$drawable.class...
    processing bin\classes\.\com\google\android\gms\R$id.class...
    processing bin\classes\.\com\google\android\gms\R$integer.class...
    processing bin\classes\.\com\google\android\gms\R$string.class...
    processing bin\classes\.\com\google\android\gms\R$style.class...
    processing bin\classes\.\com\google\android\gms\R$styleable.class...
    processing bin\classes\.\com\google\android\gms\R.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$attr.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$color.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$drawable.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$id.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$integer.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$string.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$style.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$styleable.class...
    processing bin\classes\.\com\killerlobster\ezcore\R.class...
    processing bin\classes\.\com\unity3d\ads\android\R$attr.class...
    processing bin\classes\.\com\unity3d\ads\android\R$color.class...
    processing bin\classes\.\com\unity3d\ads\android\R$drawable.class...
    processing bin\classes\.\com\unity3d\ads\android\R$id.class...
    processing bin\classes\.\com\unity3d\ads\android\R$integer.class...
    processing bin\classes\.\com\unity3d\ads\android\R$string.class...
    processing bin\classes\.\com\unity3d\ads\android\R$style.class...
    processing bin\classes\.\com\unity3d\ads\android\R$styleable.class...
    processing bin\classes\.\com\unity3d\ads\android\R.class...
    processing archive plugins\.\AndroidLevelUp.jar...
    ignored resource META-INF/MANIFEST.MF
    processing com/soomla/levelup/LevelUp$1.class...
    processing com/soomla/levelup/LevelUp$2.class...
    processing com/soomla/levelup/LevelUp$3.class...
    processing com/soomla/levelup/LevelUp$4.class...
    processing com/soomla/levelup/LevelUp$5.class...
    processing com/soomla/levelup/LevelUp$IItemStateApplier.class...
    processing com/soomla/levelup/LevelUp.class...
    processing com/soomla/levelup/data/GateStorage.class...
    processing com/soomla/levelup/data/LUJSONConsts.class...
    processing com/soomla/levelup/data/LevelStorage.class...
    processing com/soomla/levelup/data/MissionStorage.class...
    processing com/soomla/levelup/data/ScoreStorage.class...
    processing com/soomla/levelup/data/WorldStorage.class...
    processing com/soomla/levelup/events/GateClosedEvent.class...
    processing<message truncated>
     
  40. PrisonerOfLies

    PrisonerOfLies

    Joined:
    Dec 6, 2013
    Posts:
    105
    error 2 :

    Error building Player: CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
    D:\Program Files\Java\lib\jdk1.8.0_11\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="D:/Downloads/adt-bundle-windows-x86_64-20140702/sdk\tools" -Dfile.encoding=UTF8 -jar "C:/Program Files/Unity/Editor/Data/BuildTargetTools/AndroidPlayer\sdktools.jar" -

    stderr[

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/soomla/rewards/VirtualItemReward;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/android/vending/billing/IInAppBillingService$Stub$Proxy;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/soomla/AndroidBus$1;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/squareup/otto/AnnotatedHandlerFinder;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/soomla/unity/StoreEventHandler;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)

    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: already added: Lcom/soomla/core/unity/SoomlaEventHandler;
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
    at com.android.dx.dex.file.DexFile.add(DexFile.java:161)
    at com.android.dx.command.dexer.Main.processClass(Main.java:732)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:229)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:158)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)
    at com.android.dx.command.dexer.Main.run(Main.java:245)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at SDKMain.main(SDKMain.java:129)
    6 errors; aborting
    ]
    stdout[
    processing archive bin\classes.jar...
    processing com/unity3d/player/a$1.class...
    processing com/unity3d/player/a$2.class...
    processing com/unity3d/player/a$a.class...
    processing com/unity3d/player/a.class...
    processing com/unity3d/player/b$1.class...
    processing com/unity3d/player/b$2.class...
    processing com/unity3d/player/b.class...
    processing com/unity3d/player/c.class...
    processing com/unity3d/player/d$1.class...
    processing com/unity3d/player/d$2.class...
    processing com/unity3d/player/d.class...
    processing com/unity3d/player/e.class...
    processing com/unity3d/player/f.class...
    processing com/unity3d/player/g.class...
    processing com/unity3d/player/h.class...
    processing com/unity3d/player/i.class...
    processing com/unity3d/player/j$1.class...
    processing com/unity3d/player/j$2$1$1.class...
    processing com/unity3d/player/j$2$1.class...
    processing com/unity3d/player/j$2.class...
    processing com/unity3d/player/j.class...
    processing com/unity3d/player/k$1.class...
    processing com/unity3d/player/k.class...
    processing com/unity3d/player/l.class...
    processing com/unity3d/player/m.class...
    processing com/unity3d/player/n$1.class...
    processing com/unity3d/player/n.class...
    processing com/unity3d/player/NativeLoader.class...
    processing com/unity3d/player/o.class...
    processing com/unity3d/player/ReflectionHelper$1.class...
    processing com/unity3d/player/ReflectionHelper$a.class...
    processing com/unity3d/player/ReflectionHelper.class...
    processing com/unity3d/player/p.class...
    processing com/unity3d/player/q$1.class...
    processing com/unity3d/player/q$2.class...
    processing com/unity3d/player/q$3.class...
    processing com/unity3d/player/q.class...
    processing com/unity3d/player/r.class...
    processing com/unity3d/player/s.class...
    processing com/unity3d/player/UnityPlayer$1.class...
    processing com/unity3d/player/UnityPlayer$2.class...
    processing com/unity3d/player/UnityPlayer$3.class...
    processing com/unity3d/player/UnityPlayer$4.class...
    processing com/unity3d/player/UnityPlayer$5.class...
    processing com/unity3d/player/UnityPlayer$6.class...
    processing com/unity3d/player/UnityPlayer$7.class...
    processing com/unity3d/player/UnityPlayer$8.class...
    processing com/unity3d/player/UnityPlayer$9.class...
    processing com/unity3d/player/UnityPlayer$10.class...
    processing com/unity3d/player/UnityPlayer$11.class...
    processing com/unity3d/player/UnityPlayer$12$1.class...
    processing com/unity3d/player/UnityPlayer$12.class...
    processing com/unity3d/player/UnityPlayer$13.class...
    processing com/unity3d/player/UnityPlayer$14.class...
    processing com/unity3d/player/UnityPlayer$15.class...
    processing com/unity3d/player/UnityPlayer$16.class...
    processing com/unity3d/player/UnityPlayer$17.class...
    processing com/unity3d/player/UnityPlayer$18.class...
    processing com/unity3d/player/UnityPlayer$a.class...
    processing com/unity3d/player/UnityPlayer$b.class...
    processing com/unity3d/player/UnityPlayer$c.class...
    processing com/unity3d/player/UnityPlayer.class...
    processing com/unity3d/player/UnityPlayerActivity.class...
    processing com/unity3d/player/UnityPlayerNativeActivity.class...
    processing com/unity3d/player/UnityPlayerProxyActivity.class...
    processing com/unity3d/player/t.class...
    processing com/unity3d/player/u$1.class...
    processing com/unity3d/player/u.class...
    processing com/unity3d/player/WWW.class...
    processing org/fmod/FMODAudioDevice$a.class...
    processing org/fmod/FMODAudioDevice.class...
    processing org/fmod/a.class...
    processing bin\classes\.\com\google\android\gms\R$attr.class...
    processing bin\classes\.\com\google\android\gms\R$color.class...
    processing bin\classes\.\com\google\android\gms\R$drawable.class...
    processing bin\classes\.\com\google\android\gms\R$id.class...
    processing bin\classes\.\com\google\android\gms\R$integer.class...
    processing bin\classes\.\com\google\android\gms\R$string.class...
    processing bin\classes\.\com\google\android\gms\R$style.class...
    processing bin\classes\.\com\google\android\gms\R$styleable.class...
    processing bin\classes\.\com\google\android\gms\R.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$attr.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$color.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$drawable.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$id.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$integer.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$string.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$style.class...
    processing bin\classes\.\com\killerlobster\ezcore\R$styleable.class...
    processing bin\classes\.\com\killerlobster\ezcore\R.class...
    processing bin\classes\.\com\unity3d\ads\android\R$attr.class...
    processing bin\classes\.\com\unity3d\ads\android\R$color.class...
    processing bin\classes\.\com\unity3d\ads\android\R$drawable.class...
    processing bin\classes\.\com\unity3d\ads\android\R$id.class...
    processing bin\classes\.\com\unity3d\ads\android\R$integer.class...
    processing bin\classes\.\com\unity3d\ads\android\R$string.class...
    processing bin\classes\.\com\unity3d\ads\android\R$style.class...
    processing bin\classes\.\com\unity3d\ads\android\R$styleable.class...
    processing bin\classes\.\com\unity3d\ads\android\R.class...
    processing archive plugins\.\AndroidLevelUp.jar...
    ignored resource META-INF/MANIFEST.MF
    processing com/soomla/levelup/LevelUp$1.class...
    processing com/soomla/levelup/LevelUp$2.class...
    processing com/soomla/levelup/LevelUp$3.class...
    processing com/soomla/levelup/LevelUp$4.class...
    processing com/soomla/levelup/LevelUp$5.class...
    processing com/soomla/levelup/LevelUp$IItemStateApplier.class...
    processing com/soomla/levelup/LevelUp.class...
    processing com/soomla/levelup/data/GateStorage.class...
    processing com/soomla/levelup/data/LUJSONConsts.class...
    processing com/soomla/levelup/data/LevelStorage.class...
    processing com/soomla/levelup/data/MissionStorage.class...
    processing com/soomla/levelup/data/ScoreStorage.class...
    processing com/soomla/levelup/data/WorldStorage.class...
    processing com/soomla/levelup/events/GateClosedEv<message truncated>
     
  41. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    @PrisonerOfLies You are using SDKs which share the same files, thus these files are defined multiple times in your project and that's why Unity complains. Specifically, these files:
    Code (csharp):
    1. already added: Lcom/soomla/rewards/VirtualItemReward
    2. already added: Lcom/android/vending/billing/IInAppBillingService$Stub$Proxy
    3. already added: Lcom/soomla/AndroidBus$1
    4. already added: Lcom/squareup/otto/AnnotatedHandlerFinder
    5. already added: Lcom/soomla/unity/StoreEventHandler
    6. already added: Lcom/soomla/core/unity/SoomlaEventHandler
    You even get errors about files in SOOMLA's SDK, I can only guess that you have imported that twice too? Simple IAP System does not contain native code and I am not involved in the development of the SOOMLA SDK, so please ask them directly on how to handle these errors.
     
  42. PrisonerOfLies

    PrisonerOfLies

    Joined:
    Dec 6, 2013
    Posts:
    105
    ok thx. the issue was fixed when i did a clean reimport of all the android plugin assets.

    another question : i built and published your asset example project and also set up the iap at google play and also used the google iap license key, but the iap purchase does not work when i tried it on my device. it just show 0 gold and clicking on the buy button yield no result. is there any step that i missed ?
     
  43. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    @PrisonerOfLies you can check the FAQ section in the documentation for common faults when setting up IAPs on Google Play. Setting up test accounts in Google Play and specifying the bundle identifier for your app in Unity has to be done too. If there is still something not set up correctly on your device, checking the device log directly helps in most cases.
     
  44. PrisonerOfLies

    PrisonerOfLies

    Joined:
    Dec 6, 2013
    Posts:
    105
    ok now the iap works perfect on direct build however installing from play store still causes the gold to be 0 and buttons not doing anything.

    i am still using the sandbox environment key. will changing it to production fix the problem ?

    #issue 2 : missing AndroidStoreGooglePlay.jar in project
    i solved that by copy paste the file from soomla example project zip, however just to make sure,
    does sis already handle this step : https://github.com/soomla/android-store-google-play
    automatically ?
     

    Attached Files:

    Last edited: May 29, 2015
  45. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    As I said, have a look at the device log for errors that may occur. If there is an error in the initialization method of SIS, it won't load your DBManager data and work as it is supposed to.

    Changing the environment key in SOOMLA's settings is not related to billing, it's the key used for analytics.

    I've never seen that file anywhere but yes, SIS already handles all the app store initialization things for you. Still, you have to check the device log via ADB logcat for detailed messages.
     
  46. PrisonerOfLies

    PrisonerOfLies

    Joined:
    Dec 6, 2013
    Posts:
    105
    ya after importing the AndroidStoreGooglePlay.jar it works !
     
  47. bopa

    bopa

    Joined:
    May 24, 2013
    Posts:
    14
    When is the next discount price offer?
     
  48. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    There are no plans for discounts at the moment.
     
  49. eridani

    eridani

    Joined:
    Aug 30, 2012
    Posts:
    655
    Is there a difference between the Soomla store that is downloaded from the link in your pdf to the Soomla store that is in the asset store? Thanks!
     
  50. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    3,268
    The link in the pdf always points to the newest compiled version on SOOMLA's github branch. If there are any further modifications needed to make SIS+SOOMLA compatible (none at the moment), it would go into this version on their site. By registering via our registration link, you'll also buy me a small beer.