Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

NATIVE PLUGINS for Unity: iOS, Android [Billing, Cloud Save, Game Services, Webview, Sharing & More]

Discussion in 'Assets and Asset Store' started by Voxel-Busters, Apr 4, 2015.

?

Do you want to see Windows Mobile support in CPNP? FYI, current market share is less than 3%.

Poll closed Aug 26, 2022.
  1. Ooh la la, Love to see that!

    12 vote(s)
    52.2%
  2. I don't give a damn!

    6 vote(s)
    26.1%
  3. Are you crazy! Who makes games for Windows Mobile.

    5 vote(s)
    21.7%
  1. Osabdelnaby

    Osabdelnaby

    Joined:
    Mar 29, 2020
    Posts:
    4
    I know that they are Async but they are the same values as I said before
    the code:
    Code (CSharp):
    1.         // First Page
    2.         leaderboard.LoadTopScores((result, error) => {
    3.             if (error == null)
    4.             {
    5.              
    6.                 Debug.Log("[Leaderboard]:Scores loaded : " + result.Scores);
    7.                 scores = result.Scores;
    8.              
    9.                 if (scores != null)
    10.                 {
    11.                     Debug.Log("[Leaderboard]: Scores count: " + scores.Length);
    12.  
    13.                     for (int i = 0; i < scores.Length; i++)
    14.                     {
    15.                         IScore score = scores[i];
    16.                         userImages.Add(score.Player.Alias, null);
    17.                     }
    18.  
    19.                    
    20.  
    21.                     StartCoroutine(LoadAvatars(userImages, scores, cache));
    22.  
    23. #if UNITY_ANDROID
    24.                     // Second Page
    25.  
    26.                     leaderboard.LoadNext((result1, error) =>
    27.                     {
    28.                         if (error == null)
    29.                         {
    30.                             Debug.Log("Scores loaded : " + result1.Scores);
    31.                             scores = result1.Scores;
    32.                             userImages.Clear();
    33.                             if (score != null)
    34.                             {
    35.  
    36.                                 for (int i = 0; i < scores.Length; i++)
    37.                                 {
    38.                                     IScore score = scores[i];
    39.  
    40.                                     userImages.Add(score.Player.Alias, null);
    41.                                 }
    42.                             }
    43.  
    44.                             StartCoroutine(LoadAvatars(userImages, scores, cache));
    45.                             // Third Page
    46.                             leaderboard.LoadNext((result2, error) =>
    47.                             {
    48.                                 if (error == null)
    49.                                 {
    50.                                     Debug.Log("Scores loaded : " + result2.Scores);
    51.                                     scores = result2.Scores;
    52.                                     userImages.Clear();
    53.                                     if (score != null)
    54.                                     {
    55.  
    56.                                         for (int i = 0; i < scores.Length; i++)
    57.                                         {
    58.                                             IScore score = scores[i];
    59.  
    60.                                             userImages.Add(score.Player.Alias, null);
    61.                                         }
    62.                                     }
    63.  
    64.  
    65.                                     StartCoroutine(LoadAvatars(userImages, scores, cache));
    66.  
    67.                                     // Fourth Page
    68.  
    69.                                     leaderboard.LoadNext((result3, error) =>
    70.                                     {
    71.                                         if (error == null)
    72.                                         {
    73.                                             Debug.Log("Scores loaded : " + result3.Scores);
    74.                                             scores = result3.Scores;
    75.                                             userImages.Clear();
    76.                                             if (score != null)
    77.                                             {
    78.  
    79.                                                 for (int i = 0; i < scores.Length; i++)
    80.                                                 {
    81.                                                     IScore score = scores[i];
    82.  
    83.                                                     userImages.Add(score.Player.Alias, null);
    84.                                                 }
    85.                                             }
    86.                                          
    87.  
    88.                                             StartCoroutine(LoadAvatars(userImages, scores, cache));
    89.                                         }
    90.                                         else
    91.                                         {
    92.                                             Debug.LogError("Failed loading top scores page 4 with error : " + error.Description);
    93.                                             scores = null;
    94.                                          
    95.  
    96.                                         }
    97.  
    98.  
    99.                                     });
    100.                                 }
    101.                                 else
    102.                                 {
    103.                                     Debug.LogError("Failed loading top scores page 3 with error : " + error.Description);
    104.                                     scores = null;
    105.                                  
    106.  
    107.                                 }
    108.  
    109.  
    110.                             });
    111.                         }
    112.                         else
    113.                         {
    114.                             Debug.LogError("Failed loading top scores page 2 with error : " + error.Description);
    115.                             scores = null;
    116.                          
    117.  
    118.                         }
    119.  
    120.  
    121.                     });
    122.  
    123. #endif
    124.                 }
    125.             }
    126.             else
    127.             {
    128.                 Debug.LogError("[Leaderboard]:Failed loading top scores page 1 with error : " + error.Description);
    129.                 scores = null;
    130.              
    131.  
    132.             }
     
  2. derkoi

    derkoi

    Joined:
    Jul 3, 2012
    Posts:
    2,237
  3. GDGames0302

    GDGames0302

    Joined:
    Jun 7, 2020
    Posts:
    4
    UPDATE: The game is published and everything works as expected. Thank you so much. 100% recommend this asset!
     
    Voxel-Busters likes this.
  4. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Thanks for confirming. Can you please do the following?
    1. Set Log level to Info in Essential Kit Settings
    2. Enable Development build in Build Settings
    3. Run on device and capture the complete logcat log(without any filters).


    Thanks,
    VB Team
     
  5. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Hi,
    We return the code in callbacks if auth fails. Can you please let me know if you don't see the error code as error?
     
  6. derkoi

    derkoi

    Joined:
    Jul 3, 2012
    Posts:
    2,237
    Hi thanks for the reply, so I understand, auth will fail if the game isn't owned by the player as per google play anti piracy features and I will get LICENSE_CHECK_FAILED as an error code if that's the case?
     
  7. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Yes, thats how it should be. Unfortunately, currently I don't have options to check this failed case but it should work as expected. Pls let me know if you see any issue.
     
  8. Osabdelnaby

    Osabdelnaby

    Joined:
    Mar 29, 2020
    Posts:
    4
    Here you go
     

    Attached Files:

  9. derkoi

    derkoi

    Joined:
    Jul 3, 2012
    Posts:
    2,237
    Hi, I made a simple app that tries to log into Google Play Games and displays the results on screen. I set all this up with a new app in Google Play and set it to release a internal test.

    In my own test, I can log in just fine, it get's my username and display name as you'd expect. I send the apk to some testers and none of them can log in, but instead of getting a LICENSE_CHECK_FAILED error like I'd hoped, I get this

    Failed login with error: Error Domain: Code 0 Description: Sign in failed

    Now, I'm not really sure why this is happening, maybe as Google have yet to review my release? All games, including my own which works was downloaded via an apk on Google Drive.
     
  10. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Make sure they are added as testers in Grow -> Play Services -> Testers Section of Google play console.
     
  11. racc

    racc

    Joined:
    Sep 13, 2014
    Posts:
    1
    Hi, I own the essential kit and use Google Play Games Services. We launched the app, and most users log in just fine. However, some users experience login failures. (They see a "sign in failed" message.) They say other apps log in fine, but only this one can't. Why are some users unable to log in? I really have a headache!
     
  12. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    The reasons for failure message could be due to some of the following factors
    1. Network problem
    2. Not an updated version

    However, in case 2, they should be prompted with an update alert if it happens.

    We don't have any open issues regarding the mentioned scenario. It would be great if you can share us more details about reproducing the issue (along with device, os).
     
  13. waterets

    waterets

    Joined:
    Mar 1, 2020
    Posts:
    2
    Hi, this could be a general question, I was wondering if there is a way to disable this package for WebGL build. I usually build my project for iOS and Android, but when I tried for WebGL but it causes build error(Mac build is fine).

    Assets/Plugins/VoxelBusters/EssentialKit/Scripts/Runtime/Core/NetworkServices/UnityNetworkServicesInterface.cs(81,21): error CS0246: The type or namespace name 'Ping' could not be found (are you missing a using directive or an assembly reference?)
     
  14. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Hey,
    Please update the attached file and it should be fine. We covered it in next release.

    Thanks,
    VB Team
     

    Attached Files:

    waterets likes this.
  15. swifter14

    swifter14

    Joined:
    Mar 2, 2017
    Posts:
    165
    I have a simple question, how do I know if Rate my App window (confirmation window) is on? Because I have other confirmations of my game at start and I don't want to show my messages if Rate my App window is shown.
     
  16. swifter14

    swifter14

    Joined:
    Mar 2, 2017
    Posts:
    165
    After selecting Release under Android Settings- Minify. I can no longer select photos from my Android . I do have a Custom Proguard File. For now, I disabled Minify Release after receiving complaints from users that they can't upload photos! The reason I need to check Release is to clear the Google Play Console warning
     
  17. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    We actually had first release with proguard support but later we didn't look into it much as all the time devs don't have it enabled as many plugins don't support it.

    We have proguard files in place but I do have a check now if anything we changed in later releases leading to the issue.
     
  18. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    You can control the visibility of Rate Dialog by setting a delegate. However, if you want to disable it, you can do it from Application Settings -> Rate My App Settings -> Confirmation Dialog Settings
     
  19. swifter14

    swifter14

    Joined:
    Mar 2, 2017
    Posts:
    165
    What's the code I can use to know if the window is active and shown to the user?
     
  20. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Do you want to know if the confirmation dialog is currently being shown? I doubt we have a method for that. Will cross check.
     
  21. swifter14

    swifter14

    Joined:
    Mar 2, 2017
    Posts:
    165
    Yes. My main idea is to not show the confirmation dialog on top of my own Game News Message that I usually show when my app starts. So a simple code would be "If the rate confirmation dialog is shown- don't open my own game news message". A second option if you don't have that method, would be to disable the default confirmation dialog, and lunch it through code instead with your "AskForReviewNow" method, but in that case I have a question- Does that method force it to show the dialog? Because in the default option the dialog doesn't show every time thanks to limitations. Does AskForReviewNow consider those limitations?
     
  22. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Makes sense.
    Currently, we don't have an option to check if confirmation dialog, but we can consider adding one. Meanwhile try adding the below code to get the flag status. You need to add it in RateMyApp.cs file.

    Code (CSharp):
    1. public static bool IsShowingPrompt()
    2.         {
    3.             // check whether feature is available
    4.             if (!IsSingletonActive)
    5.             {
    6.                 DebugLogger.LogError("Feature is not active.");
    7.                 return false;
    8.             }
    9.  
    10.             return Instance.m_isShowingPrompt;
    11.         }
    12.  
     
  23. swifter14

    swifter14

    Joined:
    Mar 2, 2017
    Posts:
    165
    thanks, What does that method do? Check if the confirmation dialog is open?
     
  24. swifter14

    swifter14

    Joined:
    Mar 2, 2017
    Posts:
    165
    That code didn't help, it returned false even though the dialog was shown (or maybe was about to be shown) and then I saw my message together with that dialog.
    Also, why can't I click Submit on the iPhone? I choose 5 stars for the review and have two buttons "cancel" and "submit" but "submit" is greyed out
     
  25. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    If you mean about the store rating dialog, its something shown by iOS os. Most likely you are not in production, so this behaviour is normal. For production users, it should work fine.

    m_isShowingPrompt is the variable actually holding the status of the dialog we show. Anyways, we will have a double check once.
     
  26. swifter14

    swifter14

    Joined:
    Mar 2, 2017
    Posts:
    165
    I'm sorry for all the questions but the document is very light in details.
    Since I can't tell whether the dialog is shown/about to be shown - I decided to disable Rate my app feature.

    I decided to use AskForReviewNow in my script manually (so it'll be shown at a different time in my code and not automatically).

    I have 2 questions
    1- I changed the Rate My App settings of Is Enabled to false (because I don't want it to be shown automatically), when I run my AskForReviewNow function, nothing happens (not dialog and not rating window because it's not enabled?)
    2- On your document, it says- "To prevent spamming the user for rating the app, each native platform has their own limitations." and there are default controller settings in the Application tab.
    But those limitations only apply for the automatic dialog. When I run AskForReviewNow it doesn't check those limitations, how can I check them instead?
     
    Last edited: Sep 15, 2021
  27. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    AskForReviewNow -> This is actually a direct call to store rating dialog. It by passes all settings/constaints regarding when the dialog needs to be show. By that it means it won't consider any setting related to launch counts, hours to wait and all other rules.

    You can't check the limits as there is no api provided for checking it on native frameworks. We always recommend this to our developers.
    1. Never give an explicit option like a button to rate. This is because, due to the limits of stores, it may be possible that, it will be a no-op if the user already rates or exceeds quota.
    2. Always, you(developer) needs to call rating based on the gameplay. For ex: when he achieves a big milestone or you see he/she is coming back often. If you call it, if there is no-op also, it doesn't matter for the end user. If it shows up, it will be a window overlay so he/she can proceed with the rating process.

    Disabling Ratemy app just means it disables checking of the rules(launch counts/hours to wait etc) only. Still you can forcefully call AskForReviewNow method(Edit) or even Utilities.RequestStoreReview(). Just the later one doesn't show up confirmation dialog(if enabled) and directly show up the store review dialog.

    Please let us know if you need any help.
     
    Last edited: Sep 16, 2021
  28. swifter14

    swifter14

    Joined:
    Mar 2, 2017
    Posts:
    165
    I agree with your approach, I think you missed what I wrote.
    How do I disable now Rate My App feature ? -I don't want to show either a confirmation dialog or a store rating dialog.
    Application --> Rate My App settings --> is enabled . setting to flase.
    When it's true- I see Rate My App when starting my app, when false I don't see.

    So I set it to false. but then as a test, I set a test button calling to AskForReviewNow, and nothing happens. not a confirmation window and not a store rating dialog. (unless I change is enabled to true).
     
  29. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    I just cross checked and the behaviour you see is fine. Let me take a step back and give you info on what can be expected. I assume you are testing on the device because thats where store rating dialog is visible.

    1. If RateMyApp is disabled, AskForReviewNow also doesn't work (you are right on this)
    2. If RateMyApp is enabled and confirmation dialog is enabled, you see confirmation dialog and may be rate dialog based on quota.

    So if you don't want to have rules for displaying the store dialog, you have two options
    1. Enable RateMyApp if you need confirmation dialog too before store dialog and set the rules settings to high values
    2. Call just Utilities.RequestStoreReview() if you just want to show the store dialog and disable RateMyApp feature.

    Hope its clear now.
     
  30. anwaratxsample

    anwaratxsample

    Joined:
    May 12, 2018
    Posts:
    1
    I'm currently using the lite version. When I am running the application I get notification for rating the pp. How can I remove that?
     
  31. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Under Application Settings -> Rate App Settings, deselect Confirmation dialog option in Essential Kit Settings inspector.
     
  32. tunupgames

    tunupgames

    Joined:
    Jun 16, 2021
    Posts:
    5
    Hello.
    I bought this to use the Cloud Save feature of iOS.
    Only Cloud Service was activated in the Unity settings, and additional settings were made in the iOS dev portal.
    I try to use CloudServices.SetByteArray() for storage and CloudServices.GetByteArray() for retrieval.

    The following problem occurred during testing. please check.
    1. After saving, none of the three event functions 'CloudServices.OnUserChange, CloudServices.OnSavedDataChange, CloudServices.OnSynchronizeComplete' was checked.
    Is there anything else I need to do after saving with CloudServices.SetByteArray()?

    2. After saving with CloudServices.SetByteArray(), if you try to retrieve it through CloudServices.GetByteArray(), the app stops.
    It is not a problem if there is no saved data, but if any value is saved, the app will stop while loading.
    How can I solve this?

    please check.
    thank you.
     
  33. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    We have an issue with SetByteArray which is fixed in the coming update. However, if you are fine to wait for the fix, can you try using SetString by converting the byte array to a string?

    Please reach us on Discord if you would like to access the fix early.
     
  34. tunupgames

    tunupgames

    Joined:
    Jun 16, 2021
    Posts:
    5
    Hello.

    Thanks for the quick reply.
    Let's try converting it to a SetString.

    thank you.
     
  35. Looping_co

    Looping_co

    Joined:
    Dec 10, 2016
    Posts:
    19
    Hi,

    Two questions regarding Rate my App:

    - Are "Min Hours" and "Min Launches" in Initial Prompt Constraints inclusive or exclusive? Can I use the value "0" in "Min Hours" if I only want to trigger the Prompt with "Min Launches" ?

    - I've read that the prompt is not shown on TestFlight but is the prompt suppose to show directly building in Xcode on iPhone? If not : how to test it's working?

    Best
     
  36. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Case 1: Min Launches = 0, Min Hours = 0
    Prompt shown when time elapses since last prompt shown by 1hr.

    Case 1: Min Launches = 2, Min Hours = 2
    Prompt shown after 2 launches(on 3rd launch literally) and time elapses since last prompt shown by 2hrs.

    Please look for RateMyAppDefaultControllerSettings.cs file's CheckIfValidatorConditionsAreSatisfied method for the details. Also note that you can have your own custom controller and set to RateMyApp for more control.

    Thanks,
    VB Team
     
  37. Brothers-Studio

    Brothers-Studio

    Joined:
    Jul 4, 2018
    Posts:
    4
    i am using latest voxal buster.
    get this error when click on buy button
     

    Attached Files:

    • get.PNG
      get.PNG
      File size:
      115.9 KB
      Views:
      259
  38. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Can you please share a screenshot of your Essential Kit Settings?
     
  39. Looping_co

    Looping_co

    Joined:
    Dec 10, 2016
    Posts:
    19
    Hi,
    Thank you for your answer concerning the "min launches" settings.
    I come back concerning two errors I have on Test Flight and I want to be sure it's Test Flight related and that it will not happen in production environment.
    Thank you,

    Here's the logs.
    Error 1 :

    NullReferenceException: Object reference not set to an instance of an object.

    VoxelBusters.EssentialKit.AlertDialog.AwakeInternal (System.Object[] args) (at <00000000000000000000000000000000>:0)
    VoxelBusters.CoreLibrary.NativePlugins.NativeFeatureBehaviour.CreateInstanceInternal[T] (System.String name, System.Object[] args) (at <00000000000000000000000000000000>:0)
    VoxelBusters.EssentialKit.AlertDialog.CreateInstance (VoxelBusters.EssentialKit.AlertDialogStyle alertStyle) (at <00000000000000000000000000000000>:0)
    VoxelBusters.EssentialKit.AlertDialogBuilder..ctor (VoxelBusters.EssentialKit.AlertDialogStyle alertStyle) (at <00000000000000000000000000000000>:0)
    VoxelBusters.EssentialKit.RateMyApp.ShowPromptWindow () (at <00000000000000000000000000000000>:0)


    Error 2:
    NullReferenceException: Object reference not set to an instance of an object.

    VoxelBusters.EssentialKit.AlertDialog.IsAvailable () (at <00000000000000000000000000000000>:0)
    VoxelBusters.CoreLibrary.NativePlugins.NativeFeatureBehaviour.Start () (at <00000000000000000000000000000000>:0)
     
  40. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    You should see the same error on dev mode too. If not, something related to your stripping settings. Can you try setting to Low and let us know?
     
  41. Looping_co

    Looping_co

    Joined:
    Dec 10, 2016
    Posts:
    19
    Ok. so this error is normal on Test Flight?
    I try modifying the stripping level.
     
  42. AnMill

    AnMill

    Joined:
    Sep 5, 2018
    Posts:
    8
    Hi!

    Trying to get the billing work (Essential Kit 2.0.4, 2.1.1)

    For a test user on iOS one of test payments is crashed the app. Now the app crashes every time at the start when this payment enters the queue.

    Log before the crash from console:

    Code (JavaScript):
    1. default    09:48:19.626257+0100    appstored    [SKUT:S:L/com.whatever.appid/CDA3AF70] 1 transactions in response
    2. default    09:48:19.627131+0100    appstored    [SKUT:S:L/com.whatever.appid/CDA3AF70]: Found 1 products in receipt with ID hard_currency_pack_5
    3. default    09:48:19.627315+0100    appstored    [SKUT:S:L/com.whatever.appid/CDA3AF70] Found 1 transactions in pending queue
    4. default    09:48:19.627712+0100    appstored    [C142 F33B52DD-8D10-4AE6-B638-0104F244CDE3 Hostname#e6aafd08:443 tcp, bundle id: com.whatever.appid, url hash: 424a5ba7, tls, definite, attribution: developer] cancel
    5. default    09:48:19.627846+0100    APP        New transaction added to queue <SKPaymentTransaction: 0x2806604b0>
    6. default    09:48:19.627904+0100    appstored    [C142 F33B52DD-8D10-4AE6-B638-0104F244CDE3 Hostname#e6aafd08:443 tcp, bundle id: com.whatever.appid, url hash: 424a5ba7, tls, definite, attribution: developer] cancelled
    7.     [C142.1 D9904D98-C779-4464-AF52-689CA529438B 192.168.1.145:63177<->IPv4#fe872cc8:443]
    8.     Connected Path: satisfied (Path is satisfied), viable, interface: en0, ipv4, dns
    9.     Privacy Stance: Not Eligible
    10.     Duration: 0.941s, DNS @0.000s took 0.021s, TCP @0.024s took 0.145s, TLS 1.2 took 0.322s
    11.     bytes in/out: 17744/4443, packets in/out: 17/23, rtt: 0.144s, retransmitted bytes: 0, out-of-order bytes: 0
    12. default    09:48:19.628077+0100    APP            [NativePlugins] Processing transaction change callback.
    13. default    09:48:19.648993+0100    mediaserverd    AudioSession_SubServer.cpp:132   { "action":"client_died", "session":{"ID":"0x10d5e9a","PID":15505,"name":"APP"}, "details":null }
    14. default    09:48:19.652468+0100    kernel    APP[15505] Corpse allowed 1 of 5
    15.  
    Only once the crash did not happen and there was an error in the application logs:

    Code (JavaScript):
    1. FormatException: String was not recognized as a valid DateTime.
    2. System.DateTimeParse.ParseExact (System.String s, System.String format, System.Globalization.DateTimeFormatInfo dtfi, System.Globalization.DateTimeStyles style) (at 00000000000000000000000000000000:0)
    3. VoxelBusters.EssentialKit.BillingServicesCore.iOS.BillingServicesUtility+c.CreateTransactionArrayb__3_0 (VoxelBusters.EssentialKit.BillingServicesCore.iOS.SKPaymentTransactionData input) (at 00000000000000000000000000000000:0)
    4. System.Converter`2[TInput,TOutput].Invoke (TInput input) (at 00000000000000000000000000000000:0)
    5. VoxelBusters.CoreLibrary.NativePlugins.MarshalUtility.ConvertNativeArrayItems[TInput,TOutput] (System.IntPtr arrayPtr, System.Int32 length, System.Converter`2[TInput,TOutput] converter, System.Boolean includeNullObjects) (at 00000000000000000000000000000000:0)
    6. VoxelBusters.EssentialKit.BillingServicesCore.iOS.BillingServicesInterface.HandlePaymentStateChangeCallbackInternal (System.IntPtr transactionsPtr, System.Int32 length) (at 00000000000000000000000000000000:0)
    7. VoxelBusters.EssentialKit.BillingServicesCore.iOS.BillingServicesInterface.TryClearingUnfinishedTransactions () (at 00000000000000000000000000000000:0)
    8. VoxelBusters.EssentialKit.BillingServices.HandleOnRetrieveProductsComplete (VoxelBusters.EssentialKit.IBillingProduct[] products, System.String[] invalidProductIds, VoxelBusters.CoreLibrary.Error error) (at 00000000000000000000000000000000:0)
    9. VoxelBusters.EssentialKit.BillingServicesCore.RetrieveProductsInternalCallback.Invoke (VoxelBusters.EssentialKit.IBillingProduct[] products, System.String[] invalidIds, VoxelBusters.CoreLibrary.Error error) (at 00000000000000000000000000000000:0)
    10. VoxelBusters.CoreLibrary.Callback.Invoke () (at 00000000000000000000000000000000:0)
    11. System.Action.Invoke () (at 00000000000000000000000000000000:0)
    12. VoxelBusters.CoreLibrary.CallbackDispatcher.LateUpdate () (at 00000000000000000000000000000000:0)
     
    Last edited: Oct 23, 2021
  43. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Are you on a different locale?
    Can you please update to latest version (2.1.1) and confirm if you still see the issue?
    If you are already up to date, please print the value of the date string and let us know.
     
  44. Sandler

    Sandler

    Joined:
    Nov 6, 2015
    Posts:
    240
    I tried to upgrade from unity 2019 lts to 2020 lts. First i ran into the error that i was missing the APP_ID.
    It was inside in the manifest with the weird prefix \\003 or so.
    I imported, resolved, imported the latest version of native plugins, changed the prefix to the default what google says. At some point the error message changed:


    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime FATAL EXCEPTION: main
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime Process: com.TestGames.MyGame, PID: 22459
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime java.lang.NoClassDefFoundError: Failed resolution of: Lcom/voxelbusters/androidnativeplugin/R$string;
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at com.voxelbusters.nativeplugins.features.gameservices.serviceprovider.google.GooglePlaySignInFragment.onActivityResult(GooglePlaySignInFragment.java:158)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at android.app.Activity.dispatchActivityResult(Activity.java:7789)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at android.app.ActivityThread.deliverResults(ActivityThread.java:4603)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at android.app.ActivityThread.handleSendResult(ActivityThread.java:4652)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:106)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at android.os.Looper.loop(Looper.java:214)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:7050)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at java.lang.reflect.Method.invoke(Native Method)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime Caused by: java.lang.ClassNotFoundException: Didn't find class "com.voxelbusters.androidnativeplugin.R$string" on path: DexPathList[[zip file "/data/app/com.TestGames.MyGame-DuoIoft8rA92V9LUXghiUw==/base.apk"],nativeLibraryDirectories=[/data/app/com.TestGames.MyGame-DuoIoft8rA92V9LUXghiUw==/lib/arm64, /data/app/com.TestGames.MyGame-DuoIoft8rA92V9LUXghiUw==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    2021.11.02 00:59:20.911 22459 22459 Error AndroidRuntime ... 14 more

    Ill do a build on 2019 lts right now. Yeah no problem.
    Ill straightup replace "Standard Assets\VoxelBusters\NativePlugins" and the other plugin folders in the 2020 project with 2019...

    Temp\gradleOut\launcher\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes\com\voxelbusters\androidnativeplugin
    Contains the R$string.class in 20, but the new build doesnt have these files included. Ok now i cant deploy the app, since adb says a app with same name is already there.
    _________________________________________________________________ retry
    Ill try to resetup from the original 2019 version.

    UnauthorizedAccessException: Access to the path "C:\Users\smike\UnityProjects\Eggo2020\Assets\Plugins\Android\native_plugins_lib\res\raw" is denied.
    Seemed to not be able to delete this folder. But seems ok, files are all the same like in 2019. Ill do a build with same settings in 2020.

    Now im back to this failure (didnt see the AppID missing message, but may been lost in logoutput):

    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime FATAL EXCEPTION: main
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime Process: , PID: 3196
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime java.lang.IllegalStateException: A fatal developer error has occurred. Class name: zzf. Start service action: com.google.android.gms.games.service.START. Service Descriptor: com.google.android.gms.games.internal.IGamesService.
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime at com.google.android.gms.common.internal.BaseGmsClient$zza.zza(Unknown Source:20)
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime at com.google.android.gms.common.internal.BaseGmsClient$zzc.zzo(Unknown Source:11)
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime at com.google.android.gms.common.internal.BaseGmsClient$zzb.handleMessage(Unknown Source:48)
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:106)
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime at android.os.Looper.loop(Looper.java:214)
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:7050)
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime at java.lang.reflect.Method.invoke(Native Method)
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    2021.11.02 01:54:08.604 3196 3196 Error AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)


    Ill now import the latest version again 1.5.7p5 and i saved the npsettings file.
    Yeah ill get the same error, missing:

    Error AndroidRuntime java.lang.NoClassDefFoundError: Failed resolution of: Lcom/voxelbusters/androidnativeplugin/R$string;

    Need help
    Upgrade from 2019 to 2020 lts. The R$string isnt included in that path. Any ideas?
     
  45. Sandler

    Sandler

    Joined:
    Nov 6, 2015
    Posts:
    240
    I now deleted the plugin, and reinstalled it for 2019. Now it says:
    Execution failed for task ':launcher:processDebugResources'.
    > Android resource linking failed
    C:\Users\smike\Desktop\AccesableTest\...\Temp\gradleOut\launcher\build\intermediates\merged_manifests\debug\AndroidManifest.xml:192: AAPT: error: resource style/FloatingActivityTheme (aka... :style/FloatingActivityTheme) not found.


    Starting a Gradle Daemon, 1 incompatible and 6 stopped Daemons could not be reused, use --status for details
    > Configure project :launcher
    Exception while marshalling C:\Program Files\Unity\Editor\2019.4.31f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\build-tools\30.0.2\package.xml. Probably the SDK is read-only
    Exception while marshalling C:\Program Files\Unity\Editor\2019.4.31f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools\package.xml. Probably the SDK is read-only
    Exception while marshalling C:\Program Files\Unity\Editor\2019.4.31f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platforms\android-29\package.xml. Probably the SDK is read-only
    Exception while marshalling C:\Program Files\Unity\Editor\2019.4.31f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\tools\package.xml. Probably the SDK is read-only
    Exception while marshalling C:\Program Files\Unity\Editor\2019.4.31f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\build-tools\30.0.2\package.xml. Probably the SDK is read-only
    Exception while marshalling C:\Program Files\Unity\Editor\2019.4.31f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools\package.xml. Probably the SDK is read-only

    And more.
    Is the old version even supported? Do i need to upgrade to the native plugins 2? I just wasted 12 hours on this and i cant upgrade this plugin, nor cant i upgrade unity because of it and i get tons of different errors, that all dont make sense.

    I guess i stay at 2019. This is a real pain in the ass
     
  46. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Looks like you are on pretty old version. 1.x was deprecated nearly 1.5 years back and would recommend to upgrade to 2.x (you should see nearly more than 60% off being an existing user)

    However, even though 1.x still has scope to work, It would be good to upgrade as some libraries used by it are not accepted by google play due its continuous change of policies.

    Coming to the error, looks like the issue is because of unity changes for android project where it expects .androidlib extension. You may need to rename native_plugins_lib to native_plugins_lib.androidlib and also update any references related to it.
     
  47. Sandler

    Sandler

    Joined:
    Nov 6, 2015
    Posts:
    240
    i just upgraded to version 2.0. And yes one difference with the latest 1.5.7 version was that a .androidlib folder was created, but only contained the AndroidManifest.xml. The old version i have seems to still work with google play. but doesnt work with unity 2020. Quite a configuration hell (not ur projects fault). Ill upgrade to v2 via the documention and see if i cant get it to work. Are there any bigger changes that id need to be aware of? (besides renaming of methods) I was using Billing / Clouds / Achievments. Is the old NPSettings files still supported or will i need to recreate it? Thanks!

    (new source code looks super clean)
     
  48. amanda247

    amanda247

    Joined:
    Jan 20, 2015
    Posts:
    6
    Hi,

    I use the free version of the Cross Platform Native Plugin and my main code is set up to use the same code and everything for multiple platforms, such as Android, iOS, and tvOS (apple tv).

    Whenever I build for Apple TV and try to upload the build with xcode, it usually throws errors about the VoxelBusters plugin (I know it doesn't work on Apple TV).

    In order to get it to build for Apple TV, I have to remove the plugin each time from the Unity folder and code to get it to go through. Then after I do the Apple TV build, I revert because I need the plugin for other platforms.

    This seems to be only an issue with the plugin. Is there a way that I don't have to remove it every time in order to build for Apple TV?

    Thanks!
     
  49. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Thanks for upgrading. It was a total rewrite as 1.x limited us a lot for modifying/adding features.

    There are some api changes but very minimal and can be easily fixable. Unfortunately, we have a partial tool which imports the old settings file. If you have lots of data in settings, pls contact us so that we can steps on how to import it. Else, please create a new one and update it.


    Here are some details on what is removed and what is added in v2.
     
  50. Voxel-Busters

    Voxel-Busters

    Joined:
    Feb 25, 2015
    Posts:
    1,832
    Ideally, for unsupported platforms the plugin should be suppressed. As you don't see the behaviour, we will definitely fix it. Please share us the steps of your testing so that we can reproduce the issue.

    Thanks,
    VB Team