Exemplo n.º 1
0
        protected override void OnCreate(Bundle bundle)
        {
            System.Threading.Tasks.TaskScheduler.UnobservedTaskException += new EventHandler <System.Threading.Tasks.UnobservedTaskExceptionEventArgs>(TaskScheduler_UnobservedTaskException);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);


            //Change this to true if you expect signed responses
            // This would occur when installing a signed APK on your device and have already uploaded the signed APK to Google Play
            //  see: http://developer.android.com/guide/google/play/billing/billing_testing.html
            Security.ExpectSignature = false;


            m_service = new BillingService(this, this, m_sig);
            var connTask = m_service.Connect();

            //Load inventory on start-up
            connTask.ContinueWith(t =>
            {
                if (t.Result)
                {
                    //Existing purchases
                    m_service.SendRequest <GetPurchasesResponse>(new GetPurchases(Consts.ITEM_TYPE_INAPP, m_requestId++));
                    //All SKUs that have or could be purchased
                    m_service.SendRequest <GetSkuDetailsResponse>(new GetSkuDetails(Consts.ITEM_TYPE_INAPP, m_requestId++, new List <string>()
                    {
                        "play.billing.v3.item_2"
                    }));
                }
            });


            //BUY (use android.test.purchased for a static response)
            var pButton = FindViewById <Button>(Resource.Id.PurchaseButton);

            pButton.Click += delegate { SendBuyRequest("play.billing.v3.item_2"); };

            //CANCEL
            var cButton = FindViewById <Button>(Resource.Id.CancelButton);

            cButton.Click += delegate { SendBuyRequest("android.test.canceled"); };

            //ITEM UNAVAILABLE
            var uButton = FindViewById <Button>(Resource.Id.UnavailableButton);

            uButton.Click += delegate { SendBuyRequest("android.test.item_unavailable"); };


            //GET SKU DETAILS
            var skuButton = FindViewById <Button>(Resource.Id.SkuButton);

            skuButton.Click += delegate
            {
                m_service.SendRequest <GetSkuDetailsResponse>(new GetSkuDetails(Consts.ITEM_TYPE_INAPP, m_requestId++, new List <string>()
                {
                    "play.billing.v3.item_2"
                })).ContinueWith(t =>
                {
                    this.RunOnUiThread(() =>
                    {
                        if (t.Result.Success)
                        {
                            Toast.MakeText(this, "GetSkuDetail: " + (t.Result.Details.Count > 0 ? t.Result.Details.First().ToString() : "Not Found"), ToastLength.Long).Show();
                        }
                        else
                        {
                            Toast.MakeText(this, "GetSkuDetail failure. Error: " + t.Result.Message, ToastLength.Long).Show();
                        }
                    });
                });
            };


            //CONSUME
            var consumeButton = FindViewById <Button>(Resource.Id.ConsumeButton);

            consumeButton.Click += delegate
            {
                var p = m_service.CurrentInventory.Purchases.Where(x => x.Sku == "play.billing.v3.item_2").FirstOrDefault();

                if (p == null)
                {
                    Toast.MakeText(this, "There are no purchases to consume.", ToastLength.Long).Show();
                    return;
                }

                System.Diagnostics.Debug.WriteLine("Attemping to consume: " + p.Sku);

                m_service.SendRequest <Response>(new ConsumePurchase(p, m_requestId++)).ContinueWith(t =>
                {
                    this.RunOnUiThread(() =>
                    {
                        if (t.Result.Success)
                        {
                            //p.Token?
                            m_service.CurrentInventory.ErasePurchase(p.Sku);
                            Toast.MakeText(this, "Consume complete. Item: " + p.Sku, ToastLength.Long).Show();
                        }
                        else
                        {
                            Toast.MakeText(this, "Consume failure. Error: " + t.Result.Message, ToastLength.Long).Show();
                        }
                    });
                });
            };


            //GET PURCHASES
            var invButton = FindViewById <Button>(Resource.Id.InventoryButton);

            invButton.Click += delegate
            {
                m_service.SendRequest <GetPurchasesResponse>(new GetPurchases(Consts.ITEM_TYPE_INAPP, m_requestId++)).ContinueWith(t =>
                {
                    this.RunOnUiThread(() =>
                    {
                        if (t.Result.Success)
                        {
                            var sb = new StringBuilder();
                            sb.Append("Purchases: ");
                            t.Result.PurchasedItems.Select(x => x.Sku).ToList().ForEach(x => sb.AppendFormat("{0},", x));
                            sb.Remove(sb.Length - 1, 1);
                            Toast.MakeText(this, sb.ToString(), ToastLength.Long).Show();
                        }
                        else
                        {
                            Toast.MakeText(this, "Purchases request failure. Error: " + t.Result.Message, ToastLength.Long).Show();
                        }
                    });
                });
            };
        }
