123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- //
- // 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<std::string> commodityIDs){
- for(const auto& commodityID : commodityIDs){
- _buyInfos.push_back(commodityID);
- }
-
- saveVectorString(_buyInfos, "buyInfos");
- }
- std::vector<std::string> IAPUserData::getBuyInfos(){
- return _buyInfos;
- }
- void IAPUserData::clearBuyInfo(){
- _buyInfos.clear();
-
- saveVectorString(_buyInfos, "buyInfos");
- }
- // 序列化 vector<string> 为单个字符串
- std::string IAPUserData::serialize(const std::vector<std::string>& vec) {
- std::ostringstream oss;
- for (size_t i = 0; i < vec.size(); ++i) {
- if (i != 0) oss << ","; // 使用逗号作为分隔符
- oss << vec[i];
- }
- return oss.str();
- }
- // 反序列化单个字符串为 vector<string>
- std::vector<std::string> IAPUserData::deserialize(const std::string& str) {
- std::vector<std::string> vec;
- std::istringstream iss(str);
- std::string item;
- while (std::getline(iss, item, ',')) { // 以逗号为分隔符
- vec.push_back(item);
- }
- return vec;
- }
- // 保存 vector<string>
- void IAPUserData::saveVectorString(const std::vector<std::string>& vec, const std::string& key) {
- auto userDefault = cocos2d::UserDefault::getInstance();
- std::string serializedData = serialize(vec);
- userDefault->setStringForKey(key.c_str(), serializedData);
- userDefault->flush();
- }
- // 读取 vector<string>
- std::vector<std::string> 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
|