/// <summary>
        /// Initializes an async process to purchas the product. Only one purchase request can be happening at a time
        /// </summary>
        /// <param name="productId">Product to buy</param>
        /// <returns>Purchase object</returns>
        public async Task <InAppPurchaseResult> PurchaseAsync(string productId)
        {
            // First, set the Completion Task Source. The Payment Observer will handle only one request at a time
            TaskCompletionSource <InAppPurchaseResult> transactionPurchased = new TaskCompletionSource <InAppPurchaseResult>();

            _paymentObserver.SetTransactionPurchasedTask(transactionPurchased);

            SKPayment payment = SKPayment.CreateFrom(productId);

            SKPaymentQueue.DefaultQueue.AddPayment(payment);

            // Wait till the Task is complete (e.g. Succeeded or Failed - which will result in Exception)
            return(await transactionPurchased.Task);
        }