IEnumerator OnPressNew() { UILoader.Instance.StartLoader(); List <Item> newItems = new List <Item>(); var today = DateTimeExtensions.GetCurrentUnixTime().ToString(); if (CategorySystemInfo.AllItems.Any()) { foreach (var item in CategorySystemInfo.AllItems) { //new Contents are now considered only if they are a t most 7 days old...more than that, it will ignore if (DateTimeExtensions.DifferenceBetweenTwoUnixTime(today, item.UploadDate) < new TimeSpan(7, 0, 0, 0).TotalSeconds) { newItems.Add(item); } yield return(true); } yield return(StartCoroutine(CategorySystemInfo.PopulateContents(JArray.FromObject(newItems), parentName: "New Arrivals"))); } UILoader.Instance.StopLoader(true); yield return(new WaitForEndOfFrame()); }
void RevalidateSubscription() { Debug.Log("Re-validating After Initialization"); try { #if UNITY_ANDROID var validator = new CrossPlatformValidator(GooglePlayTangle.Data(), null, Application.identifier); _isRestoreAllowed = false; LocalDataManager.Instance.SaveData.NonConsumableBuy.Clear(); foreach (var product in StoreController.products.all.ToList()) { var result = validator.Validate(product.receipt); if (product.hasReceipt) { _isRestoreAllowed = true; switch (product.definition.type) { case ProductType.Consumable: //no need to store consumable values break; case ProductType.NonConsumable: { LocalDataManager.Instance.SaveData.NonConsumableBuy.AddUnique(product.metadata.localizedTitle); } break; case ProductType.Subscription: { /*LocalDataManager.Instance.SaveData.SubscriptionDetails.SafeAdd("Title", product.metadata.localizedTitle); * LocalDataManager.Instance.SaveData.SubscriptionDetails.SafeAdd("Date", result[0].purchaseDate.ToShortDateString());*/ } break; default: throw new ArgumentOutOfRangeException(); } } } //todo: refactor as above for ios #elif UNITY_IOS Debug.Log("Revalidating After iOS receipt"); var validator = new CrossPlatformValidator(null, AppleTangle.Data(), Application.identifier); string appReceipt = appleConfig.appReceipt; string unityIAPReceipt = "{ \"Store\": \"AppleAppStore\", \"Payload\": \"" + appReceipt + "\" }"; var result = validator.Validate(unityIAPReceipt); _isRestoreAllowed = false; LocalDataManager.Instance.SaveData.NonConsumableBuy.Clear(); Debug.Log(" LocalDataManager.Instance.SaveData.NonConsumableBuy Cleared"); foreach (IPurchaseReceipt productReceipt in result) { var prodReceipt = productReceipt as AppleInAppPurchaseReceipt; var difference = DateTimeExtensions.DifferenceBetweenTwoUnixTime( prodReceipt.subscriptionExpirationDate.ToUnixTime(), DateTimeExtensions.GetCurrentUnixTime()); /*if (difference > 0) * { * _isRestoreAllowed = true; * LocalDataManager.Instance.SaveData.SubscriptionDetails.SafeAdd("Title", GetProduct(prodReceipt.productID).metadata.localizedTitle); * LocalDataManager.Instance.SaveData.SubscriptionDetails.SafeAdd("Date", productReceipt.purchaseDate.ToShortDateString()); * Debug.Log(" LocalDataManager.Instance.SaveData.NonConsumableBuy Added"); * break; * }*/ LocalDataManager.Instance.SaveData.NonConsumableBuy.AddUnique(GetProduct(prodReceipt.productID).metadata.localizedTitle); Debug.Log(" LocalDataManager.Instance.SaveData.NonConsumableBuy Added"); } #endif } catch (IAPSecurityException e) { Debug.Log("Error on Re-validating " + e.Message); //clear all saved purchased ids, if there is validator error LocalDataManager.Instance.SaveData.NonConsumableBuy.Clear(); } }
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) { Debug.Log("ProcessPurchase"); try { var product = StoreController.products.WithID(args.purchasedProduct.definition.id); #if UNITY_ANDROID Debug.Log(" Validating Google Receipt"); var validator = new CrossPlatformValidator(GooglePlayTangle.Data(), null, Application.identifier); var result = validator.Validate(args.purchasedProduct.receipt); switch (product.definition.type) { case ProductType.Consumable: //no need to store consumable values break; case ProductType.NonConsumable: { if (product.hasReceipt) { _isRestoreAllowed = true; LocalDataManager.Instance.SaveData.NonConsumableBuy.AddUnique(product.metadata.localizedTitle); } else { _isRestoreAllowed = false; LocalDataManager.Instance.SaveData.NonConsumableBuy.Remove(product.metadata.localizedTitle); } } break; case ProductType.Subscription: { //todo: if there is subscription, use subscription date too /*if (product.hasReceipt) * { * _isRestoreAllowed = true; * LocalDataManager.Instance.SaveData.NonConsumableBuy.AddUnique(product.metadata.localizedTitle); * } * else * { * _isRestoreAllowed = false; * LocalDataManager.Instance.SaveData.NonConsumableBuy.Remove(product.metadata.localizedTitle); * }*/ } break; } //todo: refactor for ios, as above #elif UNITY_IOS Debug.Log(" Validating iOS Receipt"); var validator = new CrossPlatformValidator(null, AppleTangle.Data(), Application.identifier); string appReceipt = appleConfig.appReceipt; string unityIAPReceipt = "{ \"Store\": \"AppleAppStore\", \"Payload\": \"" + appReceipt + "\" }"; var result = validator.Validate(unityIAPReceipt); _isRestoreAllowed = false; LocalDataManager.Instance.SaveData.NonConsumableBuy.Clear(); Debug.Log(" LocalDataManager.Instance.SaveData.NonConsumableBuy Cleared"); foreach (IPurchaseReceipt productReceipt in result) { var prodReceipt = productReceipt as AppleInAppPurchaseReceipt; var difference = DateTimeExtensions.DifferenceBetweenTwoUnixTime( prodReceipt.subscriptionExpirationDate.ToUnixTime(), DateTimeExtensions.GetCurrentUnixTime()); /*if (difference > 0) * { * LocalDataManager.Instance.SaveData.SubscriptionDetails.SafeAdd("Title", product.metadata.localizedTitle); * LocalDataManager.Instance.SaveData.SubscriptionDetails.SafeAdd("Date", productReceipt.purchaseDate.ToShortDateString()); * Debug.Log(" LocalDataManager.Instance.SaveData.SubscriptionDetails Added"); * break; * }*/ _isRestoreAllowed = true; LocalDataManager.Instance.SaveData.NonConsumableBuy.AddUnique(GetProduct(prodReceipt.productID).metadata.localizedTitle); Debug.Log("LocalDataManager.Instance.SaveData.NonConsumableBuy Added"); } #endif } catch (IAPSecurityException) { Debug.Log("Invalid receipt for " + args.purchasedProduct.definition.id + ", not unlocking content"); LocalDataManager.Instance.SaveData.NonConsumableBuy.Clear(); } OnPurchaseSuccess.SafeInvoke(args.purchasedProduct); UILoader.Instance.StopLoader(true); return(PurchaseProcessingResult.Complete); }