Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как правильно реализовать покупку подписки внутри приложения с использованием TWindowsStore в Delphi (12.1)

Delphi , Программа и Интерфейс , Приложение своё

Реализация покупки подписки внутри приложения с использованием TWindowsStore в Delphi

Встраивание функциональности покупки подписки непосредственно в ваше приложение, опубликованное в Microsoft Store, требует особого подхода. Как указано в документации Microsoft, прямая продажа подписок через Store не поддерживается, и необходимо использовать встроенные покупки цифровых продуктов.

В данной статье мы рассмотрим, как реализовать покупку подписки внутри приложения Delphi (версии 12.1) с помощью компонента TWindowsStore. Мы проанализируем предложенный пример кода, укажем на возможные проблемы и предложим рабочее решение, а также рассмотрим альтернативные подходы.

Анализ существующего примера кода

Приведенный пример кода демонстрирует попытку покупки продукта по его InAppOfferToken. Однако, как отмечает автор, этот код может вызывать исключения. Основная проблема, как правило, связана с обработкой асинхронных операций и возможными ошибками при взаимодействии с Microsoft Store API.

function TForm1.PurchaseItem(Item: string) : string;
begin
  for var i := 0 to WindowsStore1.AppProducts.Count - 1 do
    if TWindowsString.HStringToString(WindowsStore1.AppProducts[i].InAppOfferToken) = Item then begin
      BuyProduct(WindowsStore1.AppProducts[i]);
      exit;
    end;
end;

procedure TForm1.BuyProduct(Product: IStoreProduct);
begin
  try
    var status := WindowsStore1.PurchaseProduct(Product);
    if status = StorePurchaseStatus.Succeeded then
    begin
      EnableFullVersion;
    end
    else begin
      //;
    end;
  except
    On e : Exception do
      //;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  PurchaseItem('MyAddon');
end;

Проблемы и недостатки:

  • Отсутствие обработки ошибок: Блок except пуст, что затрудняет отладку и выявление причин сбоев.
  • Недостаточная обработка статусов покупки: Обрабатывается только StorePurchaseStatus.Succeeded, остальные статусы игнорируются.
  • Использование InAppOfferToken: Более надежным способом идентификации продукта является использование StoreId.

Рабочее решение с использованием StoreId

Предлагаемое решение использует StoreId для идентификации продукта, что является более надежным подходом. Также, реализована более полная обработка статусов покупки и добавлены комментарии для улучшения читаемости.

procedure TfSubsriptions.btnSubscribeClick(Sender: TObject);
var
  Status: StorePurchaseStatus;
  i: Integer;
begin
  try
    WindowsStore1.RefreshInfo; // Обновляем информацию о продуктах
  except
    // Обработка ошибок при обновлении информации
    ShowMessage('Ошибка при обновлении информации о продуктах из Store.');
    Exit;
  end;

  for i := 0 to WindowsStore1.AppProducts.Count - 1 do
  begin
    if WindowsStore1.AppProducts[i].StoreId.ToString = 'Ваш_StoreId' then // Замените 'Ваш_StoreId' на реальный StoreId продукта
    begin
      try
        Status := WindowsStore1.PurchaseProduct(WindowsStore1.AppProducts[i]);

        case Status of
          StorePurchaseStatus.Succeeded:
            begin
              // Подписка успешно приобретена
              SUBSCRIPTION := True;
              UpdateUI; // Обновляем интерфейс пользователя
              ShowMessage('Подписка успешно приобретена!');
              Break;
            end;
          StorePurchaseStatus.AlreadyPurchased:
            begin
              // Пользователь уже приобрел подписку
              ShowMessage('У вас уже есть активная подписка.');
              SUBSCRIPTION := True;
              UpdateUI;
              Break;
            end;
          StorePurchaseStatus.NotPurchased:
            begin
              // Подписка не приобретена
              ShowMessage('Подписка не приобретена.');
            end;
          StorePurchaseStatus.NetworkError:
            begin
              // Ошибка сети
              ShowMessage('Ошибка сети при попытке покупки.');
            end;
          StorePurchaseStatus.ServerError:
            begin
              // Ошибка сервера
              ShowMessage('Ошибка сервера при попытке покупки.');
            end;
          else
            begin
              // Неизвестный статус
              ShowMessage('Неизвестный статус покупки: ' + IntToStr(Ord(Status)));
            end;
        end;
      except
        On e : Exception do
        begin
          // Обработка исключений при покупке
          ShowMessage('Ошибка при покупке: ' + e.Message);
          Break;
        end;
      end;
    end;
  end;

  if not SUBSCRIPTION then
    ShowMessage('Не удалось найти продукт с указанным StoreId.');
end;

Ключевые моменты:

  • WindowsStore1.RefreshInfo: Перед покупкой необходимо обновить информацию о продуктах из Store.
  • StoreId: Используйте StoreId для точной идентификации продукта. Замените "Ваш_StoreId" на реальный StoreId вашей подписки.
  • Полная обработка статусов: Обрабатывайте все возможные статусы покупки для предоставления пользователю информативной обратной связи.
  • Обработка исключений: Добавьте обработку исключений для выявления и устранения ошибок.
  • Обновление интерфейса: После успешной покупки обновите интерфейс пользователя (UpdateUI) для отображения статуса подписки.

Альтернативные подходы

  1. Использование REST API Microsoft Store: Вместо компонента TWindowsStore можно использовать REST API Microsoft Store для более гибкого контроля над процессом покупки. Этот подход требует более сложной реализации, но позволяет настроить процесс в соответствии с вашими потребностями.
  2. Использование сторонних библиотек: Существуют сторонние библиотеки, упрощающие взаимодействие с Microsoft Store API. Рассмотрите возможность использования таких библиотек для упрощения разработки.
  3. Проверка подписки на сервере: Для предотвращения несанкционированного доступа к функциональности приложения, рекомендуется проверять статус подписки на вашем сервере. Это обеспечит дополнительный уровень безопасности.

Заключение

Реализация покупки подписки внутри приложения Delphi с использованием TWindowsStore требует внимательной обработки статусов покупки и обработки исключений. Предложенное решение с использованием StoreId и полной обработкой статусов является надежным подходом. Рассмотрите также альтернативные подходы для более гибкой настройки процесса покупки. Не забывайте о важности обновления интерфейса пользователя после успешной покупки и проверке статуса подписки на сервере для обеспечения безопасности.

Создано по материалам из источника по ссылке.

Контекст описывает реализацию покупки подписки внутри приложения Delphi с использованием компонента `TWindowsStore` для взаимодействия с Microsoft Store, предлагая рабочее решение и альтернативные подходы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложение своё ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-09-22 23:01:53/0.0042350292205811/0