Пошаговый туториал для организации in-app purchases в своем приложении для WIndows Phone 8


Шаг первый: Добавление продукта в Windows Phone Dev Center

С этим пунктом всё просто, идём в Windows Phone Dev Center -> Apps -> APPName -> Products -> Add in-app product.

Старательно заполняем все поля, обязательно обратите внимание на In-app product ID (это уникальный идентификатор вашего продукта) и Content type. Content type рекумендуется выбирать Electronic software download, при ином выборе, после сборки приложения вы можетес толкнуться с неприятной ошибкой Магазина c101a006. Так же обратите внимание на Type: Durable и Consurable, если говорить по-русски, то первый вариант для одноразовых покупок, а второй для многоразовых (например: покупка монет в играх), в данном примере мы выберем тип Durable. Ошибка проявится в том, что никто не сможет приобрести ваш продукт — всем будет выдаваться эта таинственная ошибка. Почему таинственная? Потому что, на форумах Microsoft тоже не знают причин её возниконовения.

Всё, сабмитим продукт, в течении пары часов/дней наш продукт заапрувят.

Шаг второй: Реализация покупки нашего продукта в приложении

Рассмотрим простейший вариант: у нас один продукт для продажи в приложении. Для начала добавим куда-нибудь в XAML-разметке нашей страницы кнопку с вызовом диалога покупки приложения и дадим ей Name=«Donate». Далее идем в .CS файл страницы и пишем обработчик нажатия на кнопку.

Добавим две строчки в пространства имён для работы с Магазином:

using Windows.ApplicationModel.Store;
using Store = Windows.ApplicationModel.Store;


Пишем обработчик для кнопки Donate:

private async void Donate(object sender, EventArgs e)
    {
        if (!Store.CurrentApp.LicenseInformation.ProductLicenses["Тут наш In-app product ID"].IsActive)
        {
            try
            {
                await CurrentApp.RequestProductPurchaseAsync("Тут наш In-app product ID", false);
                ProductLicense productLicense = null;
                if (CurrentApp.LicenseInformation.ProductLicenses.TryGetValue("Тут наш In-app product ID", out productLicense))
                {
                    if (productLicense.IsActive)
                    {
                        MessageBoxResult result =
                        MessageBox.Show("Сообщение о том как мы благодарны за покупку ;)",
                        "Заголовок сообщения", MessageBoxButton.OK);
// Сообщаем Магазину, о том что продукт доставлен
                        CurrentApp.ReportProductFulfillment("Тут наш In-app product ID");
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                // Обрабатываем ошибки
            }
        }
        else
        {
        MessageBoxResult result =
        MessageBox.Show("Сообщаем пользователю о том, что он уже купил продукт.",
        "У нас же Durable-продукт?", MessageBoxButton.OK);
        }
     }

Вот и всё. Самый простой способ добвить in-app покупки в ваши приложения.