Browse Source

iOS payload

Denis Muratshin 8 years ago
parent
commit
49b0e53da9
5 changed files with 31 additions and 19 deletions
  1. 7 5
      src/billing.cpp
  2. 9 4
      src/billing.h
  3. 1 1
      src/ios/IOSBilling.h
  4. 11 6
      src/ios/IOSBilling.mm
  5. 3 3
      src/sim/BillingSimulator.cpp

+ 7 - 5
src/billing.cpp

@@ -88,7 +88,7 @@ namespace oxygine
 #ifdef __ANDROID__
             jniBillingPurchase(id, payload);
 #elif IOS_STORE
-            iosBillingPurchase(id);
+            iosBillingPurchase(id, payload);
 #else
             billingSimulatorPurchase(id, payload);
 #endif
@@ -187,9 +187,9 @@ namespace oxygine
 
         namespace internal
         {
-            void purchased(int requestCode, int resultCode, const std::string& data_, const std::string& sign_)
+            void purchased(int requestCode, int resultCode, const std::string& data1, const std::string& data2, const std::string& data3)
             {
-                log::messageln("billing::internal::purchased %d %d <%s> <%s>", requestCode, resultCode, data_.c_str(), sign_.c_str());
+                log::messageln("billing::internal::purchased %d %d <%s> <%s> <%s>", requestCode, resultCode, data1.c_str(), data2.c_str(), data3.c_str());
 
                 int event = PurchasedEvent::EVENT;
                 MarketType mt = getMarketType();
@@ -210,7 +210,7 @@ namespace oxygine
                     }
                 }
 
-                PurchasedEvent ev(data_, sign_, event);
+                PurchasedEvent ev(data1, data2, data3);
                 if (_dispatcher)
                     _dispatcher->dispatchEvent(&ev);
             }
@@ -241,7 +241,7 @@ namespace oxygine
         ParsePurchasedData::ParsePurchasedData(const PurchasedEvent* event)
         {
             Json::Reader reader;
-            reader.parse(event->data, data, false);
+            reader.parse(event->data1, data, false);
 
             MarketType mt = getMarketType();
 
@@ -250,6 +250,7 @@ namespace oxygine
                 productID = data["productId"].asString();
                 purchaseToken = data["purchaseToken"].asString();
                 purchaseState = data["purchaseState"].asInt();
+                payload = data["developerPayload"].asString();
             }
 
             if (mt == amazon)
@@ -264,6 +265,7 @@ namespace oxygine
                 iosTransactionReceipt = data["transactionReceipt"].asString();
 
                 purchaseToken = data["transactionIdentifier"].asString();
+                payload = event->data3;
             }
         }
     }

+ 9 - 4
src/billing.h

@@ -15,13 +15,16 @@ namespace oxygine
             enum { EVENT_CANCELED = sysEventID('b', 'c', 'n') };
             enum { EVENT_ERROR = sysEventID('b', 'e', 'r') };
 
-            PurchasedEvent(const std::string& data_, const std::string& signature_, eventType event = EVENT) : Event(event), data(data_), signature(signature_) {}
+            PurchasedEvent(const std::string& Data1, const std::string& Data2, const std::string& Data3, eventType event = EVENT) : Event(event), data1(Data1), data2(Data2), data3(Data3) {}
 
-            std::string data;
+            std::string data1;
 
             //google "signature"
             //amazon "userId"
-            std::string signature;
+            std::string data2;
+            
+            //ios username
+            std::string data3;
         };
 
         class ParsePurchasedData
@@ -45,6 +48,8 @@ namespace oxygine
             std::string iosTransactionReceipt;
 
             int         purchaseState;
+            
+            std::string payload;
         };
 
         class DetailsEvent : public Event
@@ -145,7 +150,7 @@ namespace oxygine
             const int RC_OK = 0;
             const int RC_Canceled = 1;
 
-            void purchased(int requestCode, int resultCode, const std::string&, const std::string&);
+            void purchased(int requestCode, int resultCode, const std::string& data1, const std::string& data2, const std::string &data3);
             //void detailed(const std::string&);
             void detailed(const std::string&);
         }

