예제 #1
0
        public IPromise <bool> Validate(InAppPurchasableItem inAppItem)
        {
            var promise = new Promise <bool>();

            logger.Log("NullReceiptValidator.Validate - Always returning true");

            promise.Resolve(true);

            return(promise);
        }
예제 #2
0
        public IPromise <bool> Validate(InAppPurchasableItem inAppItem)
        {
            var promise = new Promise <bool>();

            if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.WindowsEditor)
            {
                promise.Resolve(true);
            }
            else
            {
                routineRunner.StartCoroutine(RemoteValidationCoro(inAppItem, promise));
            }

            return(promise);
        }
예제 #3
0
        IEnumerator RemoteValidationCoro(InAppPurchasableItem item, Promise <bool> promise)
        {
            var data = new ReceiptValidationData();

            var receiptJson = JsonMapper.ToObject(item.receipt);

            data.receipt     = receiptJson["Payload"].ToString();
            data.appBundleId = appInfoService.BundleIdentifier;
            data.iapBundleId = item.id;

                        #if UNITY_ANDROID
            data.receipt  = Convert.ToBase64String(Encoding.UTF8.GetBytes(data.receipt));
            data.platform = "Android";
                        #elif UNITY_IPHONE
            data.platform = "iOS";
                        #endif

            data.nonce = DateTime.Now.ToString();

            string validationData = JsonMapper.ToJson(data);

            Action <ConnectionHandler.RequestResult, string> receiptValidationResponse = (result, responseData) => {
                logger.Log(Tag, "HandleLoginResponse (result=" + result + ")\nresponse=" + responseData.SSubstring(300));

                if (result == ConnectionHandler.RequestResult.Ok)
                {
                    ReceiptValidationResponse response = JsonMapper.ToObject <ReceiptValidationResponse>(responseData);

                    string encryptedNonce = Sha256(data.nonce);

                    if (response.nonce.Equals(encryptedNonce))
                    {
                        if (response.verified)
                        {
                            logger.Log(Tag, "Validation successful");
                            analyticsService.LogEvent(AnalyticsTargets.ANALYTICS_TARGET_FLURRY, Tag, new Dictionary <string, object>()
                            {
                                { "Validation", "successful" }
                            }, false);
                            promise.Resolve(true);
                        }
                        else
                        {
                            logger.LogError(Tag, "Validation failed - not verified");
                            analyticsService.LogEvent(AnalyticsTargets.ANALYTICS_TARGET_FLURRY, Tag, new Dictionary <string, object>()
                            {
                                { "Validation", "failed" }, { "Reason", "Not verified" }
                            }, false);
                            promise.Resolve(false);
                        }
                    }
                    else
                    {
                        logger.LogError(Tag, "Validation failed - non matching nonce");
                        analyticsService.LogEvent(AnalyticsTargets.ANALYTICS_TARGET_FLURRY, Tag, new Dictionary <string, object>()
                        {
                            { "Validation", "failed" }, { "Reason", "Non matching nonce" }
                        }, false);
                        promise.Resolve(false);
                    }
                }
                else
                {
                    logger.LogError(Tag, "Purchase Validation Failure");
                }
            };

            yield return(_coroutineFactory.StartCoroutine(() => _connectionHandler.SendRequest(ConnectionHandler.RequestType.ReceiptValidation,
                                                                                               receiptValidationResponse, validationData)));
        }
예제 #4
0
 public PurchaseIAPResult(InAppPurchasableItem purchasedItem, PurchaseIAPResultCode result = PurchaseIAPResultCode.Success, BillerErrors error = BillerErrors.NO_ERROR)
 {
     this.purchasedItem = purchasedItem;
     this.result        = result;
     this.error         = error;
 }