Xamarin.InAppPurchased/Components

本文介绍了一个使用 Xamarin 实现应用内购买的示例代码,详细展示了如何处理购买成功、失败、恢复购买及验证产品的过程。通过示例,开发者可以了解如何设置 PurchaseManager 并监听购买事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

In  View Controller


using Xamarin.InAppPurchase;

public override void ViewDidLoad ()

        {
            base.ViewDidLoad ();

            AppDelegate.PurchaseManager.InAppProductPurchased -= InAppProductPurchased;
            AppDelegate.PurchaseManager.ReceivedInvalidProducts -= ReceivedInvalidProducts;
            AppDelegate.PurchaseManager.ReceivedValidProducts -= ReceivedValidProducts;
            AppDelegate.PurchaseManager.InAppPurchasesRestored -= InAppPurchasesRestored;
            AppDelegate.PurchaseManager.InAppProductPurchaseFailed -= InAppProductPurchaseFailed;

            AppDelegate.PurchaseManager.InAppProductPurchased += InAppProductPurchased;
            AppDelegate.PurchaseManager.InAppProductPurchaseFailed += InAppProductPurchaseFailed;
            AppDelegate.PurchaseManager.ReceivedInvalidProducts += ReceivedInvalidProducts;
            AppDelegate.PurchaseManager.ReceivedValidProducts += ReceivedValidProducts;
            AppDelegate.PurchaseManager.InAppPurchasesRestored += InAppPurchasesRestored;

            AppDelegate.PurchaseManager.QueryInventory ("ProductId");

btnSubmit.TouchUpInside += (send, e) => 
            {
                Submit();
            };

        }
    private void InAppPurchasesRestored(int count)
        {
            if (count > 0)
            {
                var alert = new UIAlertView ();
                alert.Message = "Restore Successful";
                alert.AddButton ("OK");
                alert.Clicked += (sender, e) => {
                    if (this.NavigationController != null) {
                        AppDelegate.PurchaseManager.InAppProductPurchased -= InAppProductPurchased;
                        AppDelegate.PurchaseManager.ReceivedInvalidProducts -= ReceivedInvalidProducts;
                        AppDelegate.PurchaseManager.ReceivedValidProducts -= ReceivedValidProducts;
                        AppDelegate.PurchaseManager.InAppPurchasesRestored -= InAppPurchasesRestored;
                        AppDelegate.PurchaseManager.InAppProductPurchaseFailed -= InAppProductPurchaseFailed;
                    }
                };
                alert.Show ();
            }
            else
            {
                var alert = new UIAlertView ();
                alert.Message = "Restore Failed";
                alert.AddButton ("OK");
                alert.Show ();
            }
        }

        private void ReceivedValidProducts(List<InAppProduct> products)
        {
            Console.WriteLine("_purchaseManager.ReceivedValidProducts " + products);
            foreach (var p in products){
                Console.WriteLine("--- " + p.ProductIdentifier + " " + p.Price);
            }
        }
        private void ReceivedInvalidProducts(string[] id)
        {
            var alert=new UIAlertView();
            alert.Message="product error";
            alert.AddButton("OK");
            alert.Show();
        }
        private void  InAppProductPurchased(SKPaymentTransaction transaction, InAppProduct product)
        {
            
                var alert = new UIAlertView ();
                alert.Message = "Successful";
                alert.AddButton ("OK");
                alert.Clicked += (sender, e) => {
//                        this.NavigationController.PopViewControllerAnimated (true);
                        AppDelegate.PurchaseManager.InAppProductPurchased -= InAppProductPurchased;
                        AppDelegate.PurchaseManager.ReceivedInvalidProducts -= ReceivedInvalidProducts;
                        AppDelegate.PurchaseManager.ReceivedValidProducts -= ReceivedValidProducts;
                        AppDelegate.PurchaseManager.InAppPurchasesRestored -= InAppPurchasesRestored;
                        AppDelegate.PurchaseManager.InAppProductPurchaseFailed -= InAppProductPurchaseFailed;
                };
//                alert.Show ();
        }
        private void InAppProductPurchaseFailed(SKPaymentTransaction transaction, InAppProduct product)
        {
            ShowAlert ("Failed");
        }
        public void Submit()
        {

            UIAlertView alert = new UIAlertView ("Payout", "You need to pay for the next operation", null, "Cancel", "Continue");
            alert.Clicked += (call, buttobnArgs) => {
                if (AppDelegate.PurchaseManager.CanMakePayments) 
                {
                    AppDelegate.PurchaseManager.BuyProduct ("com.highviewsoft.Sonicboxx", Int32.Parse (_payoutsNumber));
                } else {
                    ShowAlert ("Apple ID is missing payment information");
                }
            };
            alert.Show ();
        }

        public void ShowAlert(string message)
        {
            UIAlertView alert = new UIAlertView ();
            alert.Message = message;
            alert.AddButton ("Ok");
            alert.Show();
        }


In AppDelegate.cs

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {

PurchaseManager.SimulateiTunesAppStore = false;
            PurchaseManager.PublicKey = "ASDFASDFASDF";
            PurchaseManager.ApplicationUserName = "Sonicboxx Test";
            PurchaseManager.AutomaticPersistenceType = InAppPurchasePersistenceType.LocalFile;
            PurchaseManager.PersistenceFilename = "AtomicData";
            PurchaseManager.ShuffleProductsOnPersistence = false;
            PurchaseManager.RestoreProducts ();
            AppDelegate.PurchaseManager.CheckInternetConnection = true;
            AppDelegate.PurchaseManager.NoInternetConnectionAvailable += NoInternetConnectionAvailable;

}

        private void NoInternetConnectionAvailable()
        {
            var alert=new UIAlertView();
            alert.Message="Please check your internet connection";
            alert.AddButton("OK");
            alert.Show();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值