2011-11-07 33 views
0

我剛添加了一個應用程序內購買到我的應用程序。 當用戶點擊「購買」按鈕並且交易結束時,「購買」按鈕被替換爲另一個按鈕以訪問新功能。 但每次我回到那個頁面,或者我關閉並再次打開應用程序時,再次出現「購買」按鈕。 如果用戶購買了新內容,我該怎麼做才能始終保持新按鈕? 這裏是我的代碼:In App Purchase:SKPaymentTransactionStatePurchased

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

    for (SKPaymentTransaction *transaction in transactions) { 

      switch (transaction.transactionState) { 

       case SKPaymentTransactionStatePurchasing: 

        break; 

       case SKPaymentTransactionStatePurchased: 

       [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

          UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

           [button addTarget:self 

           action:@selector(myaction) 

           forControlEvents:UIControlEventTouchUpInside]; 

        [button setTitle:@"mytitle" forState:UIControlStateNormal]; 



        button.frame = CGRectMake(156.0, 248.0, 129.0, 36.0); 

        [self.view addSubview:button]; 

        break; 

       case SKPaymentTransactionStateRestored: 

        [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
         break; 

       case SKPaymentTransactionStateFailed: 

        if (transaction.error.code != SKErrorPaymentCancelled) { 

         NSLog(@"Errorr"); 

        } 

        [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 


      } 

    } 

} 

回答

1

您應該在某處保存有關用戶購買內容的信息。

有很多方法可以做到這一點。例如,您可以使用NSUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
int version = [defaults integerForKey:@"db_version"];     // <- read int value from defaults 
[defaults setValue:[NSNumber numberWithInt:2] forKey:@"db_version"]; // <- set int value 
[defaults synchronize]; // <- save changes 
1

您需要處理這個自己,StoreKit不會幫你這一點。

例如,一旦您的購買已完成,請向Userdefaults保存一些值以記住購買已完成。在您的ViewControllers viewDidLoad方法中,只需檢查是否存在該值,然後讓它顯示/隱藏適當的按鈕。

1

您必須將此狀態保存到用戶偏好設置。只需添加類似的東西SKPaymentTransactionStatePurchased情況:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    [prefs setBool:YES forKey:transaction.originalTransaction.payment.productIdentifier]; 
    [prefs synchronize]; 

並重新推出應用程式後,你必須檢查此設置,併產生正確的按鈕。