IAPUserData.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //
  2. // IAPUserData.cpp
  3. // TileManor
  4. //
  5. // Created by 徐炼新 on 2024/9/30.
  6. //
  7. #include "IAPUserData.hpp"
  8. #include "IAPConf.hpp"
  9. NS_IAPSHOP_BEGIN
  10. IAPUserData* IAPUserData::_instance = nullptr;
  11. IAPUserData* IAPUserData::getInstance(){
  12. if(!_instance){
  13. _instance = new IAPUserData();
  14. }
  15. return _instance;
  16. }
  17. IAPUserData::IAPUserData(){
  18. init();
  19. }
  20. IAPUserData::~IAPUserData() {
  21. saveVectorString(_buyInfos, "buyInfos");
  22. }
  23. void IAPUserData::init(){
  24. // 提取用户本地购买信息
  25. _buyInfos = loadVectorString("buyInfos");
  26. }
  27. void IAPUserData::addBuyInfo(std::string commodityID){
  28. _buyInfos.push_back(commodityID);
  29. saveVectorString(_buyInfos, "buyInfos");
  30. }
  31. void IAPUserData::addBuyInfo(std::vector<std::string> commodityIDs){
  32. for(const auto& commodityID : commodityIDs){
  33. _buyInfos.push_back(commodityID);
  34. }
  35. saveVectorString(_buyInfos, "buyInfos");
  36. }
  37. std::vector<std::string> IAPUserData::getBuyInfos(){
  38. return _buyInfos;
  39. }
  40. void IAPUserData::clearBuyInfo(){
  41. _buyInfos.clear();
  42. saveVectorString(_buyInfos, "buyInfos");
  43. }
  44. // 序列化 vector<string> 为单个字符串
  45. std::string IAPUserData::serialize(const std::vector<std::string>& vec) {
  46. std::ostringstream oss;
  47. for (size_t i = 0; i < vec.size(); ++i) {
  48. if (i != 0) oss << ","; // 使用逗号作为分隔符
  49. oss << vec[i];
  50. }
  51. return oss.str();
  52. }
  53. // 反序列化单个字符串为 vector<string>
  54. std::vector<std::string> IAPUserData::deserialize(const std::string& str) {
  55. std::vector<std::string> vec;
  56. std::istringstream iss(str);
  57. std::string item;
  58. while (std::getline(iss, item, ',')) { // 以逗号为分隔符
  59. vec.push_back(item);
  60. }
  61. return vec;
  62. }
  63. // 保存 vector<string>
  64. void IAPUserData::saveVectorString(const std::vector<std::string>& vec, const std::string& key) {
  65. auto userDefault = cocos2d::UserDefault::getInstance();
  66. std::string serializedData = serialize(vec);
  67. userDefault->setStringForKey(key.c_str(), serializedData);
  68. userDefault->flush();
  69. }
  70. // 读取 vector<string>
  71. std::vector<std::string> IAPUserData::loadVectorString(const std::string& key) {
  72. auto userDefault = cocos2d::UserDefault::getInstance();
  73. std::string serializedData = userDefault->getStringForKey(key.c_str(), "");
  74. return deserialize(serializedData);
  75. }
  76. NS_IAPSHOP_END