/// <summary>
 /// Gets the <cref="SkuDetails"/> associated with the specified Google Play Store SKU id from inventory.
 /// <returns>true if the inventory contains the requested SKU; otherwise, false.</returns>
 /// </summary>
 public bool GetSkuDetails(string sku, out SkuDetails skuDetails)
 {
     lock (_inventoryLock)
     {
         return(_skuDetailsInventory.TryGetValue(sku, out skuDetails));
     }
 }
        /// <summary>
        /// Parses the sku details results returned by the Google Play Billing Library.
        /// </summary>
        /// <returns>An IEnumerable of <cref="SkuDetails"/>. The IEnumerable could be empty.</returns>
        public IEnumerable <SkuDetails> ParseSkuDetailsResult(AndroidJavaObject billingResult,
                                                              AndroidJavaObject skuDetailsList)
        {
            var responseCode = GetResponseCodeFromBillingResult(billingResult);

            if (responseCode != BillingResponseCode.Ok)
            {
                // TODO: retry getSkuDetails call.
                _util.LogErrorFormat(
                    "Failed to retrieve products information! Error code {0}, debug message: {1}.",
                    responseCode, GetDebugMessageFromBillingResult(billingResult));
                return(Enumerable.Empty <SkuDetails>());
            }

            var parsedSkuDetailsList = new List <SkuDetails>();
            var size = skuDetailsList.Call <int>("size");

            for (var i = 0; i < size; i++)
            {
                var javaSkuDetails = skuDetailsList.Call <AndroidJavaObject>("get", i);
                // Google Play Store returns non-null, non-empty originalJson.
                var        originalJson = javaSkuDetails.Call <string>(Constants.SkuDetailsGetOriginalJson);
                SkuDetails skuDetails;
                if (SkuDetails.FromJson(originalJson, out skuDetails))
                {
                    parsedSkuDetailsList.Add(skuDetails);
                }
                else
                {
                    _util.LogWarningFormat("Failed to parse skuDetails {0} ", originalJson);
                }
            }

            return(parsedSkuDetailsList);
        }
 /// <summary>
 /// Creates a SkuDetails object from its JSON representation.
 /// </summary>
 public static bool FromJson(string jsonSkuDetails, out SkuDetails skuDetails)
 {
     try
     {
         skuDetails = JsonUtility.FromJson <SkuDetails>(jsonSkuDetails);
         skuDetails.JsonSkuDetails = jsonSkuDetails;
         return(true);
     }
     catch (Exception)
     {
         // Error is logged at the caller side.
         skuDetails = null;
         return(false);
     }
 }