+ 1 - 1
src/ios/IOSBilling.h

@@ -16,7 +16,7 @@ using namespace std;
 void iosBillingInit();
 void iosBillingFree();
 void iosBillingUpdate(const vector<string>& items);
-void iosBillingPurchase(const string& product);
+void iosBillingPurchase(const string& product, const string& payload);
 void iosBillingConsume(const string& token);
 void iosBillingGetPurchases();
 

+ 11 - 6
src/ios/IOSBilling.mm

@@ -84,9 +84,9 @@ using namespace oxygine;
                 Json::FastWriter writer;
                 
                 if (transaction.error.code == SKErrorPaymentCancelled)
-                    billing::internal::purchased(billing::internal::ActivityOK, billing::internal::RC_Canceled, writer.write(data), "");
+                    billing::internal::purchased(billing::internal::ActivityOK, billing::internal::RC_Canceled, writer.write(data), "", "");
                 else
-                    billing::internal::purchased(billing::internal::ActivityOK + 1, 0, writer.write(data), "");
+                    billing::internal::purchased(billing::internal::ActivityOK + 1, 0, writer.write(data), "", "");
             }
                 break;
                 
@@ -105,7 +105,11 @@ using namespace oxygine;
                 
                 Json::FastWriter writer;
                 
-                billing::internal::purchased(billing::internal::ActivityOK, billing::internal::RC_OK, writer.write(data), "");
+                NSString *userData = transaction.payment.applicationUsername;
+                
+                
+                billing::internal::purchased(billing::internal::ActivityOK, billing::internal::RC_OK,
+                                             writer.write(data), "", userData ? [userData UTF8String] : "");
             }
                 break;
                 
@@ -173,6 +177,7 @@ using namespace oxygine;
 }
 
 - (void)purchase:(const char *)prod
+                :(const char*)payload
 {
     SKProduct *product = [self getProduct:prod];
     if (!product)
@@ -180,7 +185,7 @@ using namespace oxygine;
     
     SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:product];
     payment.quantity = 1;
-    //payment.applicationUsername =
+    payment.applicationUsername = [NSString stringWithUTF8String:payload];
     
     [[SKPaymentQueue defaultQueue] addPayment:payment];
 }
@@ -228,9 +233,9 @@ void iosBillingUpdate(const vector<string> &items)
     [_billing updateProducts:array];
 }
 
-void iosBillingPurchase(const string &product)
+void iosBillingPurchase(const string &product, const string& payload)
 {
-    [_billing purchase: product.c_str()];
+    [_billing purchase: product.c_str() : payload.c_str()];
 }
 
 void iosBillingConsume(const string &token)

+ 3 - 3
src/sim/BillingSimulator.cpp

@@ -243,13 +243,13 @@ void billingSimulatorPurchase(const string& id, const string& payload)
                 _purchases.append(item);
                 save();
 
-                billing::internal::purchased(billing::internal::ActivityOK, billing::internal::RC_OK, serData(data), item["sign"].asString());
+                billing::internal::purchased(billing::internal::ActivityOK, billing::internal::RC_OK, serData(data), item["sign"].asString(), "");
             });
         });
 
         d->_btnCancel->addEventListener(TouchEvent::CLICK, [ = ](Event*)
         {
-            billing::internal::purchased(billing::internal::ActivityOK, billing::internal::RC_Canceled, "", "");
+            billing::internal::purchased(billing::internal::ActivityOK, billing::internal::RC_Canceled, "", "", "");
             d->detach();
         });
     }
@@ -279,7 +279,7 @@ void billingSimulatorGetPurchases()
         for (Json::ArrayIndex i = 0; i < copy.size(); ++i)
         {
             const Json::Value& item = copy[i];
-            billing::internal::purchased(billing::internal::ActivityOK, billing::internal::RC_OK, serData(item["data"]), item["sign"].asString());
+            billing::internal::purchased(billing::internal::ActivityOK, billing::internal::RC_OK, serData(item["data"]), item["sign"].asString(), "");
         }
     });
 }