2014-03-12 225 views
-2

我的現有應用更新已於今天在應用商店發佈,並通過應用內購買來移除廣告。我不得不放置一個恢復按鈕,因爲它是非消耗性的應用程序內購買。我注意到我可以在沒有購買的情況下恢復應用內購買。即使在購買之前即可恢復應用內購買

該應用程序約4小時前出售。這對新應用程序是否正常?應用商店是否需要一些時間來連接應用內購買(可能是一個愚蠢的問題)?或者我在代碼中做錯了什麼?

如果你知道發生了什麼,請回復。

編輯: 這裏是我用

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


- (void) restoreTransaction: (SKPaymentTransaction *)transaction 
{ 
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
    [[SKPaymentQueue defaultQueue]addTransactionObserver:self];  
} 


-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 
{ 


    if (SKPaymentTransactionStatePurchased) 
    { 
     //save purchase 
     NSUserDefaults *savePurchase = [NSUserDefaults standardUserDefaults]; 
     [savePurchase setBool:TRUE forKey:k_Save]; 
     [savePurchase synchronize]; 

     _adBanner.hidden = YES; 

     // alert after successful restore. 
     UIAlertView *restoreTransactionAlert = [[UIAlertView alloc] initWithTitle:@"Congratulations!" 
             message:@"Your purchase is restored." 
             delegate:self 
             cancelButtonTitle:@"OK" 
             otherButtonTitles:nil]; 


     [restoreTransactionAlert show]; 

    } 

    else 
    { 
     // alert after unsuccessful restore. 
     UIAlertView *restoreTransactionAlert = [[UIAlertView alloc] initWithTitle:@"Restore failed" 
               message:@"Restore failed. please try again" 
               delegate:self 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 

     [restoreTransactionAlert show]; 

    } 

    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

} 


- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error 
{ 

} 
+0

如果這是您第一次實施此特定應用程序購買,那麼這很可能是您的代碼中的問題。請在您的應用程序 – ZeMoon

+0

中使用您在應用程序購買中用於恢復的代碼編輯答案,謝謝您的回覆akashg。我用代碼編輯了我的問題。能否請你幫忙。 – Isti

+1

當您測試IAP在工作時是否使用了其他帳戶?難道你可以恢復它,只是因爲你已經購買了它作爲測試的一部分?就像您發佈的代碼一樣,在恢復的Switch語句中,您似乎沒有做任何事情? – Flexicoder

回答

1

你恢復交易執行是不正確的代碼。您在-restoreTransactionsCompleted方法條件,即

if (SKPaymentTransactionStatePurchased) 

將始終返回true,因爲SKPaymentTransactionStatePurchased是價值枚舉1.

查找的文檔上恢復交易here