Search Unity

[Released] Ultimate Mobile Pro

Discussion in 'Assets and Asset Store' started by stanislav-osipov, Oct 19, 2018.

  1. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    470
    Talk about a coincidence! That's good news because I'm having problems with them. :)
    The usual conflicts between the package manager and the asset store. 6 of them precisely. It certainly drives me nuts.
    I tried a fresh empty project and managed to avoid this, but on updating the actual one that is close to completion, I do get them.
    Like:
    On the Asset Store I see the package's version is 3.4.4, but through the package manager it's 3.4.5 although there's no indication it's verified for Unity 2019.2.x.

    I'm wondering if 3rd party devs (like you) still require the Asset Store's package or if we can do without it entirely and solely rely on the package manager's content in Library / PackageCache / etc.

    Is there a way to switch OFF the 3rd party / Advertisement system?
     
  2. khalid_masood

    khalid_masood

    Joined:
    Feb 18, 2020
    Posts:
    2
    Hi, I need some help with getting image from Different Albums. Can you help me with that?


    var gallery = UM_Application.GalleryService;

    int maxThumbnailSize = 1024;

    gallery.PickImage(maxThumbnailSize, (result) => {
    if (result.IsSucceeded)
    {
    UM_Media media = result.Media;
    Texture2D image = media.Thumbnail;
    }
    else
    {
    Debug.Log("failed to pick an image: " + result.Error.FullMessage);
    }
    });
     
  3. MisakiTesla

    MisakiTesla

    Joined:
    Aug 29, 2019
    Posts:
    5
    Hi, I'm having problems with In-App-Purchasing.I tried connecting but get Error like this:
    Connection failed: 3::Google Play In-app Billing API version is less than 3 QQ截图20200521163934.png Is there any way to update this library ?:)
     
  4. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    For the biggest pain is to detect if something is actually installed. With the new asmdef version defines I will finally be able to use an API instead of making my own workarounds.
    The new version will only be working with UnityAds package :)


    This is my plan for the next update :)

    Sorry, not sure what do you mean here, can you elaborate?
     
  5. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    Sorry, can you explain what exactly are you trying to do?
    Do you want an image picker to start from some predefined local folder?


    Hey, what is your plugin version?

    Because I migrated to the new android billing library suite a while ago :)
    I believe the latest version is 2.2.1
    https://developer.android.com/google/play/billing/billing_library_releases_notes

    The plugin is still using 2.0.3, but I will move to 2.2.1 with the next update.
     
  6. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    470
    Right, good. For now I'll continue using the asset store pack and move on to the library's package with the fresh update when it will be fully supported.

    OK.
    There are On/Off buttons in the UM panel for 3rd Party functions, and some services are set to ON. When I click on the iOS-like button (the rounded rectangle with the circle that slides from left to right), it doesn't toggle the service to OFF. Is it possible to simply deactivate a 3rd Party service from the panel for the sake of doing some tests, without uninstalling this service?

    Now, please prepare for a MEGA WALL OF TEXT in my next post.
     
  7. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    470
    There we go.

    Firstly, the demo scene for Playmaker (UM_InAppExamplePlaymaker) contains no Playmaker content, no FSM, nor any UM related script attached to any game object. Unfortunately I don't have an older version of the asset store UM package that might have had a valid example scene. Is there a way I could download a valid example scene from Github?

    Secondly, I also need to clarify a few things about the IAP Observer function.
    The documentation provides information for three events only but the UM_TransactionObserver action provides five events.
    https://unionassets.com/ultimate-mobile-pro/in-app-purchases-798

    There are 3 typical IAP cases I identify, as far as I know:

    1. An in-app purchase (consumable or non-consumable items)
    2. Pending transactions
    3. Restoring previous acquired non-consumables

    Case 1 is rather straight forward.
    Case 2, that's a bigger question and relates to one of the five unexplained events. More to that later on.
    Case 3, just as important, and different between iOS and Android.

    I need to know under what conditions those five events are fired exactly. Some of them are explicit enough but others confuse me.

    I read that a Restore button needs to implemented on iOS. Fine, I do have one ready to be used in the app's UI.
    So it's a manual operation triggered by the user. From the documentation's description, it appears this event is fired when ALL the transactions have been restored. It concludes a cycle of restoration of purchases, one by one.
    Is that exact?

    Thus the question, how do I confirm a restoration for each transaction, one at a time?
    I took a look into the code:

    Code (CSharp):
    1. switch (transaction.State)
    2.            {
    3.            case UM_TransactionState.Purchased:
    4.            case UM_TransactionState.Restored:
    5.                {
    And it seems that both purchased and restored will fire the same event:

    Code (CSharp):
    1. Fsm.Event(ItemPurchased);
    So, this is how I understand it: when I trigger a restoration (UM_RestorePurchases), I need to use the Observer so it can send an "Item Purchased" event for each non-consumable item (or failed for some reason, perhaps a server bug, technically it should not happen).

    I understand that the Observer should be created during the app's initialization, preferably right after loading the Player's data, so if updates need to be done to the list of the player's acquired non-consumables, the Observer will collect this information (will contact the Apple or Google Play servers), grab the data, and then allow the app to bring changes to the PlayerPrefs (or any other file used for the same purpose).

    This means that after each confirmed restored item, I need to loop back into the UM_TransactionObserver action, right?

    I suppose the action (and therefore the whole UM plugin's part dedicated to IAPs) goes checking if, for each item, there already is a receipt.



    More specific to Android, it reads in the documentation that it's "silent". It is contrasted with iOS where it's said that the iOS device will prompt the user with a question, whereas it seems Android won't do that.
    But do I need a restore button for android too or is it automatic?

    And if it is truly automatic, what happens exactly? How do I handle the restoration? Does it automatically start working the very first time I will use the UM_TransactionObserver action, which will therefore create an Observer?

    So, if I get this right, in the case of Android, when the app starts I load the player's data, then init the UM Billing, obtain a connection, then create the Observer and immediately after that, this Observer will check for each non-consumable item and restore it under the form of data I will use to update the player prefs.
    It seems to be similar to what the Unity IAP codeless system does when the Android app starts.
    https://forum.unity.com/threads/iap-restore-android.536994/

    Thirdly, this brings me to case 2.

    When exactly does "Transactions Pending" event get sent?

    Thanks.
     
  8. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    yea... I need to come up with the better UX, probably replay ON with Available. Because it only means that plugin see this 3rd-party service installed in the project :) Nothing really to deactivate.
     
  9. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    Yea, sorry about that Example scene across different Unity & Playmaker actions is a pain, The actions are pretty straight forward if something is not clear please poke me, I will try to explain.


    Correct.

    The UM_TransactionObserver Will keep firing events for each restored non-consumable item. So it would look like this:
    • UM_RestorePurchases action triggered.
    • UM_TransactionObserver will fire ItemPurchased for each restored item.
    • UM_TransactionObserver will fire TransactionsRestored event when the restoration is completed.
    Nope, you don't need to do that for android.


    The important thing here is to design your app in a way that you ALWAYS ready to process ItemPurchased from the UM_TransactionObserver. Point is purchased event ca be delay by HUGE number of reason, and frankly, you don't need to care about it, just make sure you subscribed to it at the app startup (no worries you do not miss anything you will only get events after you subscribed)

    There are several cases when you can get an event from the UM_TransactionObserver
    * You app crashed (who know why) in the middle fo transaction process, but user was able to pay, so the next time you start the app you will get notified about that.
    * There was a delayed purchased (like approve from parents, etc)
    * On Android if that was fresh install user cached purposes might not be ready yet. So even without doing something on the 2nd r 3rd app start Android realizes there is some purchases and will notify you about that.


    But my point is you don't care where the even is coming from. Some Error Or delays purchase or the restoration flow. Just make sure you can process it correctly at any app state.
    Reward users with times, show some congrats popup maybe, and finish the transaction.
     
  10. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    470
    Okay thanks for the clarifications!
    The app crashed, the user restarts it, observer resumes where the transaction(s) was/were left.
    And this is true for both iOS and Android.
    At first I'd have thought this case does send the "Transactions Pending" event at restart, but I don't see the point of this since the observer will immediately check if the transaction was valid or not and send the appropriate event; "Item Purchased" or "Item Purchase Failed". But maybe I'm wrong?

    That one is the Ask to Buy process. Now this a case that is going to send the "Pending Transactions" event. Am I right?
    A kid wants to buy some stuff in app, presses on the item's BUY button, which sends a request to mom or dad through the smartphone.
    This is to say that the transaction queue is on hold until the parent in the family group validates the purchase or refuses it.
    Typically, this would allow me to show a popup like "waiting for confirmation" and perhaps graying the item's card, or displaying that same message over this same item card.

    If a transaction takes time to be completed, is it going to send "Pending Transactions" too is it just going to wait until it's processed to either tell the app that the purchase worked or failed?

    On Google Play, this is managed through Purchase Approval. I suppose the process will be the same, sending the same event under similar conditions.
     
  11. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    It can be pending or purchased. Pending is a system state, for Android it could take a bit to process the transaction for IOS this is Ask To Buys case mostly. Defining transaction state is up to the native SDK, the plugin will only make sure you'll get all the info.

    yep.

    This is a good question, I've just added additional docs into the code for the pending state:

    Android
    The transaction is pending and the player will be informed when it's done.
    For more information on how to handle pending transactions see
    https://developer.android.com/google/play/billing/billing_library_overview.
    https://developer.android.com/google/play/billing/billing_library_overview#pending

    iOS
    A transaction that is in the queue, but its final status is pending external action such as Ask to Buy.
     
  12. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    470
    ¿The next big thing is to make sure that since all the content is on the device, the user cannot find or modify certain files that would allow him to cheat the transaction verifications.
    I was reading this. Although it's relevant to Unity's IAP system, is there something in UltimateMobile I should use on the device's side, inside the app, to reproduce as much as possible what Unity says devs should do?
     
  13. MisakiTesla

    MisakiTesla

    Joined:
    Aug 29, 2019
    Posts:
    5
    i am using 2020.4 which include this version:
    p.png
    expecting your update;)
     
  14. JohnRBG

    JohnRBG

    Joined:
    Jan 13, 2020
    Posts:
    1
    have you had this error occur randomly? 99% of IAP's work fine. but occasionally a player will have this error when attempting to make a purchase and it keeps happening.
     

    Attached Files:

  15. SebastianMihali

    SebastianMihali

    Joined:
    Sep 12, 2019
    Posts:
    5
    Hi,
    I was wandering if with this assets I can make the run run in background and collect location data.
    I know that i can do that by making a service in android and ios but i'm searching for a faster way to do it
     
  16. khalid_masood

    khalid_masood

    Joined:
    Feb 18, 2020
    Posts:
    2
    basically when I use this, it always pick image from camera gallery. I want to get image from all folders like insta,whatsapp and snapchat.
     
  17. Maplewing

    Maplewing

    Joined:
    Jun 12, 2013
    Posts:
    2
    Hi! I want to know that if I can use code to add product list into the UM_InAppService in Android.
    Because I use a table to organize our IAP items, and we don't want to set them again with the menu......

    I saw the video and it shows that we can generate a item list and use "Connect" to import them.
    But when I use the plugin, I cannot find the method to do this.......
     
  18. Colin_MacLeod

    Colin_MacLeod

    Joined:
    Feb 11, 2014
    Posts:
    334
    Hey sorry to resurrect an old-ish post, Stan, but we're looking for this feature too (selecting an entry when you UM_WheelPickerDialog). Is it something you're likely to add or can you please give me some pointers how we'd add it ourselves?
     
  19. ImagneApps

    ImagneApps

    Joined:
    Apr 30, 2020
    Posts:
    1
    Hello! I need your help.

    Unity : 2019.3.11f1
    Ultimate mobile pro: 2020.4

    Error: player sign-in Game Services (Google Play). Moreover:

    - testing the game in unity - no errors, Sign In StatusCode: SUCCESS

    - I compile and run apk on my phone - no errors, Sign In StatusCode: SUCCESS

    - upload to Google Play and after publication download / install from it - Sign In StatusCode: SIGN_IN_REQUIRED


    I try to connect in two ways - the result is the same:

    First way Implementing player sign-in:

    using UnityEngine;
    using SA.Android.GMS.Common;
    using SA.Android.GMS.Auth;

    public class GameServices : MonoBehaviour

    {
    void Awake()

    {
    int result = AN_GoogleApiAvailability.IsGooglePlayServicesAvailable();

    if (result != AN_ConnectionResult.SUCCESS)
    {
    Debug.Log("Play Services does not available on this device. Resolving....");
    AN_GoogleApiAvailability.MakeGooglePlayServicesAvailable(resolution => {
    if (resolution.IsSucceeded)
    {
    Debug.Log("Resolved! Play Services is available on this device");
    Debug.Log("Play Services Sign In started....");

    var builder = new AN_GoogleSignInOptions.Builder(AN_GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
    builder.RequestId();
    builder.RequestEmail();
    builder.RequestProfile();

    var gso = builder.Build();
    var client = AN_GoogleSignIn.GetClient(gso);

    Debug.Log("SignInNoSilent Start");

    client.SignIn(signInResult => {
    Debug.Log($"Sign In StatusCode: {signInResult.StatusCode}");
    if (signInResult.IsSucceeded)
    {
    Debug.Log("SignIn Succeeded");
    // UpdateUIWithAccount(signInResult.Account);
    }
    else
    {
    Debug.LogError($"SignIn filed: {signInResult.Error.FullMessage}");
    }
    });
    }
    else
    {
    Debug.LogError($"Failed to resolve: {resolution.Error.Message}");
    }
    });
    }

    else
    {
    Debug.Log("Play Services is available on this device");
    Debug.Log("Play Services Sign In started....");

    var builder = new AN_GoogleSignInOptions.Builder(AN_GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
    builder.RequestId();
    builder.RequestEmail();
    builder.RequestProfile();
    var gso = builder.Build();
    var client = AN_GoogleSignIn.GetClient(gso);

    Debug.Log("SignInNoSilent Start");

    client.SignIn(signInResult => {
    Debug.Log($"Sign In StatusCode: {signInResult.StatusCode}");
    if (signInResult.IsSucceeded)
    {
    Debug.Log("SignIn Succeeded");
    // UpdateUIWithAccount(signInResult.Account);
    }
    else
    {
    Debug.LogError($"SignIn filed: {signInResult.Error.FullMessage}");
    }
    });
    }
    }
    }

    adb logcat (Sign In success):

    05-29 20:28:35.636 5849 5911 I Unity : Play Services is available on this device
    05-29 20:28:35.636 5849 5911 I Unity : GameServices:Awake()
    05-29 20:28:35.636 5849 5911 I Unity :
    05-29 20:28:35.636 5849 5911 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
    05-29 20:28:35.636 5849 5911 I Unity :
    05-29 20:28:35.637 5849 5911 I Unity : Play Services Sign In started....
    05-29 20:28:35.637 5849 5911 I Unity : GameServices:Awake()
    05-29 20:28:35.637 5849 5911 I Unity :
    05-29 20:28:35.637 5849 5911 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
    05-29 20:28:35.637 5849 5911 I Unity :
    05-29 20:28:35.800 5849 5911 I Unity : SignInNoSilent Start
    05-29 20:28:35.800 5849 5911 I Unity : GameServices:Awake()
    05-29 20:28:35.800 5849 5911 I Unity :
    05-29 20:28:35.800 5849 5911 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
    05-29 20:28:35.800 5849 5911 I Unity :
    05-29 20:28:39.776 5849 5911 I Unity : Sign In StatusCode: SUCCESS
    05-29 20:28:39.776 5849 5911 I Unity : <>c:<Awake>b__0_2(AN_GoogleSignInResult)
    05-29 20:28:39.776 5849 5911 I Unity : System.Action`1:Invoke(T)
    05-29 20:28:39.776 5849 5911 I Unity : System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
    05-29 20:28:39.776 5849 5911 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
    05-29 20:28:39.776 5849 5911 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
    05-29 20:28:39.776 5849 5911 I Unity :
    05-29 20:28:39.776 5849 5911 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
    05-29 20:28:39.776 5849 5911 I Unity :
    05-29 20:28:39.777 5849 5911 I Unity : SignIn Succeeded
    05-29 20:28:39.777 5849 5911 I Unity : <>c:<Awake>b__0_2(AN_GoogleSignInResult)
    05-29 20:28:39.777 5849 5911 I Unity : System.Action`1:Invoke(T)
    05-29 20:28:39.777 5849 5911 I Unity : System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
    05-29 20:28:39.777 5849 5911 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
    05-29 20:28:39.777 5849 5911 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
    05-29 20:28:39.777 5849 5911 I Unity :
    05-29 20:28:39.777 5849 5911 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

    adb logcat (Sign In fail):

    05-29 20:19:59.023 32607 32642 I Unity : Play Services is available on this device
    05-29 20:19:59.023 32607 32642 I Unity : GameServices:Awake()
    05-29 20:19:59.023 32607 32642 I Unity :
    05-29 20:19:59.023 32607 32642 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
    05-29 20:19:59.023 32607 32642 I Unity :
    05-29 20:19:59.024 32607 32642 I Unity : Play Services Sign In started....
    05-29 20:19:59.024 32607 32642 I Unity : GameServices:Awake()
    05-29 20:19:59.024 32607 32642 I Unity :
    05-29 20:19:59.024 32607 32642 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
    05-29 20:19:59.024 32607 32642 I Unity :
    05-29 20:19:59.080 32607 32642 I Unity : SignInNoSilent Start
    05-29 20:19:59.080 32607 32642 I Unity : GameServices:Awake()
    05-29 20:19:59.080 32607 32642 I Unity :
    05-29 20:19:59.080 32607 32642 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
    05-29 20:19:59.080 32607 32642 I Unity :
    05-29 20:20:05.774 32607 32642 I Unity : Sign In StatusCode: SIGN_IN_REQUIRED
    05-29 20:20:05.774 32607 32642 I Unity : <>c:<Awake>b__0_2(AN_GoogleSignInResult)
    05-29 20:20:05.774 32607 32642 I Unity : System.Action`1:Invoke(T)
    05-29 20:20:05.774 32607 32642 I Unity : System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
    05-29 20:20:05.774 32607 32642 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
    05-29 20:20:05.774 32607 32642 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
    05-29 20:20:05.774 32607 32642 I Unity :
    05-29 20:20:05.774 32607 32642 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
    05-29 20:20:05.774 32607 32642 I Unity :
    05-29 20:20:05.775 32607 32642 E Unity : SignIn filed: 4::SIGN_IN_REQUIRED
    05-29 20:20:05.775 32607 32642 E Unity : <>c:<Awake>b__0_2(AN_GoogleSignInResult)
    05-29 20:20:05.775 32607 32642 E Unity : System.Action`1:Invoke(T)
    05-29 20:20:05.775 32607 32642 E Unity : System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
    05-29 20:20:05.775 32607 32642 E Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
    05-29 20:20:05.775 32607 32642 E Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
    05-29 20:20:05.775 32607 32642 E Unity :
    05-29 20:20:05.775 32607 32642 E Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

    Second way Implementing player sign-in:

    using UnityEngine;
    using SA.CrossPlatform.GameServices;

    public class GameServices : MonoBehaviour
    {

    void Awake()
    {
    var client = UM_GameService.SignInClient;
    if (client.PlayerInfo.State != UM_PlayerState.SignedIn)
    {
    client.SingIn((result) =>
    {
    if (result.IsSucceeded)
    {
    Debug.Log("Player is signed");
    }
    else
    {
    Debug.Log("Sing in failed: " + result.Error.FullMessage);
    }
    });
    }
    }

    }

    adb logcat (Sign In success):

    05-29 20:45:36.793 21963 21997 I Unity : Player is signed
    05-29 20:45:36.793 21963 21997 I Unity : System.Action`1:Invoke(T)
    05-29 20:45:36.793 21963 21997 I Unity : SA.Foundation.Events.SA_Event`1:Invoke(T)
    05-29 20:45:36.793 21963 21997 I Unity : SA.CrossPlatform.GameServices.UM_AbstractSignInClient:<SingIn>b__5_0(SA_Result)
    05-29 20:45:36.793 21963 21997 I Unity : System.Action`1:Invoke(T)
    05-29 20:45:36.793 21963 21997 I Unity : System.Action`1:Invoke(T)
    05-29 20:45:36.793 21963 21997 I Unity : System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
    05-29 20:45:36.793 21963 21997 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
    05-29 20:45:36.793 21963 21997 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
    05-29 20:45:36.793 21963 21997 I Unity :
    05-29 20:45:36.793 21963 21997 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

    adb logcat (Sign In fail):

    05-30 16:43:37.348 26698 26732 I Unity : Sing in failed: 4::SIGN_IN_REQUIRED
    05-30 16:43:37.348 26698 26732 I Unity : System.Action`1:Invoke(T)
    05-30 16:43:37.348 26698 26732 I Unity : SA.Foundation.Events.SA_Event`1:Invoke(T)
    05-30 16:43:37.348 26698 26732 I Unity : SA.CrossPlatform.GameServices.UM_AbstractSignInClient:<SingIn>b__5_0(SA_Result)
    05-30 16:43:37.348 26698 26732 I Unity : System.Action`1:Invoke(T)
    05-30 16:43:37.348 26698 26732 I Unity : System.Action`1:Invoke(T)
    05-30 16:43:37.348 26698 26732 I Unity : System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
    05-30 16:43:37.348 26698 26732 I Unity : UnityEngine.AndroidJavaProxy:Invoke(String, Object[])
    05-30 16:43:37.348 26698 26732 I Unity : UnityEngine._AndroidJNIHelper:InvokeJavaProxyMethod(AndroidJavaProxy, IntPtr, IntPtr)
    05-30 16:43:37.348 26698 26732 I Unity :
    05-30 16:43:37.348 26698 26732 I Unity : (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

    I really need your help! I don’t understand why in one and the same program, on the same device, in some cases it sign-in, but in some it doesn’t.
     
  20. JuJuCoder

    JuJuCoder

    Joined:
    Dec 10, 2013
    Posts:
    30
    Hi again
    We managed to port our project to Unity 2018.4 LTS and then we updated from Ultimate Mobile 10.3 to ultimate Mobile Pro to the lastest version (a big jump). We are planing to support iOS and Android both.

    I noticed that leaderboards have gone though a big interface change and I need to recode most of it. However the most serious stuff is that the new version did not contain GoogleProductTemplate.cs. What happended to it? This is important since we are also using Simple In-App Purchase System (SIS) and there IAPArticle -class requires it. The error is due to because 'AN_InAppType' could not be found.

    Can you tell how to proceed?
     
  21. JuJuCoder

    JuJuCoder

    Joined:
    Dec 10, 2013
    Posts:
    30
    One more question Stan. Could you please share the code that loads top scores from leaderboards (iOS and Android), the real cross platform code not iOS native or Android native ones. I think that you have not included this in your cross platform solution. Yes it can be found in your solution and it can be done, but I hate when I need to recode some asset again. It is also a nightmare to kee up with the changes if I custom update your base code. I am starting to recode this but I hope that you share you solution before I am finnished.

    Also note that you have typos in your API:s

    UM_GameService.SignInClient.SingIn
    UM_GameService.SignInClient.SingOut
     
  22. JuJuCoder

    JuJuCoder

    Joined:
    Dec 10, 2013
    Posts:
    30
    It also seems that our iOS Xcode build is now broken too.

    Showing All Errors Only:

    /iOSBuild/Libraries/Plugins/StansAssets/NativePlugins/IOSNativePro/XCode/StoreKit/ISN_SKInAppManager.mm:4:9: 'ISN_SKProductsRequestDelegate.h' file not found

    Also:
    /iOSBuild/Libraries/Plugins/StansAssets/NativePlugins/IOSNativePro/XCode/GameKit/ISN_GKAchievementManager.m:3:9: fatal error 'ISN_GKCommunication.h' file not found

    Update 1.6.2020
    I managed to get a bit further. I noticed that you have disabled some of the Xcode .h-files by renaming them to .h.txt in StansAssets/NativePlugins/IOSNativePro/XCode/GameKit/ I manually renamed them back to .h files and my Xcode build got bit further. It might be worth mentioning that you have these .h files in two different places: Xcode and XCodeDisabled folders. Is there any difference?

    Well anyways my Xcode build still gives me errors, but they are different kind of errors:


    Showing All Errors Only
    Undefined symbols for architecture arm64:

    Undefined symbol: _OBJC_CLASS_$_ISN_GKScoreRequest
    Undefined symbol: _OBJC_CLASS_$_ISN_GKScoreLoadResult
    Undefined symbol: _OBJC_CLASS_$_ISN_GKLeaderboardsResult
    Undefined symbol: _OBJC_CLASS_$_ISN_GKLeaderboard
    Undefined symbol: _OBJC_CLASS_$_ISN_IdentityVerificationSignatureResult
    Undefined symbol: _OBJC_CLASS_$_ISN_GKLocalPlayerListener
    Undefined symbol: _OBJC_CLASS_$_ISN_GKLocalPlayer
    Undefined symbol: _OBJC_CLASS_$_ISN_GKSavedGameLoadResult
    Undefined symbol: _OBJC_CLASS_$_ISN_GKSavedGame
    Undefined symbol: _OBJC_CLASS_$_ISN_GKSavedGameFetchResult
    Undefined symbol: _OBJC_CLASS_$_ISN_GKResolveSavedGamesRequest
    Undefined symbol: _OBJC_CLASS_$_ISN_GKGameCenterViewControllerShowResult
    Undefined symbol: _OBJC_CLASS_$_ISN_GKSavedGameSaveResult
    Undefined symbol: __ISN_AV_ShowPlayerViewController
    Undefined symbol: __ISN_WP_ShareMedia
    Undefined symbol: __ISN_GKPlayer_LoadPhotoForSize
    Undefined symbol: __ISN_WP_ShareText
    Undefined symbol: _OBJC_CLASS_$_ISN_GKScore
    Undefined symbol: __ISN_SendTextMessage
    Undefined symbol: __ISN_SOCIAL_PresentActivityViewController
    Undefined symbol: __ISN_FbPost
    Undefined symbol: __ISN_InstaShare
    Undefined symbol: _OBJC_CLASS_$_ISN_GKAchievementsResult
    Undefined symbol: _OBJC_CLASS_$_ISN_GKAchievement
    Undefined symbol: __ISN_SendMail
    Undefined symbol: _OBJC_CLASS_$_ISN_GKPlayer
    Undefined symbol: __ISN_TwPost


    So any idea on this?
     
    Last edited: Jun 1, 2020
  23. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    Can you please sepsify what exact product info you would need to get?
    Is something missing for you in the `IProduct` class?
    https://api.stansassets.com/ultimate-mobile/SA.CrossPlatform.InApp.UM_iProduct.html
     
  24. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    Thx, I will fix the typos with the next update
    I hope this article will be helpful:
    https://github.com/StansAssets/com....Leaderboards#creating-in-game-leaderboards-ui

    @JuJuCoder About the other problem this is a known issue with Unity 2018 AssedataBase unfortunately.
    You just need to manually remove *txt extensions from all the files in the XCode folder.

    If you will have trouble with that, please DM me I will try to help ASAP.
     
  25. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    470
    Hi,
    I've been doing tests but there are oddities.
    On your UM_TransactionObserver.cs:
    Code (CSharp):
    1. public FsmEvent TransactionsCanceled;
    This event is used nowhere else in the script so it does not look like there's a way to receive cases of cancellation.
     
  26. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    470
    Maybe the explanation text for the UM_Restore Purchases action should specify that it must only be used for iOS publishing (ergo, the Android version of the app does not need to use that action at all).

    Now, checking the doc here, I read this:

    How do I call that "Consume" method through Playmaker to consume a product that has just been correctly purchased?
    I need to be able to tell the Android inventory that a specific item has been consumed, so the player can buy it again.

    Now, something else.
    First of all, I cannot find this API settings menu for iOS IAP support. Was it removed in a recent update? Or maybe it's only visible in iOS Native Pro?

    Secondly, there is this UM_Finish Transaction.
    It is not said in the doc that the "finishing" phase is done automatically for Android so I suppose one needs to always end a transaction manually for Android publishing.

    But for iOS, if for the API settings (which I cannot find) I were to use "automatic" for Transactions Handling Mode, I would logically not need to end transactions manually with this action?
     
  27. James15478

    James15478

    Joined:
    Apr 2, 2013
    Posts:
    91
    Hi there @lacost ,

    I was wondering when authenticating GameCenter in iOS what ID is returned?
    Since Apple deprecated GameCenterUsersID and now we're supposed to use either teamPlayerID or GamePlayerID. Can we access these IDs separately?
     
    Last edited: Jun 15, 2020
  28. Starbox

    Starbox

    Joined:
    Sep 17, 2014
    Posts:
    470
    As a side note regarding Google Play billing, this website provides information in a very clear and concise way.
     
  29. RoyalCoder

    RoyalCoder

    Joined:
    Oct 4, 2013
    Posts:
    301
    Hi Stan,

    Does the UM_Application.GalleryService supports multiple media picking for Android & iOS?
    Thanks!
     
  30. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    It still returns playerID and the playerId is still working in iOS 13, though it likely will stop working in a future version.

    I will add:
    gamePlayerID
    teamPlayerID

    With the next update.
     
  31. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    Only a single image picker atm.
     
  32. James15478

    James15478

    Joined:
    Apr 2, 2013
    Posts:
    91
    @lacost Thanks! Do you know when that next version will be ready? I just bought the asset. Also, if we want to test and try to get the teamPlayerID, where should we do that in the code of the assets? (In the current version of Ultimate Mobile)
    We don't want to mix playerIDs and teamPlayerIDs on our backend so would rather start immediately with teamPlayerID, which is why I ask.
    EDIT: BTW in this video from Apple they mention that sometimes those identifiers aren't available in rare cases, but it would be good to know that as well from the plug in, because it might happen even if the player successfully authenticated (around 7:52):
    https://developer.apple.com/videos/play/wwdc2019/615/
    https://developer.apple.com/documentation/gamekit/gkplayer/3325680-scopedidsarepersistent
     
    Last edited: Jun 17, 2020
  33. kojiMarunouchi

    kojiMarunouchi

    Joined:
    Sep 25, 2019
    Posts:
    8
    After importing ultimate mobile pro, this error occurs. If there is anyone who is familiar with this error, Would you teach me how to address it?

    Unity version is Unity 2019.2.9 f1 by the way.

    Assets/Plugins/StansAssets/com.stansassets.foundation/Runtime/UIElements/Controls/ButtonStrip.cs(181,24): error CS1061: 'Button' does not contain a definition for 'clicked' and no accessible extension method 'clicked' accepting a first argument of type 'Button' could be found (are you missing a using directive or an assembly reference?)
     
  34. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    This is specific for Unity 2019.2 I will fix this issue and update the asset store release shortly, so far you can just comment our a line that does give you a problem.

    The fix is coming!
    https://github.com/StansAssets/com.stansassets.foundation/pull/42


    I do the release every month, but please PM me, I will send you a beta version, I am going to work on it today, so it should be ready tomorrow.
    Thank you!
     
    Last edited: Jun 19, 2020
  35. EFFalcon2

    EFFalcon2

    Joined:
    Apr 28, 2014
    Posts:
    17
    Since upgrading to the most recent 2020.6 release from 2020.4 i'm getting a bunch of build errors in XCode relating to the native functions, i can see the .mm files under the native plugins
    Any thoughts?


    Undefined symbols for architecture arm64:
    "__ISN_SK_RefreshRequest", referenced from:
    _ISN_SKNativeAPI__ISN_SK_RefreshRequest_m3B83536A2178487C479BF39CAE342D50C1F8487A in Bulk_SA.iOS_0.o
    _ISN_SKNativeAPI_RefreshRequest_mB929FFCE9DA456EC9F05F84038E4C230040E07BB in Bulk_SA.iOS_0.o
    (maybe you meant: _ISN_SKNativeAPI__ISN_SK_RefreshRequest_m3B83536A2178487C479BF39CAE342D50C1F8487A)
     

    Attached Files:

    Last edited: Jun 25, 2020
  36. EFFalcon2

    EFFalcon2

    Joined:
    Apr 28, 2014
    Posts:
    17
    I'm also getting some issues submitted Leaderboard Scores on IOS.
    Android works fine, the leaderboard ID's appear to be correct.

    The callback function returns a success result and i can see "Score submitted successfully" in XCode, however i also see the below.

    IOSNative: _ISN_GKLeaderboar_ReportScore JSON parsing error: Error Domain=JSONModelErrorDomain Code=1 "Invalid JSON data. Required JSON keys are missing from the input. Check the error user information." UserInfo={kJSONModelMissingKeys=(
    "m_player",
    "m_formattedValue"
    ), NSLocalizedDescription=Invalid JSON data. Required JSON keys are missing from the input. Check the error user information., kJSONModelKeyPath=m_scores[0]}
     
  37. nikunjk21

    nikunjk21

    Joined:
    Jan 12, 2014
    Posts:
    26
    I'm facing the same problem. After importing the asset I got this error. To fix it, I commented those lines.
    But after that I got bunch of other errors. See below screenshots.

    I'm using Unity 2019.1.14
    Screenshot 2020-06-27 at 11.59.48 AM.png Screenshot 2020-06-27 at 12.01.51 PM.png
     
  38. Kellyrayj

    Kellyrayj

    Joined:
    Aug 29, 2011
    Posts:
    936
    Cheers friends!

    I am having some issues when I attempt to build an iOS app from Xcode. This is the error I am receiving. Any thoughts on how I could proceed?

    Code (CSharp):
    1. 'GoogleMobileAds/GoogleMobileAds.h' file not found
     
  39. James15478

    James15478

    Joined:
    Apr 2, 2013
    Posts:
    91
  40. nsmith1024

    nsmith1024

    Joined:
    Mar 18, 2014
    Posts:
    870
    Hello, im thinking of buying this, but i need to be able to allow the user to pick music files from the phones gallery, like mp3 etc? Can this do that?
     
  41. kierpus

    kierpus

    Joined:
    Aug 6, 2017
    Posts:
    3
    Hello, I have some issues with advertisements on IOS build.
    After I build in XCode into my phone, there is Error:
    Video Not ready... banner
    SA.CrossPlatform.Advertisement.<WaitForLoad>d__5:MoveNext()
    UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
    (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)
    also there is error in Unity Console:

    Assets/Plugins/StansAssets/CrossPlatform/UltimateMobile/Runtime/Services/Advertisement/Platforms/UnityAdsClient/UM_UnityBaseAds.cs(21,22): warning CS0618: 'Monetization' is obsolete: 'Deprecated. Please use Advertisements'

    Thanks!
     
  42. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    Thx for the report, the issue is fixed!


    I am always open to adding new features. Can you point me to the native API docus that you think are currently missing in the plugin? Thank you!

    Hey, we have quite a lot of Music Player functionality:
    https://api.stansassets.com/ios-native/SA.iOS.MediaPlayer.html
    Feel free to also check out all the Media Player related articles here:
    https://github.com/StansAssets/com.stansassets.ios-native/wiki
     
  43. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    Hey, are you using the latest advertisement addon?
     
  44. James15478

    James15478

    Joined:
    Apr 2, 2013
    Posts:
    91
    @lacost
    I'm referring mostly to this:
    https://developer.apple.com/documentation/gamekit/gkaccesspoint
    described here:
    https://developer.apple.com/videos/play/wwdc2020/10145/
     
  45. kierpus

    kierpus

    Joined:
    Aug 6, 2017
    Posts:
    3
    Hello,
    Thanks for your replay. After the updated addon, this error was fixed. But now when I try to display ads I received this in console

    Failed to load banner ads: Failed to receive ad with error: (null) System.Action`1:Invoke(T) SA.CrossPlatform.Advertisement.<>c__DisplayClass3_0:<HandleAdFailedToLoad>b__0() System.Action:Invoke() StansAssets.Foundation.Async.MainThreadDispatcherBase:Update() System.Action:Invoke()

    Failed to load RewardedAds: Failed to receive ad with error: (null) System.Action`1:Invoke(T) SA.CrossPlatform.Advertisement.<>c__DisplayClass3_0:<HandleAdFailedToLoad>b__0() System.Action:Invoke() StansAssets.Foundation.Async.MainThreadDispatcherBase:Update() System.Action:Invoke()

    Failed to load NonRewardedAds: Failed to receive ad with error: (null) System.Action`1:Invoke(T) SA.CrossPlatform.Advertisement.<>c__DisplayClass3_0:<HandleAdFailedToLoad>b__0() System.Action:Invoke() StansAssets.Foundation.Async.MainThreadDispatcherBase:Update() System.Action:Invoke().

    Failed to load NonRewardedAds: Campaign not found System.Action`1:Invoke(T) UnityEngine.Advertisements.Platform.<>c__DisplayClass39_0:<UnityAdsDidError>b__0() System.Action:Invoke() UnityEngine.Advertisements.Utilities.CoroutineExecutor:Update()

    E/UnityAds: +[USRVApiSdk WebViewExposed_logError:callback:] (line:57) :: Show invocation failed: Campaign not found 2020-07-08 10:06:33.873872+0200

    Thanks
     
    Last edited: Jul 8, 2020
  46. Colin_MacLeod

    Colin_MacLeod

    Joined:
    Feb 11, 2014
    Posts:
    334
    Hey @lacost Did you ever reply to this one?

    We really need to be able to select a value in the UM_WheelPickerDialog. Could you help point me in the right direction to implement this?
     
  47. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    Can you please add this here:
    https://github.com/StansAssets/com.stansassets.ios-native/issues

    Seems like an easy feature to implement. I will add to the next plugin release.

    Looks like this is not related to the plugin anymore but to your Ad complain settings.
     
  48. stanislav-osipov

    stanislav-osipov

    Joined:
    May 30, 2012
    Posts:
    1,790
    Sorry, I probably missed that. I know that we recently added feature to have an ability to start the picker with predefined default value:
    https://github.com/StansAssets/com.stansassets.ultimate-mobile/wiki/Wheel-Picker-Dialog

    Or what you want is to be able to change value when the picker is active?
    What is the use case for that since devise screen is blocked by the picker.
     
  49. James15478

    James15478

    Joined:
    Apr 2, 2013
    Posts:
    91
    stanislav-osipov likes this.
  50. Colin_MacLeod

    Colin_MacLeod

    Joined:
    Feb 11, 2014
    Posts:
    334