// // IAPUserData.cpp // TileManor // // Created by 徐炼新 on 2024/9/30. // #include "IAPUserData.hpp" #include "IAPConf.hpp" NS_IAPSHOP_BEGIN IAPUserData* IAPUserData::_instance = nullptr; IAPUserData* IAPUserData::getInstance(){ if(!_instance){ _instance = new IAPUserData(); } return _instance; } IAPUserData::IAPUserData(){ init(); } IAPUserData::~IAPUserData() { saveVectorString(_buyInfos, "buyInfos"); } void IAPUserData::init(){ // 提取用户本地购买信息 _buyInfos = loadVectorString("buyInfos"); } void IAPUserData::addBuyInfo(std::string commodityID){ _buyInfos.push_back(commodityID); saveVectorString(_buyInfos, "buyInfos"); } void IAPUserData::addBuyInfo(std::vector commodityIDs){ for(const auto& commodityID : commodityIDs){ _buyInfos.push_back(commodityID); } saveVectorString(_buyInfos, "buyInfos"); } std::vector IAPUserData::getBuyInfos(){ return _buyInfos; } void IAPUserData::clearBuyInfo(){ _buyInfos.clear(); saveVectorString(_buyInfos, "buyInfos"); } // 序列化 vector 为单个字符串 std::string IAPUserData::serialize(const std::vector& vec) { std::ostringstream oss; for (size_t i = 0; i < vec.size(); ++i) { if (i != 0) oss << ","; // 使用逗号作为分隔符 oss << vec[i]; } return oss.str(); } // 反序列化单个字符串为 vector std::vector IAPUserData::deserialize(const std::string& str) { std::vector vec; std::istringstream iss(str); std::string item; while (std::getline(iss, item, ',')) { // 以逗号为分隔符 vec.push_back(item); } return vec; } // 保存 vector void IAPUserData::saveVectorString(const std::vector& vec, const std::string& key) { auto userDefault = cocos2d::UserDefault::getInstance(); std::string serializedData = serialize(vec); userDefault->setStringForKey(key.c_str(), serializedData); userDefault->flush(); } // 读取 vector std::vector IAPUserData::loadVectorString(const std::string& key) { auto userDefault = cocos2d::UserDefault::getInstance(); std::string serializedData = userDefault->getStringForKey(key.c_str(), ""); return deserialize(serializedData); } NS_IAPSHOP_END