Использование Entitlement API из надстройки Fusion
Если у вас есть приложение в Autodesk App Store то вы, возможно, захотите проверить, заплатил ли на самом деле пользователь за свое приложение и скачал из магазина или просто скопировал его с чужого компьютера. В этом вам может помочь Entitlement API.
В сентябрьском выпуске Fusion API были введены два новых пользовательских свойства в Application object: userName и userId. Последний необходим, для того, чтобы воспользоваться Entitlement API.
Возможно, имеет смысл использовать этот API из надстройки C++, так как она гораздо лучше защищена благодаря компиляции. Описанном выше будет детально рассматриваться в статье.
Entitlement API является простым RESTful API, где вам нужно просто отправлять HTTP-GET запросы к серверу App Store, чтобы получить всё что вам нужно. Используемая библиотека может быть выбрана на ваше усмотрение, поскольку тут есть много вариантов. Я стал искать кроссплатформенную библиотеку, поскольку Fusion поддерживает как Mac, так и Windows. Однако те, которые я пробовал, были очень сложны в использовании. В конце концов, я решил работать с библиотекой cURL, которая действительно проста в использовании из надстройки для MacOS.
Шаги, которые необходимо предпринять:
1) Создать новую надстройку Fusion на C++:
2) Добавить поддержку cURL в вашу надстройку:
Когда как вы находитесь в Xcode, идите в Project settings и под "Build Settings >> Linking >> Other Linker Flags" добавьте "-lcurl"
3) Добавьте следующие объявления в верхней части файла C++:
- #include <curl/curl.h>
- #include <regex>
- using namespace std;
4) Кроме того, добавьте этот код, который использует библиотеку регулярных выражений: (есть немало тестеров регулярных выражений в Интернете, которые вы можете использовать – я использовал следующий: https://www.myregextester.com/index.php)
- // Получить значение данного свойства
- // внутри текста JSON
- string GetValue(string text, string find)
- {
- regex IsValid("\\s*\"" + find + "\"\\s*:\\s*(.+?)[\\s,]");
- smatch m;
- if (regex_search(text, m, IsValid))
- {
- if (m.size() > 1)
- return m[1];
- }
- return "";
- }
- size_t callback_func(void *ptr, size_t size, size_t count, void *stream)
- {
- // ptr - ваша переменная типа string.
- // stream - блок данных, который вы получили
- string reply((char*)ptr);
- string ret = GetValue(reply, "IsValid");
- // Если приложение не является допустимым
- if (ret != "true")
- ui->messageBox("IsValid = false");
- else
- ui->messageBox("IsValid = true");
- return 0;
- }
- // Используем Entitlement API, чтобы проверить,
- // является ли использование приложения полномочным
- void CheckValidity()
- {
- // Например, URL для приложения Voronoi Sketch generator:
- // https://apps.autodesk.com/FUSION/en/Detail/Index?id=appstore.exchange.autodesk.com%3avoronoisketchgenerator_macos%3aen
- // Он содержит "id":
- // "appstore.exchange.autodesk.com%3avoronoisketchgenerator_macos%3aen"
- // Так что мы можем использовать его
- string userId = app->userId();
- string userName = app->userName();
- string appId =
- "appstore.exchange.autodesk.com%3aaddinrename_windows32and64%3aen";
- string url =
- string("https://apps.exchange.autodesk.com/webservices/checkentitlement") +
- string("?userid=") + userId +
- string("&appid=") + appId;
- CURL * curl = curl_easy_init();
- if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback_func);
- res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
- }
- }
5) Теперь вы можете вызвать CheckValidity() изнутри вашей функции run()
Вы можете легко выяснить id вашего приложения, найдя его в App Store, а затем анализируя его URLв браузере. Этот адрес будет содержать необходимый вам id параметр. Например, версия Voronoi Sketch Generator для MacOS на английском,имеет следующий URL, и в нём подчеркнута важная роль id:
https://apps.autodesk.com/FUSION/en/Detail/Index?id=appstore.exchange.autodesk.com%3avoronoisketchgenerator_macos%3aen
Стоит отметить, что Entitlement API предоставляет информацию только о том, заплатил ли пользователь за приложение, но не сообщает, было ли бесплатное приложение загружено данным пользователем из магазина.
Так что, когда эта функциональность используется по отношению к бесплатным приложениям, то IsValid всегда будет возвращать false:
Но если осуществить проверку платного приложения, за которое я заплатил, я получу значение true:
Поскольку Entitlement API основан на простых HTTP- запросах, вы можете легко проверить его в утилитах, как RESTClient для Firefox.
Вы можете найти полный исходный код здесь: https://github.com/AutodeskFusion360/EntitlementAPI.
В настоящее время пример содержит код только под MacOS. Однако, скорее всего, позже будет добавлена Windows версия.
Источник: http://modthemachine.typepad.com/my_weblog/2015/10/use-entitlement-api-from-fusion.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=3333
Опубликовано 11.01.2016