From fe48164ede5e04fd18e227296fe497cae6383f27 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Thu, 17 Sep 2026 17:05:19 +0900 Subject: [PATCH 1/3] [in_app_purchase] Use wrapper api --- .../tizen/inc/ftpw_in_app_purchase.h | 54 ++++++++ .../lib/aarch64/libftpw_in_app_purchase.so | Bin 0 -> 14776 bytes .../lib/armel/libftpw_in_app_purchase.so | Bin 0 -> 9792 bytes .../tizen/lib/i586/libftpw_in_app_purchase.so | Bin 0 -> 9812 bytes .../lib/x86_64/libftpw_in_app_purchase.so | Bin 0 -> 14864 bytes .../in_app_purchase/tizen/project_def.prop | 3 + .../tizen/src/billing_manager.cc | 129 +++--------------- .../tizen/src/billing_manager.h | 46 ------- .../tizen/src/billing_service_proxy.cc | 97 ------------- .../tizen/src/billing_service_proxy.h | 94 ------------- .../tizen/src/in_app_purchase_tizen_plugin.cc | 10 +- 11 files changed, 75 insertions(+), 358 deletions(-) create mode 100644 packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h create mode 100755 packages/in_app_purchase/tizen/lib/aarch64/libftpw_in_app_purchase.so create mode 100755 packages/in_app_purchase/tizen/lib/armel/libftpw_in_app_purchase.so create mode 100755 packages/in_app_purchase/tizen/lib/i586/libftpw_in_app_purchase.so create mode 100755 packages/in_app_purchase/tizen/lib/x86_64/libftpw_in_app_purchase.so delete mode 100644 packages/in_app_purchase/tizen/src/billing_service_proxy.cc delete mode 100644 packages/in_app_purchase/tizen/src/billing_service_proxy.h diff --git a/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h b/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h new file mode 100644 index 000000000..b058d4642 --- /dev/null +++ b/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h @@ -0,0 +1,54 @@ +// Copyright 2026 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#ifndef FLUTTER_TIZEN_PLUGINS_WRAPPER_IN_APP_PURCHASE_H_ +#define FLUTTER_TIZEN_PLUGINS_WRAPPER_IN_APP_PURCHASE_H_ + +#include +#include + +typedef void (*billing_payment_api_cb)(const char *detail_result, + void *user_data); +typedef bool (*billing_buyitem_cb)(const char *pay_result, + const char *detail_info, void *user_data); + +typedef struct sso_login_info { + char login_id[128]; + char login_pwd[128]; + char login_guid[128]; + char uid[128]; + char user_icon[128 * 8]; +} sso_login_info_s; + +#ifdef __cplusplus +extern "C" { +#endif + +// Native libraries remain loaded for the process lifetime (callbacks may +// outlive calls). + +bool ftpw_in_app_purchase_service_billing_get_products_list( + const char *app_id, const char *country_code, int page_size, + int page_number, const char *check_value, billing_payment_api_cb callback, + void *user_data); +bool ftpw_in_app_purchase_service_billing_get_purchase_list( + const char *app_id, const char *custom_id, const char *country_code, + int page_number, const char *check_value, billing_payment_api_cb callback, + void *user_data); +bool ftpw_in_app_purchase_service_billing_is_service_available( + billing_payment_api_cb callback, void *user_data); +bool ftpw_in_app_purchase_service_billing_buyitem(const char *app_id, + const char *detail_info); +void ftpw_in_app_purchase_service_billing_set_buyitem_cb( + billing_buyitem_cb callback, void *user_data); +bool ftpw_in_app_purchase_service_billing_verify_invoice( + const char *app_id, const char *custom_id, const char *invoice_id, + const char *country_code, billing_payment_api_cb callback, void *user_data); +bool ftpw_in_app_purchase_sso_get_login_info(sso_login_info_s *login_info); +char *ftpw_in_app_purchase_get_county_code(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/packages/in_app_purchase/tizen/lib/aarch64/libftpw_in_app_purchase.so b/packages/in_app_purchase/tizen/lib/aarch64/libftpw_in_app_purchase.so new file mode 100755 index 0000000000000000000000000000000000000000..17767980c0e8ed99194c4935178e6551d40790bf GIT binary patch literal 14776 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 literal 0 HcmV?d00001 diff --git a/packages/in_app_purchase/tizen/lib/i586/libftpw_in_app_purchase.so b/packages/in_app_purchase/tizen/lib/i586/libftpw_in_app_purchase.so new file mode 100755 index 0000000000000000000000000000000000000000..746a30be0f586ff19468410d9b2c490312041f9e GIT binary patch literal 9812 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 U #include #include @@ -14,27 +13,13 @@ #include #include -#include "billing_service_proxy.h" +#include "ftpw_in_app_purchase.h" #include "log.h" #include "messages.h" #include "rapidjson/document.h" namespace in_app_purchase_tizen { -static std::string ServerTypeToString(billing_server_type server_type) { - switch (server_type) { - case SERVERTYPE_OPERATE: - return "PRD"; - break; - case SERVERTYPE_DEV: - return "DEV"; - break; - default: - return "NONE"; - break; - } -} - static flutter::EncodableValue ConvertVariantToEncodable( std::variant var) { if (std::holds_alternative(var)) { @@ -45,38 +30,13 @@ static flutter::EncodableValue ConvertVariantToEncodable( return flutter::EncodableValue(); } -bool BillingManager::Init() { - LOG_INFO("[BillingManager] Init billing api."); - - if (!BillingWrapper::GetInstance().Initialize()) { - LOG_ERROR("[BillingManager] Fail to initialize billing APIs."); - return false; - } - return true; -} - std::optional BillingManager::GetCustomId() { - void *handle = dlopen("libsso_api.so", RTLD_LAZY); - if (!handle) { - LOG_ERROR("[BillingManager] Fail to open sso APIs."); - return std::nullopt; - } - FuncSsoGetLoginInfo sso_get_login_info = - reinterpret_cast( - dlsym(handle, "sso_get_login_info")); - if (!sso_get_login_info) { - LOG_ERROR("[BillingManager] Fail to find the sso_get_login_info symbol."); - dlclose(handle); - return std::nullopt; - } - std::optional custom_id; sso_login_info_s login_info = {}; - int ret = sso_get_login_info(&login_info); - if (ret == SSO_SUCCESS) { + if (!ftpw_in_app_purchase_sso_get_login_info(&login_info)) { custom_id = login_info.uid; } else { - LOG_ERROR("[BillingManager] Fail to get the login info. (%d)", ret); + LOG_ERROR("[BillingManager] Fail to get the login info."); } // NOTE: written through volatile because a plain memset on a struct that // is dead afterwards is dropped by the optimizer. @@ -84,81 +44,32 @@ std::optional BillingManager::GetCustomId() { for (std::size_t i = 0; i < sizeof(login_info); ++i) { bytes[i] = 0; } - dlclose(handle); return custom_id; } std::optional BillingManager::GetCountryCode() { - void *handle = dlopen("libvconf.so.0", RTLD_LAZY); - if (!handle) { - LOG_ERROR("[BillingManager] Fail to open vconf APIs."); - return std::nullopt; - } - FuncVconfGetStr vconf_get_str = - reinterpret_cast(dlsym(handle, "vconf_get_str")); - if (!vconf_get_str) { - LOG_ERROR("[BillingManager] Fail to find the vconf_get_str symbol."); - dlclose(handle); - return std::nullopt; - } - std::optional country_code; - char *value = vconf_get_str("db/comss/countrycode"); + char *value = ftpw_in_app_purchase_get_county_code(); if (value) { country_code = value; free(value); } else { - LOG_ERROR("[BillingManager] Fail to read db/comss/countrycode."); + LOG_ERROR("[BillingManager] Fail to get country code."); } - dlclose(handle); return country_code; } bool BillingManager::IsAvailable(FunctionResult result) { LOG_INFO("[BillingManager] Check billing server is available."); - void *handle = dlopen("libcapi-system-info.so.0", RTLD_LAZY); - if (!handle) { - LOG_ERROR("[BillingManager] Fail to open system APIs."); - } else { - FuncSystemInfGetValueInt system_info_get_value_int = - reinterpret_cast( - dlsym(handle, "system_info_get_value_int")); - if (system_info_get_value_int) { - int tv_server_type = 0; - int ret = system_info_get_value_int(SYSTEM_INFO_KEY_INFO_LINK_SERVER_TYPE, - &tv_server_type); - if (ret == SYSTEM_INFO_ERROR_NONE) { - switch (tv_server_type) { - case PRD: - billing_server_type_ = SERVERTYPE_OPERATE; - break; - case DEV: - billing_server_type_ = SERVERTYPE_DEV; - break; - default: - billing_server_type_ = SERVERTYPE_NONE; - break; - } - LOG_INFO("[BillingManager] Billing Server Type is %d", - billing_server_type_); - } else { - LOG_ERROR("[BillingManager] Fail to get TV server type."); - dlclose(handle); - return false; - } - } - dlclose(handle); - } - if (is_available_callback_) { LOG_ERROR("[BillingManager] IsAvailable is already called."); return false; } is_available_callback_ = std::move(result); - bool ret = BillingWrapper::GetInstance().service_billing_is_service_available( - billing_server_type_, OnAvailable, this); + bool ret = ftpw_in_app_purchase_service_billing_is_service_available( + OnAvailable, this); if (!ret) { is_available_callback_ = nullptr; LOG_ERROR("[BillingManager] service_billing_is_service_available failed."); @@ -179,9 +90,9 @@ bool BillingManager::GetProductList( } get_product_list_callback_ = std::move(result); - bool ret = BillingWrapper::GetInstance().service_billing_get_products_list( - app_id, country_code, page_size, page_number, check_value, - billing_server_type_, OnProducts, this); + bool ret = ftpw_in_app_purchase_service_billing_get_products_list( + app_id, country_code, page_size, page_number, check_value, OnProducts, + this); if (!ret) { get_product_list_callback_ = nullptr; LOG_ERROR("[BillingManager] service_billing_get_products_list failed."); @@ -202,9 +113,9 @@ bool BillingManager::GetPurchaseList( } get_purchase_list_callback_ = std::move(result); - bool ret = BillingWrapper::GetInstance().service_billing_get_purchase_list( - app_id, custom_id, country_code, page_number, check_value, - billing_server_type_, OnPurchase, this); + bool ret = ftpw_in_app_purchase_service_billing_get_purchase_list( + app_id, custom_id, country_code, page_number, check_value, OnPurchase, + this); if (!ret) { get_purchase_list_callback_ = nullptr; LOG_ERROR("[BillingManager] service_billing_get_purchase_list failed."); @@ -224,9 +135,8 @@ bool BillingManager::BuyItem(const char *app_id, const char *detail_info, } buy_item_callback_ = std::move(result); - bool ret = BillingWrapper::GetInstance().service_billing_buyitem( - app_id, ServerTypeToString(billing_server_type_).c_str(), detail_info); - BillingWrapper::GetInstance().service_billing_set_buyitem_cb(OnBuyItem, this); + bool ret = ftpw_in_app_purchase_service_billing_buyitem(app_id, detail_info); + ftpw_in_app_purchase_service_billing_set_buyitem_cb(OnBuyItem, this); if (!ret) { buy_item_callback_ = nullptr; LOG_ERROR("[BillingManager] service_billing_buyitem failed."); @@ -246,9 +156,8 @@ bool BillingManager::VerifyInvoice( } verify_invoice_callback_ = std::move(result); - bool ret = BillingWrapper::GetInstance().service_billing_verify_invoice( - app_id, custom_id, invoice_id, country_code, billing_server_type_, - OnVerify, this); + bool ret = ftpw_in_app_purchase_service_billing_verify_invoice( + app_id, custom_id, invoice_id, country_code, OnVerify, this); if (!ret) { verify_invoice_callback_ = nullptr; LOG_ERROR("[BillingManager] service_billing_verify_invoice failed."); @@ -530,8 +439,4 @@ void BillingManager::OnVerify(const char *detail_result, void *user_data) { self->verify_invoice_callback_ = nullptr; } -void BillingManager::Dispose() { - LOG_INFO("[BillingManager] Dispose billing."); -} - } // namespace in_app_purchase_tizen diff --git a/packages/in_app_purchase/tizen/src/billing_manager.h b/packages/in_app_purchase/tizen/src/billing_manager.h index 7a140b7ce..a0a9f94e7 100644 --- a/packages/in_app_purchase/tizen/src/billing_manager.h +++ b/packages/in_app_purchase/tizen/src/billing_manager.h @@ -5,8 +5,6 @@ #ifndef FLUTTER_PLUGIN_BILLING_MANAGER_H #define FLUTTER_PLUGIN_BILLING_MANAGER_H -#include - #include #include #include @@ -14,51 +12,11 @@ #include #include -#include "billing_service_proxy.h" #include "messages.h" #include "rapidjson/document.h" -#define SSO_API_MAX_STRING_LEN 128 -#define SSO_SUCCESS 0 - namespace in_app_purchase_tizen { -typedef struct sso_login_info { - char login_id[SSO_API_MAX_STRING_LEN]; - char login_pwd[SSO_API_MAX_STRING_LEN]; - char login_guid[SSO_API_MAX_STRING_LEN]; - char uid[SSO_API_MAX_STRING_LEN]; - char user_icon[SSO_API_MAX_STRING_LEN * 8]; -} sso_login_info_s; - -typedef enum { - PRD = 0, - DEV, -} tv_server_type; - -typedef enum { - SYSTEM_INFO_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */ - SYSTEM_INFO_ERROR_INVALID_PARAMETER = - TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */ - SYSTEM_INFO_ERROR_OUT_OF_MEMORY = - TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */ - SYSTEM_INFO_ERROR_IO_ERROR = - TIZEN_ERROR_IO_ERROR, /**< An input/output error occurred when reading - value from system */ - SYSTEM_INFO_ERROR_PERMISSION_DENIED = - TIZEN_ERROR_PERMISSION_DENIED, /**< No permission to use the API */ - SYSTEM_INFO_ERROR_NOT_SUPPORTED = - TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported parameter (Since 3.0) */ -} system_info_error_e; - -typedef enum { - SYSTEM_INFO_KEY_INFO_LINK_SERVER_TYPE = 126, -} system_info_key_e; - -typedef int (*FuncSsoGetLoginInfo)(sso_login_info_s *login_info); -typedef char *(*FuncVconfGetStr)(const char *in_key); -typedef int (*FuncSystemInfGetValueInt)(system_info_key_e key, int *value); - template using FunctionResult = std::function)>; @@ -102,8 +60,6 @@ class BillingManager { explicit BillingManager() {} ~BillingManager(){}; - bool Init(); - void Dispose(); bool IsAvailable(FunctionResult result); bool BuyItem(const char *app_id, const char *detail_info, FunctionResult result); @@ -128,8 +84,6 @@ class BillingManager { static void OnAvailable(const char *detail_result, void *user_data); static void OnVerify(const char *detail_result, void *user_data); - billing_server_type billing_server_type_; - FunctionResult is_available_callback_; FunctionResult buy_item_callback_; FunctionResult get_product_list_callback_; diff --git a/packages/in_app_purchase/tizen/src/billing_service_proxy.cc b/packages/in_app_purchase/tizen/src/billing_service_proxy.cc deleted file mode 100644 index 389e1642b..000000000 --- a/packages/in_app_purchase/tizen/src/billing_service_proxy.cc +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2025 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "billing_service_proxy.h" - -#include - -BillingWrapper::BillingWrapper() { - handle_ = dlopen("libbilling_api.so", RTLD_LAZY); -} - -BillingWrapper::~BillingWrapper() { - if (handle_) { - dlclose(handle_); - } -} - -bool BillingWrapper::Initialize() { - if (!handle_) { - return false; - } - - get_products_list = reinterpret_cast( - dlsym(handle_, "service_billing_get_products_list")); - get_purchase_list = reinterpret_cast( - dlsym(handle_, "service_billing_get_purchase_list")); - is_service_available = reinterpret_cast( - dlsym(handle_, "service_billing_is_service_available")); - buyitem = - reinterpret_cast(dlsym(handle_, "service_billing_buyitem")); - set_buyitem_cb = reinterpret_cast( - dlsym(handle_, "service_billing_set_buyitem_cb")); - verify_invoice = reinterpret_cast( - dlsym(handle_, "service_billing_verify_invoice")); - return get_products_list && get_purchase_list && is_service_available && - buyitem && set_buyitem_cb && verify_invoice; -} - -bool BillingWrapper::service_billing_get_products_list( - const char *app_id, const char *country_code, int page_size, - int page_number, const char *check_value, billing_server_type server_type, - billing_payment_api_cb callback, void *user_data) { - if (get_products_list) { - return get_products_list(app_id, country_code, page_size, page_number, - check_value, server_type, callback, user_data); - } - return false; -} - -bool BillingWrapper::service_billing_get_purchase_list( - const char *app_id, const char *custom_id, const char *country_code, - int page_number, const char *check_value, billing_server_type server_type, - billing_payment_api_cb callback, void *user_data) { - if (get_purchase_list) { - return get_purchase_list(app_id, custom_id, country_code, page_number, - check_value, server_type, callback, user_data); - } - return false; -} - -bool BillingWrapper::service_billing_buyitem(const char *app_id, - const char *server_type, - const char *detail_info) { - if (buyitem) { - return buyitem(app_id, server_type, detail_info); - } - return false; -} - -void BillingWrapper::service_billing_set_buyitem_cb(billing_buyitem_cb callback, - void *user_data) { - if (set_buyitem_cb) { - return set_buyitem_cb(callback, user_data); - } - return; -} - -bool BillingWrapper::service_billing_is_service_available( - billing_server_type server_type, billing_payment_api_cb callback, - void *user_data) { - if (is_service_available) { - return is_service_available(server_type, callback, user_data); - } - return false; -} - -bool BillingWrapper::service_billing_verify_invoice( - const char *app_id, const char *custom_id, const char *invoice_id, - const char *country_code, billing_server_type server_type, - billing_payment_api_cb callback, void *user_data) { - if (verify_invoice) { - return verify_invoice(app_id, custom_id, invoice_id, country_code, - server_type, callback, user_data); - } - return false; -} diff --git a/packages/in_app_purchase/tizen/src/billing_service_proxy.h b/packages/in_app_purchase/tizen/src/billing_service_proxy.h deleted file mode 100644 index ff77e14ab..000000000 --- a/packages/in_app_purchase/tizen/src/billing_service_proxy.h +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2025 Samsung Electronics Co., Ltd. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_PLUGIN_BILLING_SERVICE_PROXY_H_ -#define FLUTTER_PLUGIN_BILLING_SERVICE_PROXY_H_ - -typedef enum { - SERVERTYPE_OPERATE = 10005, - SERVERTYPE_DEV, - SERVERTYPE_WORKING, - SERVERTYPE_DUMMY, - SERVERTYPE_NONE -} billing_server_type; - -typedef void (*billing_payment_api_cb)(const char *detail_result, - void *user_data); -typedef bool (*billing_buyitem_cb)(const char *pay_result, - const char *detail_info, void *user_data); -typedef bool (*FuncGetProductslist)(const char *app_id, - const char *country_code, int page_size, - int page_number, const char *check_value, - billing_server_type server_type, - billing_payment_api_cb callback, - void *user_data); -typedef bool (*FuncGetpurchaselist)(const char *app_id, const char *custom_id, - const char *country_code, int page_number, - const char *check_value, - billing_server_type server_type, - billing_payment_api_cb callback, - void *user_data); -typedef bool (*FuncBuyItem)(const char *app_id, const char *server_type, - const char *detail_info); -typedef void (*FuncSetBuyItemCb)(billing_buyitem_cb callback, void *user_data); -typedef bool (*FuncIsServiceAvailable)(billing_server_type server_type, - billing_payment_api_cb callback, - void *user_data); -typedef bool (*FuncVerifyInvoice)(const char *app_id, const char *custom_id, - const char *invoice_id, - const char *country_code, - billing_server_type server_type, - billing_payment_api_cb callback, - void *user_data); - -class BillingWrapper { - public: - static BillingWrapper &GetInstance() { - static BillingWrapper instance = BillingWrapper(); - return instance; - } - - ~BillingWrapper(); - - BillingWrapper(const BillingWrapper &) = delete; - BillingWrapper &operator=(const BillingWrapper &) = delete; - - bool Initialize(); - - bool service_billing_get_products_list( - const char *app_id, const char *country_code, int page_size, - int page_number, const char *check_value, billing_server_type server_type, - billing_payment_api_cb callback, void *user_data); - bool service_billing_get_purchase_list( - const char *app_id, const char *custom_id, const char *country_code, - int page_number, const char *check_value, billing_server_type server_type, - billing_payment_api_cb callback, void *user_data); - bool service_billing_buyitem(const char *app_id, const char *server_type, - const char *detail_info); - void service_billing_set_buyitem_cb(billing_buyitem_cb callback, - void *user_data); - bool service_billing_is_service_available(billing_server_type server_type, - billing_payment_api_cb callback, - void *user_data); - bool service_billing_verify_invoice(const char *app_id, const char *custom_id, - const char *invoice_id, - const char *country_code, - billing_server_type server_type, - billing_payment_api_cb callback, - void *user_data); - - private: - BillingWrapper(); - - FuncGetProductslist get_products_list = nullptr; - FuncGetpurchaselist get_purchase_list = nullptr; - FuncBuyItem buyitem = nullptr; - FuncSetBuyItemCb set_buyitem_cb = nullptr; - FuncIsServiceAvailable is_service_available = nullptr; - FuncVerifyInvoice verify_invoice = nullptr; - - void *handle_ = nullptr; -}; - -#endif // FLUTTER_PLUGIN_BILLING_SERVICE_PROXY_H_ diff --git a/packages/in_app_purchase/tizen/src/in_app_purchase_tizen_plugin.cc b/packages/in_app_purchase/tizen/src/in_app_purchase_tizen_plugin.cc index f9a29dba6..75e80aa40 100644 --- a/packages/in_app_purchase/tizen/src/in_app_purchase_tizen_plugin.cc +++ b/packages/in_app_purchase/tizen/src/in_app_purchase_tizen_plugin.cc @@ -54,18 +54,10 @@ class InAppPurchaseTizenPlugin : public flutter::Plugin, InAppPurchaseTizenPlugin::InAppPurchaseTizenPlugin( flutter::PluginRegistrar *plugin_registrar) { billing_ = std::make_unique(); - if (!billing_->Init()) { - Dispose(); - } InAppPurchaseTizenPlugin::SetUp(plugin_registrar->messenger(), this); } -void InAppPurchaseTizenPlugin::Dispose() { - if (billing_) { - billing_->Dispose(); - } - billing_ = nullptr; -} +void InAppPurchaseTizenPlugin::Dispose() { billing_ = nullptr; } void InAppPurchaseTizenPlugin::RegisterWithRegistrar( flutter::PluginRegistrar *plugin_registrar) { From 927eaf42d51007dc901a6a2a80a94727705930e9 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 22 Sep 2026 10:50:53 +0900 Subject: [PATCH 2/3] style: annotate wrapper header guard endings --- packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h b/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h index b058d4642..5e02f9aa0 100644 --- a/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h +++ b/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h @@ -51,4 +51,4 @@ char *ftpw_in_app_purchase_get_county_code(); } #endif -#endif +#endif // FLUTTER_TIZEN_PLUGINS_WRAPPER_IN_APP_PURCHASE_H_ From 1939614d6ae2b56236f5b13ffad45ce83ac5b25f Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 22 Sep 2026 13:29:04 +0900 Subject: [PATCH 3/3] fix(in_app_purchase): correct country code API name --- .../tizen/inc/ftpw_in_app_purchase.h | 2 +- .../lib/aarch64/libftpw_in_app_purchase.so | Bin 14776 -> 14776 bytes .../lib/armel/libftpw_in_app_purchase.so | Bin 9792 -> 9792 bytes .../tizen/lib/i586/libftpw_in_app_purchase.so | Bin 9812 -> 9812 bytes .../lib/x86_64/libftpw_in_app_purchase.so | Bin 14864 -> 14864 bytes .../tizen/src/billing_manager.cc | 2 +- 6 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h b/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h index 5e02f9aa0..8c6c22f7f 100644 --- a/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h +++ b/packages/in_app_purchase/tizen/inc/ftpw_in_app_purchase.h @@ -45,7 +45,7 @@ bool ftpw_in_app_purchase_service_billing_verify_invoice( const char *app_id, const char *custom_id, const char *invoice_id, const char *country_code, billing_payment_api_cb callback, void *user_data); bool ftpw_in_app_purchase_sso_get_login_info(sso_login_info_s *login_info); -char *ftpw_in_app_purchase_get_county_code(); +char *ftpw_in_app_purchase_get_country_code(); #ifdef __cplusplus } diff --git a/packages/in_app_purchase/tizen/lib/aarch64/libftpw_in_app_purchase.so b/packages/in_app_purchase/tizen/lib/aarch64/libftpw_in_app_purchase.so index 17767980c0e8ed99194c4935178e6551d40790bf..6fcdf6c4fac83502f54fec57142ee1cbcaa86430 100755 GIT binary patch delta 577 zcmdl{yrX!-4MyJ*mC4~puBqMjbGyTF`p563{z{I28GyhTh~+>GAP@v%aWIR4K>|oi z0Wk-Z&kdwyftVeL#U`sVDKpAU_GF6Ylm_yJftX>kB8&Ls2}&-LIhZX{K&r)nm=TEC zfH;6bDuhLZBLO4^vjNBi1DH)9lRyAu3ka~U-rqO-{;!e=zsmkh_F7`Z>b^{8&GUV^ z#-hD#$^5OKCMPl~Og_S_!?ob35|dxBN=)`(lb8f#UH~$8 z0C574Ex{(Sxq@vK6Jyb2CC;6b?{GTQ-)CZA5CGa|0K|zurUQBG43^9gvCHeTSwTMV z0P;bA5eTn9)hht`(?dXJSM7)hQ3suv;8f+GJ9Rlge00A>^g@1P2R=0h!DVhG-R zkgHuO5M(z9fWj37KyC*C7$2k+nGdoHnGbRs2=GBD2D!;Ib=Nb-ZT8e-W?^abzQMma Uz~}@cW6ESnlX{@=OcQxl06>&uP5=M^ delta 587 zcmdl{yrX!-4Mtzfm}e8e=OmX+Y~k2zbDyz#!>zwe3_xHE#Bv}85C{UX1enFZAOobu zftUlz=Z4bkKw5gTDw8s!>|{@-Xi+gBUl=MU1f``WZ)EbH%)xAt!2=WlsbBt3(!r=fC0|Ah2l0Ym4;sAj(gaVTw7l42)5U+W@FPGJQna=F{ze*;1Eit;d^g|K* z>ivBaf0g|)7VT}DoX99M`3SQPBsN#Dtzw$2%(-*&ZBEDfd%zG80NQ2%#ECzq19|KW7R(T_%j>gQL4I%t z@I*hVZz@6^(;%iJW|*d7qW$Y1I!@hxwd?q+J^%3Pvv1jI&X@K+ z{=T`Q=;)zM-h(g9X*{RcBMcr8EyBv>7F|5!I?Me;Gah}gfaox$`N>761krbHqIOgN z3cbQZw8PYum|uta3ry{X9zedw)JbTMm#ECtO{kxztoJkWi;*|$Q+;`VTEu7EHD#FV z?aM`sllFk8H4oJo0>4VW4yWz4W1%pQ+5^)&;P^1-PTwasA{(84Jws3}Yx!!8pbcD} z<7ix$9}sP+kMn;QiJ>BFbNJXp?PmMKp_f6@{hP^b@3s?VfU zt}F10sOEkqMvo2lDmTYGqPX4D}YE#o44qPi`P2FAHO z8nww*cJqf|ve}z?KbUNPnlFLLmu2uTU=xkyzrjY}jc}wSY764s1i2Q>05fP;=07EYT delta 1584 zcmb7FZA=tb6uoa@fn^tVXW2yzt24`twiT@)(r8SSZE3A7CdOcdv@vLkkrrA%s=;jR zwqlH5w2*6}2Aa^Mh(x2%?T*7vU{l~^J^4y%WK51yAOtLs24i7{(*Jc^8{kV1ueCYXpI_Q@Z~9|?>+2Oa z`zQD2Ui{(n?&$;nRRuebVhUTuny`3SL`4=abLir4-srd&`wExVyhIh4;wLwG;J+^* z>a~53AR56oPuYGo@>>dtR@(k&_z2d|`ZoCE$RD%wx3GQ#>g~4ud+?S2*Nb1wdgS2K zIiuW|`&w*C7LgAV4PeXSgKnZciXtY5z~3q*A82Vo*<9*)ns-pCotHPW{oga#N)C0} zu|KYS;3RTV@6-8$-n4TD=A+&lD44Aj6twx-3CL$XllR$qtd|9lcTh)sd)}WSmJH%f zN57cRemOOf{3r2XR)44HAw^$Mbf2QnD!NP2#}xgkqT4fiVfwH{q¢(=PinD=dTu5kAbr1u<={9sL&k z38H?E6s{2lA1aJ$JGIP;JK$6{(JSoomW!QS?OiTbakF)!>}fM?f-;z9p!o{jzJ&1L}4 zm}C=3mfa^=cClpHt&(MzNtVroH-nnMcmv4FCqllnlS+Nmn@f}e%axPh2L4rFS6zVu&x`#WG0MdPZZqb^-VUIg zJ!-;&OnlI0hxB5OzcXk4jXA!5jz6mS3e?-Dcq1&5>O6F~9|;?rgvTHgKhBI^|LJawC*H>{k8^ zN*;fL2chJ{viK%c`e1nqY8Wa69}o7DM8aDbZl$Eu4F7ndzz8uu`e3}>bTn|=OH`PjPMpz$#o$4F#!+A=viUGRG>xPl)A;k?6ZpJAjsFS$lOjZ?#wWom z!9URWR>V7ncx@VY!@nKzj;wHtcoq{%ko~sge#2p%e42`K|0bL1z9{EdiX6QVoK-)> z)zgEO7Euiw5B8tM@>Rb*1B$l=st7>pk*1owoMnzFj6nY@vY`ZEotamCFhmvW0a^r8IAA zk~^q6KP=nmKz>NRMl<=H@+5hbkesC!CFuYDf~vl}ZFXR(Ac&{rj>k^IFtD_SSx!85 zie6FbWI0VKrBbEelzRCi71*0)E$y&}*=}DeyXm4mAkUD+QB*j5QB`9L*7nO+@Tsxy z?6uSLN}P_-21ki}k#;&Z%8hi;aR7x??R-Lx(_2oDe4max*O{*Up{gBmO3+p3die!~ zT$`~~zpGOIPKRB7-paK>_EOrl%kvV7JhouEeC{7reS|^%zc}-^{mCcYAxlfbDnu6q zMI`v9So00D=1O4A7s8q=hu@(a8cRe9ZGgMOAW2`f_c_esKJYG@0>8ua;M^yMX^Ssd z8v*2w(2VQi7hZ#aE@V&ClsF_y)@0zRF^uK-K#klIkPFq?`!bi-d~ z*z@`Jx#Yd2tx`7AK$*|Xxnl{_hh;t^XYM@xP!=$AE?I_Y3HD0lsFI2U0V8KCOf5j1 z&t~cc;tWUVbs)Z%6nzb}2((BSfD*`Hf^6jh<22ATtpgfFiyWlgK;uB;Gz66STcA&X NCUNx1`9JwlHwXX# delta 1632 zcmZ8idu)?c6u-A!pX=l6W2|McmbPIDR2`c$^$C#yK}H5x_(Nulu^8$g^RehelR66v zN@}_si9r!Z!kfV`B|Zos;u1~N2yu&qELlhdrYu6D8J6Haf2aLA>uz#-e!qLpJ?DPs z-g`RKGSrgw$-Z9yd_%lOh7w%gj|t(>_zdWo z5Nup1+MEsA3DHBWBy|tl@qJUnPJ3ld$~eV~fY)$x-Za}*d3VH7ibXufgY)o5a2_7z z`{DdNI7|Qavzrae4n#j1z0*lg>}$BV|JKWZebUvQ57pb>Y&C~fREUPIHK|2z(0k3oyK3s`pL5O zv%yW^hcx@!@b5tpw-&iocrg(}zat zVzB)(Vwdbn!EO?zyAb@H03rpIlo#%|(M(}T)_b2pqBdY9T< zwek?X;d)Hg(ka*ba)?^pn`9TAcKhTu8g@6ChksSoH5tm1+w-9Og<3pI<#8gc_G zE#r5=FHht7Y1~(8Xo$)F_0#y;B41WW$quiTIqU-dtc?Eze5H)vEW;e&pK6*6HdOSC z1#5Hn&uNh|LfxT&g-ge>kq(Cf1}@wn{TK>cxRfm0DUW#@N@Szi;jn>=)l5r(xSSE% z48#SF(@r2hmVP<|bOGoBT?NXbO=rm-2^;!=`ltygfsUAd diff --git a/packages/in_app_purchase/tizen/lib/x86_64/libftpw_in_app_purchase.so b/packages/in_app_purchase/tizen/lib/x86_64/libftpw_in_app_purchase.so index c7ddef677d2cd34f57468ae475da891775993b53..60b383a21c4971f7faa8eaea6342cc062dabea21 100755 GIT binary patch delta 634 zcmYk2Q7D5^6vxl~zI~s~Vq{}B4+}*ZGp3Y>DGz2vQ%cK&$z)4X8ZQbjywU0si&7E~ zQ``EUq1od= zh7Vk4x$_91`jHk|pp1y6umWhrXhmd^D;VuaJ!0mEQX8}J8)>Gd8S^@XWa1fM!@G=)@^yx%{0`-#PW*8jNwqE8vUbY8#TE%#gY zcIQny-#p7&v`(F#u?Ox}npldyJfy^VM744UvW*NPdgM#7@?(qv)vBe{D~YZ0X~PTe zsvg>6cuWQFN!M^74bf-~fB^=?-5E&mDi!O!Sf9%uVWxst^gO4Q@O2cJDDP*G75m9= z%@#EP=pb0G%kV4e!vKCT7Y6EKK^VrGsi6v1L|!zID-0NX3Ip^P10)D)ZsTI>B+Vw# zk-jI!!rblI!eYkb PGB~S?9Zv1T)1mwW)}~~L delta 646 zcmYjOODKd<6h8NVnemnx{xKFF3mVU1iY#R35k*-{*-*+%qG(vKphQ{F=pk~@GRvTmX(wJvQQSr4u&<-&^>%7EKNI#>E~q&2ZrZNfpd1EZ=o z%n^cU5PM;}A6$+$K4WmVLZZon;IU0|U{nBKl$z5SGkVApO#eD7m2?dWQC zEiwJw=w4aExG=3s%^}1!`t?F_$}0})Q4AR-_7WY$X5uFCLpQO6?7U%GXU2hoLFWV3 zrnk)TpaL|yGheBMm>&*j0XQKb-$8%^kBaTDC;!mr1}OttWzKzUlwL}Qp8t3OcQT&q zO%;Wm02&1U{VF7+zpa}BT*-zG7?uSi9!^MuajESBYDxhC@3H`;%LWPrEq}&HSs(Xi z@CPt>cE+FP)Kty0q-uT(Mz(F}>)&c(Vg|QrW5Q>3)_GNJQFsQdP{WN7A@m34$ax;9 PbNbTl44?HDsL+1_OhIP` diff --git a/packages/in_app_purchase/tizen/src/billing_manager.cc b/packages/in_app_purchase/tizen/src/billing_manager.cc index e459450a0..5c574ebcd 100644 --- a/packages/in_app_purchase/tizen/src/billing_manager.cc +++ b/packages/in_app_purchase/tizen/src/billing_manager.cc @@ -49,7 +49,7 @@ std::optional BillingManager::GetCustomId() { std::optional BillingManager::GetCountryCode() { std::optional country_code; - char *value = ftpw_in_app_purchase_get_county_code(); + char *value = ftpw_in_app_purchase_get_country_code(); if (value) { country_code = value; free(value);