[Windows11, Visual C++2017, FLTK 1.3.8, NO IDE]
ストアアプリ起動時にアドオンライセンスの取得状況をチェックする仕組みを作りました。
StoreAppLicenseデータをJSON型で入手し、これを解析してアドオンライセンスのbool値を取得します。
json11というライブラリを使って解析しました。
#include "json11.hpp"
#include <winrt/Windows.Services.Store.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Foundation.Collections.h>
using namespace winrt;
using namespace winrt::Windows::Services::Store;
using namespace winrt::Windows::Foundation::Collections;
bool AddOn1_bool;
bool AddOn2_bool;
int main(int argc, char** argv) {
// StoreContext取得
StoreContext _storeContext = StoreContext::GetDefault();
// StoreAppLicenseを非同期にて取得
winrt::Windows::Foundation::IAsyncOperation<StoreAppLicense> _storeAppLicense = _storeContext.GetAppLicenseAsync();
StoreAppLicense _storeAppLicense2 = _storeAppLicense.get();
// StoreAppLicenseデータをJSON型で取得
hstring data = _storeAppLicense2.ExtendedJsonData();
string data_str = winrt::to_string(data);
// JSONデータを解析
string err, err1, err2;
auto data_json = json11::Json::parse(data_str, err);
// アドオン名とライセンスbool値を取得
int num_addon = 1;
for (auto &k : data_json["productAddOns"].array_items()) {
cout << num_addon << ": " << k.dump() << endl;
switch (num_addon){
case 1:{
auto data_json1 = json11::Json::parse(k.dump(), err1);
string AddOnName1 = data_json1["inAppOfferToken"].string_value();
AddOn1_bool = data_json1["isActive"].bool_value();
cout << AddOnName1 << " : " << AddOn1_bool << endl;
break;
}
case 2:{
auto data_json2 = json11::Json::parse(k.dump(), err2);
string AddOnName2 = data_json2["inAppOfferToken"].string_value();
AddOn2_bool = data_json2["isActive"].bool_value();
cout << AddOnName2 << " : " << AddOn2_bool << endl;
break;
}
}
num_addon++;
}
<以下略>
}