如何在应用购买中实现多个产品标识符

时间:2013-02-28 06:15:13

标签: iphone objective-c in-app-purchase

在使用非耗材产品(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];

}

}

你可以帮我用第二个按钮做同样的事情,打开第二个视图。提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

如果有帮助请告诉我。 (您应该阅读一些关于此的苹果文档,它的解释非常清楚)