2012-07-14 15 views
7

Merhaba ben Inapp-Purchase geri işlevselliğini uygulamak gerekir iken bu "Restore" butonuna aradığını yöntempaymentQueue: (SKPaymentQueue *) kuyruk updatedTransactions: restoreCompletedTransactions

yapılan için (NSArray *) işlemleri, çağrılmaz
-(void)restorePurchasedProductsWithProductId:(NSString*)prodID 
{ 
    _productIdsArray = [[NSMutableArray alloc] init]; 
    productID = [prodID retain]; 
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
} 

Apple id şifresini girmek için bana bir açılır pencere açar. Ve bunu yaptıktan sonra hiçbir şey olmuyor.

Ben

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 

Yani ben bu

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    NSLog(@"paymentQueue"); 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
     switch (transaction.transactionState) 
     { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       [self failedTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateRestored: 
       NSLog(@"restored"); 
       [self restoreTransaction:transaction]; 
       break; 
      default: 
       break; 

     } 
    } 
} 

gibi yaptım çağıran olduğunu okumuştum Ama sorun yukarıdaki yöntem ne bu

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 

ne de

çağıran değil mi Ben de gerekli protokolleri, bu temsilci yöntemleri geri yükleme işlemi için çağrıda değil neden

bazı vücut bana yardımcı olabilir dahil ettik. Test hesabıyla deniyorum.

cevap

11

paymentQueueRestoreCompletedTransactionsFinished: ve paymentQueue: restoreCompletedTransactionsFailedWithError:'u uygulayan sınıfın, ödeme sıranız için bir gözlemci olarak kaydedildiğinden emin olmanız gerekir.

Bir UIViewController Bu kodu yazdıysanız, senin viewDidLoad bu eklemeyi deneyin:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

ve viewDidDisappear yılında:

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; 
1
Ben de benzer bir sorunla karşı karşıyayım

;

[[SKPaymentQueue defaultQueue] finishTransaction:transaction] 

yöntem hemen uygulanmadı:

araştırma & modifikasyon sonra fark etti.

Normalde, transaction.transactionReceipt öğesini kontrol edip, sunucuma ve İşlemi bitirmek için geri arama gönderdiğim her şeyden sonra gönderirim. Son olarak, aniden bitirme işlemini aramama sorununu anladım. Kodumu değiştirdiğimde uygulamam çalışır.

İlgi çekici kısım, sanal alan ortamında test ettiğimde, her şey iyi çalışıyordu. Ancak, AppStore uygulamasında iyi çalışmadı. Bu değişikliği yaptığımda problemim çözüldü.