2013-07-06 66 views
0

我已經實現了我的應用程序AppDelegate蘋果推薦的方式SKPaymentTransactionObserver顯示對話在應用程序內購買完整

- (void) completeTransaction: (SKPaymentTransaction *)transaction 
{ 
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:transaction.payment.productIdentifier]; 
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 

- (void) restoreTransaction: (SKPaymentTransaction *)transaction 
{ 
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:transaction.payment.productIdentifier]; 
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 

- (void) failedTransaction: (SKPaymentTransaction *)transaction 
{ 
    if (transaction.error.code != SKErrorPaymentCancelled) 
    { 
     // Optionally, display an error here. 
    } 

    [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
    self.products = response.products; 
} 

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

我想我的應用程序發送的對話信息給用戶時,以下發生:購買成功,購買失敗,恢復成功,恢復失敗。我在包裝我的頭腦時遇到了一些麻煩,我可以如何在設計時設置這一點。我有幾個問題:

1)警報需要在事務初始化的視圖控制器中發佈。我怎樣才能讓AppDelegate與這個視圖控制器進行通信,讓它知道事件發生的時間?我是否設置了AppDelegate的代表?這對我來說似乎很有趣...有更好的方法嗎?

2)我在哪裏發送消息?它應該在finishTransaction(我是否需要重寫?)或其他地方?

回答

1

傳遞通知將是最好的方式。調用付款程序的視圖控制器應該註冊通知。

完成交易後,應用程序委託人將發佈控制器將收到的通知,並顯示相應的消息。