まず、MFCアプリのプロジェクトを appx にパッケージングします。
Visual Studio を使ってデスクトップ アプリケーションをパッケージ化します。 - UWP app developer | Microsoft Docs
次に UWP の API を使うための設定を以下のページに従ってやります。
Windows 10 向けのデスクトップ アプリを強化する - UWP app developer | Microsoft Docs
あとは呼ぶだけです。ちょっとめんどくさいのが IInitializeWithWindow とかいうインターフェースの Initialize メソッドを呼ばないといけないところ。
とりあえず、以下のようなフィールドを使いたい画面のクラスのフィールドあたりで定義して
// using namespace Windows::Services::Store;
StoreContext^ _storeContext;
使うところだとこんな感じです。
// #include <ppltasks.h> // using namespace concurrency; if (_storeContext == nullptr) { _storeContext = StoreContext::GetDefault(); IInitializeWithWindow* initWithWindow; IInspectable* inspect = reinterpret_cast<IInspectable*>(_storeContext); if (SUCCEEDED(inspect->QueryInterface(IID_PPV_ARGS(&initWithWindow)))) { initWithWindow->Initialize((HWND)this); initWithWindow->Release(); } } create_task(_storeContext->RequestPurchaseAsync("買わせたいもののストアID")).then([this](Windows::Services::Store::StorePurchaseResult ^ result) { if (result->ExtendedError.Value != S_OK) { MessageBox(TEXT("Error"), TEXT("Info")); return; } switch (result->Status) { case StorePurchaseStatus::AlreadyPurchased: MessageBox(TEXT("AlreadyPurchased"), TEXT("Info")); break; case StorePurchaseStatus::Succeeded: MessageBox(TEXT("Succeeded"), TEXT("Info")); break; default: MessageBox(TEXT("Failed"), TEXT("Info")); break; } });
これで昔からあるアプリをデスクトップブリッジでラップして、あわよくばアプリ内課金の機能を追加できます。 ちなみにマイクロソフトストアに出す場合は、アプリ内で使用するアイテムやデジタルコンテンツは必ずストアのアプリ内購入の仕組みを使わないといけません。禁止される事項(2018/10/14 時点です。最新の情報は後述するストアポリシーページを見てください)は以下のような感じです。
- 外部で購入したサブスクリプションキーやライセンスキーによる機能の有効化
- アプリで使用するコンテンツを購入できる別サイトへのアプリからの誘導
- 例えばヘルプメニューから自分の HP に飛べて、そこからアプリ内で使用できるコンテンツのページに飛べるとかも NG。審査すり抜けたとしても気付かれたタイミングで何らかの対処が入ると思います。
許されるのは以下のような感じです。
- もともとユーザーが外部で購入したコンテンツを見れるとかは問題ない
- 例えば iOS とかも同じみたいで iOS 版 Kindle からは本を買うことは絶対できないけど、amazon.co.jp で買ったコンテンツは閲覧できるみたいなやつ