public bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
        {
            RCPurchases.DebugLogsEnabled = true;
            RCPurchases.ConfigureWithAPIKey("theapikey");

            return(true);
        }
        public static Task <RCCustomerInfo> RestoreTransactionsAsync(this RCPurchases purchases,
                                                                     CancellationToken cancellationToken = default)
        {
            var tcs = new TaskCompletionSource <RCCustomerInfo>();

            cancellationToken.Register(() => tcs.TrySetCanceled());
            purchases.RestorePurchasesWithCompletion((RCCustomerInfo customerInfo, NSError error) =>
            {
                if (error != null)
                {
                    tcs.TrySetException(new PurchasesErrorException(error, false));
                }
                else
                {
                    tcs.TrySetResult(customerInfo);
                }
            });
            return(tcs.Task);
        }
        public static Task <RCOfferings> GetOfferingsAsync(this RCPurchases purchases,
                                                           CancellationToken cancellationToken = default)
        {
            var tcs = new TaskCompletionSource <RCOfferings>();

            cancellationToken.Register(() => tcs.TrySetCanceled());
            purchases.GetOfferingsWithCompletion((RCOfferings offerings, NSError error) =>
            {
                if (error != null)
                {
                    tcs.TrySetException(new PurchasesErrorException(error, false));
                }
                else
                {
                    tcs.TrySetResult(offerings);
                }
            });
            return(tcs.Task);
        }
        public static Task <LoginResult> LoginAsync(this RCPurchases purchases, string appUserId,
                                                    CancellationToken cancellationToken = default)
        {
            var tcs = new TaskCompletionSource <LoginResult>();

            cancellationToken.Register(() => tcs.TrySetCanceled());
            purchases.LogIn(appUserId, (customerInfo, created, error) =>
            {
                if (error != null)
                {
                    tcs.TrySetException(new PurchasesErrorException(error, false));
                }
                else
                {
                    tcs.TrySetResult(new LoginResult(customerInfo, created));
                }
            });
            return(tcs.Task);
        }
        public static Task <PurchaseSuccessInfo> PurchasePackageAsync(this RCPurchases purchases,
                                                                      RCPackage packageToPurchase, CancellationToken cancellationToken = default)
        {
            var tcs = new TaskCompletionSource <PurchaseSuccessInfo>();

            cancellationToken.Register(() => tcs.TrySetCanceled());
            purchases.PurchasePackage(packageToPurchase,
                                      (RCStoreTransaction transaction, RCCustomerInfo customerInfo, NSError error, bool userCancelled) =>
            {
                if (error != null)
                {
                    tcs.TrySetException(new PurchasesErrorException(error, userCancelled));
                }
                else if (userCancelled)
                {
                    tcs.TrySetException(new PurchasesErrorException(null, true));
                }
                else
                {
                    tcs.TrySetResult(new PurchaseSuccessInfo(transaction, customerInfo));
                }
            });
            return(tcs.Task);
        }