Exemplo n.º 2
0
		protected override void OnCreate(Bundle bundle)
		{
			System.Threading.Tasks.TaskScheduler.UnobservedTaskException += new EventHandler<System.Threading.Tasks.UnobservedTaskExceptionEventArgs>(TaskScheduler_UnobservedTaskException);
			AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

			base.OnCreate(bundle);

			// Set our view from the "main" layout resource
			SetContentView(Resource.Layout.Main);


			//Change this to true if you expect signed responses 
			// This would occur when installing a signed APK on your device and have already uploaded the signed APK to Google Play
			//  see: http://developer.android.com/guide/google/play/billing/billing_testing.html
			Security.ExpectSignature = false;


			m_service = new BillingService(this, this, m_sig);
			var connTask = m_service.Connect();

			//Load inventory on start-up
			connTask.ContinueWith(t =>
				{
					if (t.Result)
					{
						//Existing purchases
						m_service.SendRequest<GetPurchasesResponse>(new GetPurchases(Consts.ITEM_TYPE_INAPP, m_requestId++));
						//All SKUs that have or could be purchased
						m_service.SendRequest<GetSkuDetailsResponse>(new GetSkuDetails(Consts.ITEM_TYPE_INAPP, m_requestId++, new List<string>() { "play.billing.v3.item_2" }));
					}
				});


			//BUY (use android.test.purchased for a static response)
			var pButton = FindViewById<Button>(Resource.Id.PurchaseButton);
			pButton.Click += delegate { SendBuyRequest("play.billing.v3.item_2"); };

			//CANCEL
			var cButton = FindViewById<Button>(Resource.Id.CancelButton);
			cButton.Click += delegate { SendBuyRequest("android.test.canceled"); };
					
			//ITEM UNAVAILABLE
			var uButton = FindViewById<Button>(Resource.Id.UnavailableButton);
			uButton.Click += delegate { SendBuyRequest("android.test.item_unavailable"); };


			//GET SKU DETAILS
			var skuButton = FindViewById<Button>(Resource.Id.SkuButton);
			skuButton.Click += delegate 
			{
				m_service.SendRequest<GetSkuDetailsResponse>(new GetSkuDetails(Consts.ITEM_TYPE_INAPP, m_requestId++, new List<string>() { "play.billing.v3.item_2" })).ContinueWith(t =>
					{
						this.RunOnUiThread(() =>
						{
							if (t.Result.Success)
								Toast.MakeText(this, "GetSkuDetail: " + (t.Result.Details.Count > 0 ? t.Result.Details.First().ToString() : "Not Found"), ToastLength.Long).Show();
							else
								Toast.MakeText(this, "GetSkuDetail failure. Error: " + t.Result.Message, ToastLength.Long).Show();
						});
					});
			};


			//CONSUME
			var consumeButton = FindViewById<Button>(Resource.Id.ConsumeButton);
			consumeButton.Click += delegate
			{
				var p = m_service.CurrentInventory.Purchases.Where(x => x.Sku == "play.billing.v3.item_2").FirstOrDefault();
				
				if (p == null)
				{
					Toast.MakeText(this, "There are no purchases to consume.", ToastLength.Long).Show();
					return;
				}
								
				System.Diagnostics.Debug.WriteLine("Attemping to consume: " + p.Sku);

				m_service.SendRequest<Response>(new ConsumePurchase(p, m_requestId++)).ContinueWith(t =>
					{
						this.RunOnUiThread(() =>
						{
							if (t.Result.Success)
							{
								//p.Token?
								m_service.CurrentInventory.ErasePurchase(p.Sku);
								Toast.MakeText(this, "Consume complete. Item: " + p.Sku, ToastLength.Long).Show();
							}
							else
								Toast.MakeText(this, "Consume failure. Error: " + t.Result.Message, ToastLength.Long).Show();
						});
					});
			};


			//GET PURCHASES
			var invButton = FindViewById<Button>(Resource.Id.InventoryButton);
			invButton.Click += delegate
			{
				m_service.SendRequest<GetPurchasesResponse>(new GetPurchases(Consts.ITEM_TYPE_INAPP, m_requestId++)).ContinueWith(t =>
					{
						this.RunOnUiThread(() =>
						{
							if (t.Result.Success)
							{
								var sb = new StringBuilder();
								sb.Append("Purchases: ");
								t.Result.PurchasedItems.Select(x => x.Sku).ToList().ForEach(x => sb.AppendFormat("{0},", x));
								sb.Remove(sb.Length - 1, 1);
								Toast.MakeText(this, sb.ToString(), ToastLength.Long).Show();
							}
							else
								Toast.MakeText(this, "Purchases request failure. Error: " + t.Result.Message, ToastLength.Long).Show();
						});
					});
			};
		}