Windowsストアアプリのアプリ内課金メモ

基本的な方法はMSのエヴァンジェリスト田中達彦さんが「Windowsストア アプリ 作り方解説 Line Attack編 第8回 ~アプリ内購入(アプリ内課金) ~」で書かれています。

Windows8.1では「RequestProductPurchaseAsync(string,bool)」は古い方法なので書き換えるようにと指示が出ます。(エラーや警告にはならない)

自分はこんな感じに書き替えを行いました。

#if DEBUG
            // 課金テスト用
            // C:\Users\使用しているPCのアカウント\AppData\Local\Packages\アプリのID\LocalState\Microsoft\Windows Store\ApiData
            // WindowsStoreProxy.xml
            // <Product ProductId="1" LicenseDuration="0" ProductType="Durable"> ProductIdを使用しているlicense名に書き換える
            //  <LicenseInformation>
            // <Product ProductId="1"> // ProductIdを使用しているlicense名に書き換える
            // <IsActive>true</IsActive> // true 購入済み false 未購入 テストに合わせて書き換える
            //  </Product>
            //  </LicenseInformation>

            ListingInformation listing = await CurrentAppSimulator.LoadListingInformationAsync();
#else
            ListingInformation listing = await CurrentApp.LoadListingInformationAsync();
#endif

            ProductListing paidAddMode = listing.ProductListings[licenseName01];

            MessageDialog msgBox = new MessageDialog(AppStringsClass.StringPurchase + paidAddMode.FormattedPrice);

            await msgBox.ShowAsync();

            try
            {
#if DEBUG
                PurchaseResults purchaseResults = await CurrentAppSimulator.RequestProductPurchaseAsync(licenseName01);
#else
                PurchaseResults purchaseResults = await CurrentApp.RequestProductPurchaseAsync(licenseName01);
#endif

                switch(purchaseResults.Status)
                {
                        // 購入
                    case ProductPurchaseStatus.Succeeded:
                        msgBox.Content = AppStringsClass.StringThankYou;
                        await msgBox.ShowAsync();
                        break;

                        // 未購入、又は何かしらのエラー
                    case ProductPurchaseStatus.NotPurchased:
                        break;

                        // 前回購入が未完了
                    case ProductPurchaseStatus.NotFulfilled:
                        break;
                }

#if DEBUG
                // 購入完了のdummy
                msgBox.Content = AppStringsClass.StringThankYou;
                await msgBox.ShowAsync();
#else
                // 実際に購入されているかの二重チェック
                if (LicenseInfo.ProductLicenses[licenseName01].IsActive)
                {
                    // purchased
                    msgBox.Content = AppStringsClass.StringThankYou;
                    await msgBox.ShowAsync();
                }
                else
                {
                    return;
                }
#endif
            }

UniversalAppsでWP8.1も同じコードが使えるようになっているのではないかと思うものの、現時点では未検証
今後確認したら記載する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.