public async Task<SKProductsResponse> RequestProductData (params string[] productIds) { var array = new NSString[productIds.Length]; for (var i = 0; i < productIds.Length; i++) array[i] = new NSString(productIds[i]); var tcs = new TaskCompletionSource<SKProductsResponse>(); _productDataRequests.AddLast(tcs); try { var productIdentifiers = NSSet.MakeNSObjectSet<NSString>(array); //NSSet.MakeNSObjectSet<NSString>(array); var productsRequest = new SKProductsRequest(productIdentifiers); productsRequest.ReceivedResponse += (sender, e) => tcs.SetResult(e.Response); productsRequest.RequestFailed += (sender, e) => tcs.SetException(new Exception(e.Error.LocalizedDescription)); productsRequest.Start(); if (await Task.WhenAny(tcs.Task, Task.Delay(TimeSpan.FromSeconds(30))) != tcs.Task) throw new InvalidOperationException("Timeout waiting for Apple to respond"); var ret = tcs.Task.Result; productsRequest.Dispose(); return ret; } finally { _productDataRequests.Remove(tcs); } }
public async Task <SKProductsResponse> RequestProductData(params string[] productIds) { var array = new NSString[productIds.Length]; for (var i = 0; i < productIds.Length; i++) { array[i] = new NSString(productIds[i]); } var tcs = new TaskCompletionSource <SKProductsResponse>(); _productDataRequests.AddLast(tcs); try { var productIdentifiers = NSSet.MakeNSObjectSet <NSString>(array); //NSSet.MakeNSObjectSet<NSString>(array); var productsRequest = new SKProductsRequest(productIdentifiers); productsRequest.ReceivedResponse += (sender, e) => tcs.SetResult(e.Response); productsRequest.RequestFailed += (sender, e) => tcs.SetException(new Exception(e.Error.LocalizedDescription)); productsRequest.Start(); if (await Task.WhenAny(tcs.Task, Task.Delay(TimeSpan.FromSeconds(30))) != tcs.Task) { throw new InvalidOperationException("Timeout waiting for Apple to respond"); } var ret = tcs.Task.Result; productsRequest.Dispose(); return(ret); } finally { _productDataRequests.Remove(tcs); } }
public async Task <SKProductsResponse> RequestProductData(params string[] productIds) { var array = new NSString[productIds.Length]; for (var i = 0; i < productIds.Length; i++) { array[i] = new NSString(productIds[i]); } var tcs = new TaskCompletionSource <SKProductsResponse>(); _productDataRequests.AddLast(tcs); try { var productIdentifiers = NSSet.MakeNSObjectSet <NSString>(array); //NSSet.MakeNSObjectSet<NSString>(array); var productsRequest = new SKProductsRequest(productIdentifiers); productsRequest.ReceivedResponse += (sender, e) => tcs.SetResult(e.Response); productsRequest.RequestFailed += (sender, e) => tcs.SetException(new Exception(e.Error.LocalizedDescription)); productsRequest.Start(); var ret = await tcs.Task; productsRequest.Dispose(); return(ret); } finally { _productDataRequests.Remove(tcs); Console.WriteLine("Remaining: " + _productDataRequests.Count); } }
public override void ReceivedResponse(SKProductsRequest request, SKProductsResponse response) { #if !DIST foreach (SKProduct product in response.Products) { Console.WriteLine("Localised price:" + product.LocalizedPrice()); Console.WriteLine("Product title: " + product.LocalizedTitle); Console.WriteLine("Product description: " + product.LocalizedDescription); Console.WriteLine("Product price: " + product.LocalizedPrice()); Console.WriteLine("Product id: " + product.ProductIdentifier); } foreach (string invalidProductId in response.InvalidProducts) { Console.WriteLine("Invalid product id: " + invalidProductId); } #endif if (responseDelegate != null) { responseDelegate(response.Products); responseDelegate = null; } productsRequest.Dispose(); productsRequest = null; }
public async Task<SKProductsResponse> RequestProductData (params string[] productIds) { var array = new NSString[productIds.Length]; for (var i = 0; i < productIds.Length; i++) array[i] = new NSString(productIds[i]); var tcs = new TaskCompletionSource<SKProductsResponse>(); _productDataRequests.AddLast(tcs); try { var productIdentifiers = NSSet.MakeNSObjectSet<NSString>(array); //NSSet.MakeNSObjectSet<NSString>(array); var productsRequest = new SKProductsRequest(productIdentifiers); productsRequest.ReceivedResponse += (sender, e) => tcs.SetResult(e.Response); productsRequest.RequestFailed += (sender, e) => tcs.SetException(new Exception(e.Error.LocalizedDescription)); productsRequest.Start(); var ret = await tcs.Task; productsRequest.Dispose(); return ret; } finally { _productDataRequests.Remove(tcs); Console.WriteLine("Remaining: " + _productDataRequests.Count); } }
public void NewObjectDispose() { var obj = new SKProductsRequest("woot"); obj.Dispose(); }