in-App Purchases 存储以前的数据

在应用中实现In-App Purchase,遇到两个问题

这是我的实现代码:

- (IBAction)buyProduct1:(id)sender {
    SKPayment *payment = [SKPayment paymentWithProduct:product1];
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}

- (IBAction)restorePurchases:(id)sender {
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}

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

    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchasing:

                break;
            case SKPaymentTransactionStatePurchased:

                //Can I be 100% sure that this method is only called when the product is bought?
                [self product1Bought:transaction];

                break;
            case SKPaymentTransactionStateRestored:

                //What code should I have here to safely restore product1 if the product is bought?

                break;
            case SKPaymentTransactionStateFailed:

                break;
            default:
                break;
        }
    }
}

- (void)product1Bought:(SKPaymentTransaction *)transaction {
    NSString *string = @"Product1";
    [[NSUserDefaults standardUserDefaults] setObject:string forKey:@"Product1"];
    NSLog(@"Product1 is bought");
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

1.我想保证productBought 方法是交易成功后唯一被调用的方法。
2.如何检测product1先交易,然后再调用product1Bought 方法?

你好 in app purchase老是取不到 商品信息咋办呢