| #import "ViewController.h"#define kTutorialYiibaiProductID
 @"com.tutorialYiibais.testApp.testProduct"
 @interface ViewController () @end @implementation ViewController - (void)viewDidLoad{
 [super viewDidLoad];
 // Adding activity indicator
 activityIndicatorView = [[UIActivityIndicatorView alloc]
 initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
 activityIndicatorView.center = self.view.center;
 [activityIndicatorView hidesWhenStopped];
 [self.view addSubview:activityIndicatorView];
 [activityIndicatorView startAnimating];
 //Hide purchase button initially
 purchaseButton.hidden = YES;
 [self fetchAvailableProducts];
 }
 - (void)didReceiveMemoryWarning{
 [super didReceiveMemoryWarning];
 // Dispose of any resources that can be recreated.
 }
 -(void)fetchAvailableProducts{NSSet *productIdentifiers = [NSSet
 setWithObjects:kTutorialYiibaiProductID,nil];
 productsRequest = [[SKProductsRequest alloc]
 initWithProductIdentifiers:productIdentifiers];
 productsRequest.delegate = self;
 [productsRequest start];
 }
 - (BOOL)canMakePurchases{
 return [SKPaymentQueue canMakePayments];
 }
 - (void)purchaseMyProduct:(SKProduct*)product{
 if ([self canMakePurchases]) {
 SKPayment *payment = [SKPayment paymentWithProduct:product];
 [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
 [[SKPaymentQueue defaultQueue] addPayment:payment];
 }
 else{
 UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
 @"Purchases are disabled in your device" message:nil delegate:
 self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
 [alertView show];
 }
 }
 -(IBAction)purchase:(id)sender{
 [self purchaseMyProduct:[validProducts objectAtIndex:0]];
 purchaseButton.enabled = NO;
 }
 #pragma mark StoreKit Delegate -(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
 for (SKPaymentTransaction *transaction in transactions) {
 switch (transaction.transactionState) {
 case SKPaymentTransactionStatePurchasing:
 NSLog(@"Purchasing");
 break;
 case SKPaymentTransactionStatePurchased:
 if ([transaction.payment.productIdentifier
 isEqualToString:kTutorialYiibaiProductID]) {
 NSLog(@"Purchased ");
 UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
 @"Purchase is completed succesfully" message:nil delegate:
 self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
 [alertView show];
 }
 [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
 break;
 case SKPaymentTransactionStateRestored:
 NSLog(@"Restored ");
 [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
 break;
 case SKPaymentTransactionStateFailed:
 NSLog(@"Purchase failed ");
 break;
 default:
 break;
 }
 }
 }
 -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
 {
 SKProduct *validProduct = nil;
 int count = [response.products count];
 if (count>0) {
 validProducts = response.products;
 validProduct = [response.products objectAtIndex:0];
 if ([validProduct.productIdentifier
 isEqualToString:kTutorialYiibaiProductID]) {
 [productTitleLabel setText:[NSString stringWithFormat:
 @"Product Title: %@",validProduct.localizedTitle]];
 [productDescriptionLabel setText:[NSString stringWithFormat:
 @"Product Desc: %@",validProduct.localizedDescription]];
 [productPriceLabel setText:[NSString stringWithFormat:
 @"Product Price: %@",validProduct.price]];
 }
 } else {
 UIAlertView *tmp = [[UIAlertView alloc]
 initWithTitle:@"Not Available"
 message:@"No products to purchase"
 delegate:self
 cancelButtonTitle:nil
 otherButtonTitles:@"Ok", nil];
 [tmp show];
 }
 [activityIndicatorView stopAnimating];
 purchaseButton.hidden = NO;
 }
 @end |