2012-05-14 8 views
6

मुझे पुनर्स्थापित करने में काफी परेशानी हो रही है Iphone एप्लिकेशन विकसित करते समय पूर्ण लेनदेन। सैंडबॉक्स पर्यावरण में काम करते समय नीचे सूचीबद्ध सभी मुद्दे होते हैं। ऐप अभी तक बेच नहीं रहा है। यह सिम्युलेटर 5.0 और 5.1 में चल रहे एक्सकोड 4.3.2 के साथ विकसित किया जा रहा है। मुझे जो समस्याएं मिलती हैं वे हैं:पुनर्स्थापित पूर्णकालिक सैंडबॉक्स पर्यावरण में अपूर्ण जानकारी लौटाता है

  1. हर बार जब एप्लिकेशन शुरू होता है और जोड़ने के लिए कॉल ट्रान्सएक्शन ऑब्सर्वर रखा जाता है, अपडेट किया जाता है लेनदेन को लेनदेन के साथ बुलाया जाता है। प्रत्येक कॉलबैक पर मेरा कोड समाप्त होता है ट्रांज़ेक्शन: खरीद को पूरा करने के लिए, और फिर भी जब भी मैं एप्लिकेशन शुरू करता हूं तब भी यह समस्या होती रहती है। बिल्कुल उसी खरीद के लिए एक पुष्टिकरण आता है।
  2. [[SKPaymentQueue defaultQueue] बहाल करने के लिए पुनर्निर्मित ट्रांस्पेक्शन] खाते से खरीदे गए सभी गैर-उपभोग योग्य वस्तुओं की सूची नहीं देगा। मेरे पास गैर उपभोग योग्य वस्तुओं की 2 खरीदारियां हैं और हर बार केवल 1 लौटा दी जाती है। यदि मैं सूची में अनुपलब्ध आइटम को खरीदने का प्रयास करता हूं, तो मुझे एक संदेश मिलेगा जो इंगित करता है कि आइटम पहले ही खरीदा जा चुका है। सूची में गायब वस्तु वह नहीं है जिसके लिए मुझे समस्या 1 मिलती है (ऊपर सूचीबद्ध)।

इस बिंदु पर मैं पूरी तरह से अटक गया हूं। मेरा एप्लिकेशन गैर-उपभोग्य सामग्रियों पर जानकारी लौटने के लिए ऐपस्टोर पर निर्भर करता है, क्योंकि हम इस डेटा को अपने सर्वरों में सहेज नहीं रहे हैं। लेकिन हमें यह सुनिश्चित करने की ज़रूरत है कि ऐपस्टोरकिट सभी खरीदी गई वस्तुओं के साथ सूची लौटाए। कुछ नहीं

- (void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    NSLog(@"updatedTransactions started. -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ "); 
    NSLog(@"Number of transactions received: %d.", [transactions count]); 
    int count = 0; 
    for (SKPaymentTransaction *trans in transactions) 
{ 
    NSLog(@"Data for transaction %d: ", ++count); 
    NSString *transId = [trans transactionIdentifier]; 
    switch ([trans transactionState]) 
    { 
     case SKPaymentTransactionStatePurchasing: 
      NSLog(@"Purchasing transaction: %@", transId); 
      if (transId == nil) 
      { 
       NSLog(@" Original transaction Id: %@", [[trans originalTransaction] transactionIdentifier]); 
      } 

      NSLog(@"  No action taken in update"); 
      break; 
     case SKPaymentTransactionStateFailed: 
      NSLog(@"Purchase transaction failed for transaction %@", transId); 
      NSLog(@"  Error %d (%@)", [[trans error] code], [[trans error] localizedDescription]); 
      NSLog(@"  Action Taken: finish transaction."); 
      [queue finishTransaction: trans]; 
      break; 
     case SKPaymentTransactionStatePurchased: 
      NSLog(@"Purchased transaction %@", transId); 
      NSLog(@"  Purchased qty %d of product %@", [[trans payment] quantity], [[trans payment] productIdentifier]); 
      NSLog(@"  Action: called [queue finishTransaction:] to complete purchase"); 
      [queue finishTransaction: trans]; 
      break; 
     case SKPaymentTransactionStateRestored: 
     { 
      SKPayment *paym = [trans payment]; 
      SKPaymentTransaction *origTrans = [trans originalTransaction]; 
      SKPayment *origPayment = [[trans originalTransaction] payment]; 
      NSLog(@"Transaction restored: %@ with original transaction %@", transId, [[trans originalTransaction] transactionIdentifier]); 
      NSLog(@"  TRANSACTION DATA:"); 
      NSLog(@"   purchased %d of product %@ on %@.", 
        [paym quantity], 
        [paym productIdentifier], 
        [[trans transactionDate] description]); 

      NSLog(@"  ORIGINAL TRANSACTION DATA:"); 
      NSLog(@"   purchased %d of product %@ on %@.", 
        [origPayment quantity], 
        [origPayment productIdentifier], 
        [[origTrans transactionDate] description]); 

      NSLog(@"  No action taken."); 
      break; 
     } 

     default: 
      NSLog(@"Unexpected transaction state: %d", [trans transactionState]); 
      NSLog(@"  No action taken."); 
      break; 
    } 
} 

NSLog(@""); 
NSLog(@"updatedTransactions ended. -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ "); 
} 

- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 
{ 
NSLog(@"Restore completed transactions finished."); 
NSLog(@"  Number of transactions in queue: %d", [[queue transactions] count]); 
for (SKPaymentTransaction *trans in [queue transactions]) 
{ 
    NSLog(@"   transaction id %@ for product %@.", [trans transactionIdentifier], [[trans payment] productIdentifier]); 
    NSLog(@"   original transaction id: %@ for product %@.", [[trans originalTransaction] transactionIdentifier], 
      [[[trans originalTransaction] payment]productIdentifier]); 
    } 
NSLog(@""); 
} 

// Method to restore transactions when user clicks button in application 
- (void) onRestoreCompletedTransactions:(id)sender 
{ 
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
} 
+0

क्या आपने डिवाइस पर एक ही परिदृश्य का परीक्षण किया है? – 8Ours

+0

हां। यह समस्या डिवाइस और सिम्युलेटर दोनों पर होती है। – DDRider62

उत्तर

0

आप restoreCompletedTransactions कॉल करने के लिए हर आवेदन शुरू कर रहा है कोशिश कर रहे हैं:

यहाँ प्रासंगिक कोड मैं restoreCompletedTransactions परीक्षण करने के लिए उपयोग कर रहा हूँ है? आप सभी लेनदेन की एक सूची चाहते हैं तो आप एक SKProductsRequest

SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productsSet]; 
    productsRequest.delegate = self; 
    [productsRequest start]; 

कर आप completedTransactions प्राप्त करना चाहते हैं और सब कुछ वापस नहीं मिल रहे हैं, लॉग दिखाने करें होगा।

0

एक SKProductsRequest आपको SKProduct उदाहरणों की एक सूची वापस ले जाएगा। एसके प्रोडक्ट क्लास ने मेरे पढ़ने के लिए जानकारी खरीदी नहीं है। मुझे लगता है कि आप वास्तव में पुनर्स्थापित प्रक्रियाओं का उपयोग करना चाहते हैं और SKPaymentTransaction उदाहरणों की एक सूची वापस प्राप्त करना चाहते हैं। उस ने कहा, मुझे एक सैंडबॉक्स खाते के साथ एक ही समस्या है। मैं लेनदेन की अपूर्ण सूची (48 में से 23) वापस प्राप्त करता हूं। लेकिन अगर मैं खरीदा गया एक गैर उपभोग्य खरीदने का चयन करता हूं लेकिन पुनर्स्थापित नहीं किया जाता है, तो स्टोर जो कि यह पहले से खरीदा गया आइटम है और उस आइटम के लिए पुनर्स्थापना वापस भेज देगा।

कोई भाग्य इसे हल कर रहा है?

+0

यह एक लंबा समय रहा है, लेकिन मेरा मानना ​​है कि मैं इस मुद्दे को हल नहीं कर सका। यह सैंडबॉक्स पर्यावरण के साथ एक समस्या (या उस समय थी)। – DDRider62