Search Unity

[Solved] Play store Sign in Error

Discussion in 'Unity IAP' started by TGKG, Jun 24, 2017.

Thread Status:
Not open for further replies.
  1. TGKG

    TGKG

    Joined:
    Dec 31, 2014
    Posts:
    180
    I have created a test IAP program and uploaded the apk to my developer account. Released it for Beta testing. Added beta testers. I have accepted the tester requirement. The test game shows in the Play store. I install the game. It installs okay and the game begins. OnInitialized returns a PASS. When I select an IAP button to buy something a Google Play window pops up with the following error:
    "ERROR
    Authentication is required. You need to sign into your Google Account."

    I am signed in?? I have tried both my developer account used to upload the test game and another google account and both come back with the same error message.

    I have tried what the Google forums say to fix this error with no luck??

    Has anyone else had this happen?? Does anyone have a solution??

    Thanks in advance.
     
  2. ap-unity

    ap-unity

    Unity Technologies

    Joined:
    Aug 3, 2016
    Posts:
    1,519
    @TGKG,

    Could you try clearing the cache for the Google Play Store. You can do this by going to:
    Settings -> Apps -> Google Play Store > Storage -> Clear Data

    (This process might be slightly different depending on your version of Android.)
     
  3. TGKG

    TGKG

    Joined:
    Dec 31, 2014
    Posts:
    180
    - Cleared the cache and still have the same error.
    - I have confirmed that I am signed into my Google Account. I have actually tried signing in with 2 different Google accounts. My other tester has also downloaded the test app and is getting the same error.
    - I have deleted the play store and added it back
    - I have removed and reinstalled my Google Accounts to my device
    I always get the same error message.

    Any suggestions in what I am missing would be appreciated. For the life of me I cannot find anything wrong!!
    Thanks in advance.

    Here is the error:
    Screenshot_2017-06-26-21-05-21.png

    There is only the 1 scene in this test app and the code is attached to a panel of the Canvas. I have 5 buttons that award consumables of (100 coins, 500 coins, 1000 coins, 10 scatter bombs, 5 splash bombs), 1 button to award a non-consumable jumbo jet and 1 button that does not have a product ID (to generate an error message).
    footerText.text messages are displayed in the bottom left panel area.
    coinText and bombText are displayed in the bottom right panel

    Here is the entire code

    Code (CSharp):
    1. using System;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.Purchasing;
    5. using UnityEngine.UI;       //for testing only
    6.  
    7. // Deriving the Purchaser class from IStoreListener enables it to receive messages from Unity Purchasing.
    8. public class MyIAPPurchaser : MonoBehaviour, IStoreListener
    9. {
    10.     //turn this script into a singleton so that it can be called from anywhere
    11.     public static MyIAPPurchaser instance;
    12.  
    13.  
    14.  
    15.     private static IStoreController m_StoreController;          // The Unity Purchasing system.
    16.     private static IExtensionProvider m_StoreExtensionProvider; // The store-specific Purchasing subsystems.
    17.  
    18.     // Product identifiers for all products (consumable, non-consumable, and subscription)capable of being purchased:
    19.     // We declare their store specific mapping to Unity Purchasing's AddProduct, below.
    20.     public static string kProductIDConsumable = "consumable";       //not used
    21.     public static string kProductIDNonConsumable = "nonconsumable";       //not used
    22.     public static string kProductIDSubscription = "subscription";       //not used
    23.  
    24.     //test data *********************************
    25.     /* Product ID,      Title,           Descripti on
    26.         * coin.100,    Title: 100 Coins,   Description: You will get 100 coins added to your coin count
    27.         * coin.500,    Title: 500 Coins,   Description: You will get 500 coins added to your coin count
    28.         * coin.1000,   Title: 1000 Coins,  Description: You will get 1000 coins added to your coin count
    29.         * bomb.scatter.10, Title: 10 Scatter bombs,    Description: You will get 10 scatter bombs added to your bomb count
    30.         * bomb.splash.5,   Title: 5 Splash Bombs,  Description: You will get 5 splash bombs added to your bomb count
    31.         * plane.jumbo,     Title: Jumbo Jet,   Description: You will get the Jumbo Jet plane FOREVER!!!
    32.         */
    33.     public static string Product_100_coin = "coin.100";
    34.     public static string Product_500_coin = "coin.500";
    35.     public static string Product_1000_coin = "coin.1000";
    36.     public static string Product_10_scatter = "bomb.scatter.10";
    37.     public static string Product_5_splash = "bomb.splash.5";
    38.     public static string Product_plane_jumbo = "plane.jumbo";
    39.      
    40.     //example data *********************************
    41.  
    42.     // Apple App Store-specific product identifier for the subscription product.
    43.     private static string kProductNameAppleSubscription = "com.unity3d.subscription.new";
    44.  
    45.     // Google Play Store-specific product identifier subscription product.
    46.     private static string kProductNameGooglePlaySubscription = "com.unity3d.subscription.original";
    47.  
    48.     //for testing only*********
    49.     public Text footerText;
    50.     public Text coinText;
    51.     public Text bombText;
    52.     private int numOfCoins;
    53.     private int numOfScatterBombs;
    54.     private int numOfSplashBombs;
    55.  
    56.  
    57.  
    58.     private void Awake()
    59.     {
    60.         instance = this;
    61.  
    62.         displayFooterTextClear();
    63.     }
    64.  
    65.     void Start()
    66.     {
    67.         // If we haven't set up the Unity Purchasing reference
    68.         if (m_StoreController == null)
    69.         {
    70.             // Begin to configure our connection to Purchasing
    71.             InitializePurchasing();
    72.         }
    73.     }
    74.  
    75.  
    76.  
    77.     //Initializes the IAP builder, adds products that are available for sale and supplies a listener to handle purchasing events.
    78.     //called from Start
    79.     public void InitializePurchasing()
    80.     {
    81.         // If we have already connected to Purchasing ...
    82.         if (IsInitialized())
    83.         {
    84.             // ... we are done here.
    85.             return;
    86.         }
    87.  
    88.         // Create a builder, first passing in a suite of Unity provided stores.
    89.         var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
    90.  
    91.         // Add a product to sell / restore by way of its identifier, associating the general identifier
    92.         // with its store-specific identifiers.
    93.         //*********** CONSUMABLE PRODUCTS ******************
    94.         builder.AddProduct(Product_100_coin, ProductType.Consumable);
    95.         builder.AddProduct(Product_500_coin, ProductType.Consumable);
    96.         builder.AddProduct(Product_1000_coin, ProductType.Consumable);
    97.         builder.AddProduct(Product_10_scatter, ProductType.Consumable);
    98.         builder.AddProduct(Product_5_splash, ProductType.Consumable);    
    99.  
    100.    
    101.         //*********** NON CONSUMABLE PRODUCTS ******************
    102.         builder.AddProduct(Product_plane_jumbo, ProductType.NonConsumable, new IDs
    103.         {
    104.             {"plane.jumbo.mac", MacAppStore.Name},
    105.             {"000000596583", TizenStore.Name},
    106.         });
    107.  
    108.      
    109.         //*********** SUBSCRIPTION PRODUCTS ******************
    110.         builder.AddProduct("subscription1", ProductType.Subscription, new IDs
    111.         {
    112.             {"subscription1.mac", MacAppStore.Name}
    113.         });
    114.  
    115.         // Kick off the remainder of the set-up with an asynchrounous call, passing the configuration
    116.         // and this class' instance. Expect a response either in OnInitialized or OnInitializeFailed.
    117.         UnityPurchasing.Initialize(this, builder);
    118.     }
    119.  
    120.  
    121.     //called from InitializePurchasing()
    122.     private bool IsInitialized()
    123.     {
    124.         // Only say we are initialized if both the Purchasing references are set.
    125.         return m_StoreController != null && m_StoreExtensionProvider != null;
    126.     }
    127.  
    128.     // use individual functions that are called by each button in order to purchase the products
    129.     public void Buy100Coin()
    130.     {
    131.         displayFooterTextClear();
    132.         BuyProductID(Product_100_coin);
    133.      
    134.     }
    135.     public void Buy500Coin()
    136.     {
    137.         displayFooterTextClear();
    138.         BuyProductID(Product_500_coin);
    139.      
    140.     }
    141.     public void Buy1000Coin()
    142.     {
    143.         displayFooterTextClear();
    144.         BuyProductID(Product_1000_coin);
    145.      
    146.     }
    147.     public void Buy10ScatterBomb()
    148.     {
    149.         displayFooterTextClear();
    150.         BuyProductID(Product_10_scatter);
    151.    
    152.     }
    153.     public void Buy5SplashBomb()
    154.     {
    155.         displayFooterTextClear();
    156.         BuyProductID(Product_5_splash);
    157.    
    158.     }
    159.     public void BuyJumboJet()
    160.     {
    161.         //NEED to check if the jumboJet is already owned, if it is, then do not buy again ******!!!!
    162.         displayFooterTextClear();
    163.         BuyProductID(Product_plane_jumbo);
    164.     }
    165.  
    166.     public void BuyInvalidItem()
    167.     {
    168.         //This should cause an error
    169.         displayFooterTextClear();
    170.         BuyProductID("InvalidProductID");
    171.     }
    172.  
    173.  
    174.     //A private function which allows us to buy a product we’ve added using it’s product ID string.
    175.     //called by each productID
    176.     private void BuyProductID(string productId)
    177.     {
    178.         // If Purchasing has been initialized ...
    179.         if (IsInitialized())
    180.         {
    181.             Debug.Log("isInitialized, productId= " + productId);
    182.             displayFooterText("isInitialized, productId= " + productId);
    183.  
    184.             // ... look up the Product reference with the general product identifier and the Purchasing
    185.             // system's products collection.
    186.             Product product = m_StoreController.products.WithID(productId);
    187.  
    188.             // If the look up found a product for this device's store and that product is ready to be sold ...
    189.             if (product != null && product.availableToPurchase)
    190.             {
    191.                 Debug.Log(string.Format("Purchasing product asychronously: '{0}'", product.definition.id));
    192.                 displayFooterText(string.Format("Purchasing product asychronously: '{0}'", product.definition.id));
    193.            
    194.                 // ... buy the product. Expect a response either through ProcessPurchase or OnPurchaseFailed
    195.                 // asynchronously.
    196.                 m_StoreController.InitiatePurchase(product);
    197.             }
    198.             // Otherwise ...
    199.             else
    200.             {
    201.                 // ... report the product look-up failure situation
    202.                 Debug.Log("BuyProductID: FAIL. Not purchasing product, Product is either not found or is not available for purchase");
    203.                 displayFooterText("BuyProductID: FAIL. Not purchasing product, Product is either not found or is not available for purchase");
    204.             }
    205.         }
    206.         // Otherwise ...
    207.         else
    208.         {
    209.             // ... report the fact Purchasing has not succeeded initializing yet. Consider waiting longer or
    210.             // retrying initiailization.
    211.             Debug.Log("BuyProductID FAIL. Not initialized.");
    212.             displayFooterText("BuyProductID FAIL. Not initialized.");
    213.         }
    214.     }
    215.  
    216.  
    217.     //*************** FOR IOS ONLY - START *************************
    218.     //On iOS we can call RestorePurchases to restore products previously purchased
    219.     // Restore purchases previously made by this customer. Some platforms automatically restore purchases, like Google.
    220.     // Apple currently requires explicit purchase restoration for IAP, conditionally displaying a password prompt.
    221.     public void RestorePurchases()
    222.     {
    223.         // If Purchasing has not yet been set up ...
    224.         if (!IsInitialized())
    225.         {
    226.             // ... report the situation and stop restoring. Consider either waiting longer, or retrying initialization.
    227.             Debug.Log("RestorePurchases FAIL. Not initialized.");
    228.             displayFooterText("RestorePurchases FAIL. Not initialized.");
    229.             return;
    230.         }
    231.  
    232.         // If we are running on an Apple device ...
    233.         if (Application.platform == RuntimePlatform.IPhonePlayer ||
    234.             Application.platform == RuntimePlatform.OSXPlayer)
    235.         {
    236.             // ... begin restoring purchases
    237.             Debug.Log("RestorePurchases started ...");
    238.             displayFooterText("RestorePurchases started ...");
    239.  
    240.             // Fetch the Apple store-specific subsystem.
    241.             var apple = m_StoreExtensionProvider.GetExtension<IAppleExtensions>();
    242.             // Begin the asynchronous process of restoring purchases. Expect a confirmation response in
    243.             // the Action<bool> below, and ProcessPurchase if there are previously purchased products to restore.
    244.             apple.RestoreTransactions((result) => {
    245.                 // The first phase of restoration. If no more responses are received on ProcessPurchase then
    246.                 // no purchases are available to be restored.
    247.                 Debug.Log("RestorePurchases continuing: " + result + ". If no further messages, no purchases available to restore.");
    248.                 displayFooterText("RestorePurchases continuing: " + result + ". If no further messages, no purchases available to restore.");
    249.             });
    250.         }
    251.         // Otherwise ...
    252.         else
    253.         {
    254.             // We are not running on an Apple device. No work is necessary to restore purchases.
    255.             Debug.Log("RestorePurchases FAIL. Not supported on this platform. Current = " + Application.platform);
    256.             displayFooterText("RestorePurchases FAIL. Not supported on this platform. Current = " + Application.platform);
    257.         }
    258.     }
    259.     //*************** FOR IOS ONLY - END *************************
    260.  
    261.  
    262.     //Called to check if the app can connect to Unity IAP or not.
    263.     //OnInitialize will keep trying in the background and will only fail if there is a configuration problem that cannot be recovered from.
    264.     public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
    265.     {
    266.         // Purchasing has succeeded initializing. Collect our Purchasing references.
    267.         Debug.Log("OnInitialized: PASS");
    268.         displayFooterText("OnInitialized: PASS");
    269.  
    270.         // Overall Purchasing system, configured with products for this application.
    271.         m_StoreController = controller;
    272.         // Store specific subsystem, for accessing device-specific store features.
    273.         m_StoreExtensionProvider = extensions;
    274.     }
    275.  
    276.  
    277.  
    278.     //Called when IAP have failed to initialize and logs a message to the console.    
    279.     public void OnInitializeFailed(InitializationFailureReason error)
    280.     {
    281.         // Purchasing set-up has not succeeded. Check error for reason. Consider sharing this reason with the user.
    282.         Debug.Log("OnInitializeFailed InitializationFailureReason:" + error);
    283.         displayFooterText("OnInitializeFailed InitializationFailureReason:" + error);
    284.     }
    285.  
    286.  
    287.  
    288.     //Checks to see if a product purchase was successful and logs the result to the console.
    289.     public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
    290.     {
    291.         // A consumable product has been purchased by this user.
    292.  
    293.         if (String.Equals(args.purchasedProduct.definition.id, Product_100_coin, StringComparison.Ordinal))
    294.         {
    295.             Debug.Log(string.Format("ProcessPurchase: Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    296.             displayFooterText(string.Format("ProcessPurchase: Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    297.  
    298.             Debug.Log("You got 100 coins");
    299.             displayFooterText("You got 100 coins");
    300.  
    301.             numOfCoins = numOfCoins + 100;
    302.             displayCoinText(numOfCoins);
    303.             // The consumable item has been successfully purchased, add 100 coins to the player's in-game score.            
    304.         }
    305.  
    306.         else if (String.Equals(args.purchasedProduct.definition.id, Product_500_coin, StringComparison.Ordinal))
    307.         {
    308.             Debug.Log(string.Format("ProcessPurchase: Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    309.             displayFooterText(string.Format("ProcessPurchase: Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    310.  
    311.             Debug.Log("You got 500 coins");
    312.             displayFooterText("You got 500 coins");
    313.  
    314.             numOfCoins = numOfCoins + 500;
    315.             displayCoinText(numOfCoins);
    316.         }
    317.                      
    318.         else if (String.Equals(args.purchasedProduct.definition.id, Product_1000_coin, StringComparison.Ordinal))
    319.         {
    320.             Debug.Log(string.Format("ProcessPurchase: Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    321.             displayFooterText(string.Format("ProcessPurchase: Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    322.  
    323.             Debug.Log("You got 1000 coins");
    324.             displayFooterText("You got 1000 coins");
    325.  
    326.             numOfCoins = numOfCoins + 1000;
    327.             displayCoinText(numOfCoins);
    328.         }
    329.  
    330.         else if (String.Equals(args.purchasedProduct.definition.id, Product_10_scatter, StringComparison.Ordinal))
    331.         {
    332.             Debug.Log(string.Format("ProcessPurchase: Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    333.             displayFooterText(string.Format("ProcessPurchase: Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    334.  
    335.             Debug.Log("You got 10 scatter bombs");
    336.             displayFooterText("You got 10 scatter bombs");
    337.  
    338.             numOfScatterBombs = numOfScatterBombs + 10;
    339.             displayBombText("Scatter", numOfScatterBombs);
    340.         }
    341.  
    342.         else if (String.Equals(args.purchasedProduct.definition.id, Product_5_splash, StringComparison.Ordinal))
    343.         {
    344.             Debug.Log(string.Format("ProcessPurchase: Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    345.             displayFooterText(string.Format("ProcessPurchase: Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    346.  
    347.             Debug.Log("You got 5 splash bombs");
    348.             displayFooterText("You got 5 splash bombs");
    349.  
    350.             numOfSplashBombs = numOfSplashBombs + 5;
    351.             displayBombText("splash", numOfSplashBombs);
    352.         }
    353.  
    354.         else if (String.Equals(args.purchasedProduct.definition.id, Product_plane_jumbo, StringComparison.Ordinal))
    355.         {
    356.             Debug.Log(string.Format("ProcessPurchase: NON-Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    357.             displayFooterText(string.Format("ProcessPurchase: NON-Consumable PASS. Product: '{0}'", args.purchasedProduct.definition.id));
    358.  
    359.             Debug.Log("You got yourself a JUMBO JET");
    360.             displayFooterText("You got yourself a JUMBO JET");
    361.         }
    362.  
    363.         // Or ... an unknown product has been purchased by this user. Fill in additional products here....
    364.         else
    365.         {
    366.             Debug.Log(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
    367.             displayFooterText(string.Format("ProcessPurchase: FAIL. Unrecognized product: '{0}'", args.purchasedProduct.definition.id));
    368.         }
    369.  
    370.         // Return a flag indicating whether this product has completely been received, or if the application needs
    371.         // to be reminded of this purchase at next app launch. Use PurchaseProcessingResult.Pending when still
    372.         // saving purchased products to the cloud, and when that save is delayed.
    373.         return PurchaseProcessingResult.Complete;
    374.     }
    375.  
    376.  
    377.  
    378.     //Logs a message to the console telling us when a purchase failed.
    379.     public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
    380.     {
    381.         // A product purchase attempt did not succeed. Check failureReason for more detail. Consider sharing
    382.         // this reason with the user to guide their troubleshooting actions.
    383.         Debug.Log(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
    384.         displayFooterText(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
    385.  
    386.         switch (product.definition.storeSpecificId)
    387.         {
    388.             case "coin.100":            
    389.                 Debug.Log("You DID NOT get 100 coins!");
    390.                 displayFooterText("You DID NOT get 100 coins!");
    391.                 break;
    392.  
    393.             case "coin.500":
    394.                 Debug.Log("You DID NOT get 500 coins!");
    395.                 displayFooterText("You DID NOT get 500 coins!");
    396.                 break;
    397.  
    398.             case "coin.1000":
    399.                 Debug.Log("You DID NOT get 1000 coins!");
    400.                 displayFooterText("You DID NOT get 1000 coins!");
    401.                 break;
    402.  
    403.             case "bomb.scatter.10":
    404.                 Debug.Log("You DID NOT get 10 scatter bombs!");
    405.                 displayFooterText("You DID NOT get 10 scatter bombs!");
    406.                 break;
    407.  
    408.             case "bomb.splash.5":
    409.                 Debug.Log("You DID NOT get 5 splash bombs!");
    410.                 displayFooterText("You DID NOT get 5 splash bombs!");
    411.                 break;
    412.  
    413.             case "plane.jumbo":
    414.                 Debug.Log("You DID NOT get a Jumbo Jet!");
    415.                 displayFooterText("You DID NOT get a Jumbo Jet!");
    416.                 break;
    417.  
    418.             default:
    419.                 Debug.Log("You tried to buy an invalid product Item");
    420.                 displayFooterText("You tried to buy an invalid product Item");
    421.                 break;
    422.  
    423.  
    424.         }
    425.     }
    426.  
    427.  
    428.  
    429.     void displayFooterText(string txt)
    430.     {
    431.         footerText.text += txt + "\n";
    432.     }
    433.  
    434.     void displayFooterTextClear()
    435.     {
    436.         footerText.text = "";
    437.     }
    438.  
    439.     void displayCoinText(int num)
    440.     {
    441.         coinText.text = "Coins= " + num.ToString();
    442.     }
    443.  
    444.     void displayBombText(string txt, int num)
    445.     {
    446.         bombText.text = txt + "= " + num.ToString();
    447.     }
    448.  
    449. }
    450.  
     
  4. ap-unity

    ap-unity

    Unity Technologies

    Joined:
    Aug 3, 2016
    Posts:
    1,519
    Just for clarification, did you Clear the Cache or did you Clear the Data? Typically this error will require you to Clear the Data.
    Screenshot_20170627-141731.png
     
  5. TGKG

    TGKG

    Joined:
    Dec 31, 2014
    Posts:
    180
    I cleared both the data and the cache.

    If my code has a productID in the InitializePurchasing() method
    Code (CSharp):
    1. builder.AddProduct("subscription1", ProductType.Subscription, new IDs
    2.         {
    3.             {"subscription1.mac", MacAppStore.Name}
    4.         });
    that is NOT listed on my play store In-App purchase. Will that cause this type of error?
     
  6. TGKG

    TGKG

    Joined:
    Dec 31, 2014
    Posts:
    180
    More grasping at straws here.

    What about if the company name entered in Unity does not match the company name in the play console. I see I entered a test company name in the Unity Player Settings.

    I am now testing if this fixes my problem.
     
  7. ap-unity

    ap-unity

    Unity Technologies

    Joined:
    Aug 3, 2016
    Posts:
    1,519
    This doesn't sound like an IAP issue. It's more of a Google account issue. Are you able to download things normally from the Google Play Store?

    I don't think this will have any effect.

    I discussed this with the IAP engineers and they have encountered this issue before intermittently. If clearing the cache / data did not resolve the problem, you could try rebooting the device. However, the cause does seem to be hard to pin down and waiting a day or two will usually clear it up.
     
  8. TGKG

    TGKG

    Joined:
    Dec 31, 2014
    Posts:
    180
    Yes, I have tried all of those things.
    - restarted my device
    - restarted device after taking out the battery
    - Yes I can download other games and make purchases

    Its a mystery!
     
  9. TGKG

    TGKG

    Joined:
    Dec 31, 2014
    Posts:
    180
    Changing the company name entered into the Unity Player Settings to match the Google Play store company name did not fix the problem. I am stumped! Probably something simply but cannot see daylight on this one.
     
  10. TGKG

    TGKG

    Joined:
    Dec 31, 2014
    Posts:
    180
    What authorization information gets sent to the store by the Unity IAP (if any).?
     
  11. ap-unity

    ap-unity

    Unity Technologies

    Joined:
    Aug 3, 2016
    Posts:
    1,519
    @TGKG

    Unity IAP does not collect any authentication information or communicate it to the store in any way.

    Users are identified when they sign in to purchase your products. But the sign in process happens on Google Play Store end (or whatever app store you are using).
     
  12. TGKG

    TGKG

    Joined:
    Dec 31, 2014
    Posts:
    180
    Well, I thought it would be something simple and it was.
    I forgot to "Activate" the in-app purchases in the Android developer console, duh! Once that was done everything worked fine.

    Thank you to Unity Support for directing me to that answer. That has saved me even more headaches.
     
    ap-unity likes this.
Thread Status:
Not open for further replies.