0

使用非消耗性产品(first_view 和 second_view)完成付款后,我有两个按钮打开两个新视图,我的代码在一个产品上运行良好,但我不知道如何将多个产品用于多个产品这是我的第一次体验使用应用内购买编码。我想我需要更新下面我正在使用此代码的 productsRequest 方法:

implementation ViewController

@synthesize firstBTN, secondBTN,;

#define kStoredData @"first_view"

-(BOOL)IAPItemPurchased {



NSError *error = nil;
NSString *password = [SFHFKeychainUtils getPasswordForUsername:@"username" andServiceName:kStoredData error:&error];

if ([password isEqualToString:@"password"]) return YES; else return NO;

}


-(IBAction)firstBTNPressed:(id)sender {

if ([self IAPItemPurchased]) {

    firstViewController *controller = [[firstViewController alloc] initWithNibName:@"firstView" bundle:nil];

[self presentModalViewController:controller animated:YES];



[controller release];


} else {
    // not purchased so show a view to prompt for purchase
    askToPurchase = [[UIAlertView alloc] 
                        initWithTitle:@"Feature Locked" 
                        message:@"Purchase Feature?"
                        delegate:self 
                        cancelButtonTitle:nil
                        otherButtonTitles:@"Yes", @"No", nil]; 
    askToPurchase.delegate = self;
    [askToPurchase show];
    [askToPurchase release];
}
}


-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
for (SKPaymentTransaction *transaction in transactions) {
    switch (transaction.transactionState) {
        case SKPaymentTransactionStatePurchasing:


            break;

        case SKPaymentTransactionStatePurchased:

            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

            UIAlertView *tmp = [[UIAlertView alloc] 
                                initWithTitle:@"Complete" 
                                message:@"You have unlocked Feature 2!"
                                delegate:self 
                                cancelButtonTitle:nil 
                                otherButtonTitles:@"Ok", nil]; 
            [tmp show];
            [tmp release];


            NSError *error = nil;
            [SFHFKeychainUtils storeUsername:@"username" andPassword:@"password" forServiceName:kStoredData updateExisting:YES error:&error];


            [firstBTN setBackgroundImage:nil forState:UIControlStateNormal];



            break;

        case SKPaymentTransactionStateRestored:
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

            break;

        case SKPaymentTransactionStateFailed:

            if (transaction.error.code != SKErrorPaymentCancelled) {
                NSLog(@"Error payment cancelled");
            }
            [[SKPaymentQueue defaultQueue]  finishTransaction:transaction];

            break;

        default:
            break;
    }
}
}


 -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:     (SKProductsResponse *)response
{

SKProduct *validProduct = nil;
int count = [response.products count];

if (count>0) {

validProduct = [response.products objectAtIndex:0];

    SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"first_view"];
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue] addPayment:payment];

    }


else {
    UIAlertView *tmp = [[UIAlertView alloc]
                        initWithTitle:@"Not Available"
                        message:@"No products to purchase"
                        delegate:self
                        cancelButtonTitle:nil
                        otherButtonTitles:@"Ok", nil];
    [tmp show];
    [tmp release];
}


}


-(void)requestDidFinish:(SKRequest *)request  
{  
[request release];  
}  

-(void)request:(SKRequest *)request didFailWithError:(NSError *)error  
{  
NSLog(@"Failed to connect with error: %@", [error localizedDescription]);  
}  



#pragma mark AlertView Delegate
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex: (NSInteger)buttonIndex {

if (alertView==askToPurchase) {
    if (buttonIndex==0) {

        if ([SKPaymentQueue canMakePayments]) { 

            SKProductsRequest *request = [[SKProductsRequest alloc]  initWithProductIdentifiers:[NSSet setWithObject:@"first_view"]];  

            request.delegate = self;  
            [request start];  


        } else {
            UIAlertView *tmp = [[UIAlertView alloc] 
                                initWithTitle:@"Prohibited" 
                                message:@"Parental Control is enabled, cannot make a purchase!"
                                delegate:self 
                                cancelButtonTitle:nil 
                                otherButtonTitles:@"Ok", nil]; 
            [tmp show];
            [tmp release];
        }
    }
}

}

- (void)viewDidLoad
{
[super viewDidLoad];


if ([self IAPItemPurchased]) {
    [firstBTN setBackgroundImage:nil forState:UIControlStateNormal];

} else {
    [firstBTN setBackgroundImage:[UIImage imageNamed:@"Locked.png"]  forState:UIControlStateNormal];

}

}

你能帮我用打开第二个视图的第二个按钮做同样的事情吗?提前致谢。

4

1 回答 1

0

first_view 应该是您在 iTunes 连接中的产品标识符。只需为您的其他产品传递另一个产品标识符。从产品请求类中,您可以确定购买了哪个产品标识符。

让我知道这是否有帮助。(你也许应该阅读一些关于这个的苹果文档,它解释得很清楚)

于 2013-02-28T11:39:08.323 回答