在应用购买实施

时间:2012-08-30 09:40:02

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

在我的应用程序中,我必须在以下场景中的app purchse中实现: -    应用程序对所有用户免费,即每个人都可以免费下载。    我为此实现了耗材类型。    在申请中有一个选项,以1.99美元购买10个硬币。用户购买它完成交易成功    但当再次用户点击购买10个硬币时,它提示“你已经下载了这个应用程序”。    我想在该应用程序购买中实现该用户可以购买10个硬币的多种类型?   这将是什么类型和场景。

请建议?

1 个答案:

答案 0 :(得分:0)

  - (void)requestProductData {
  //  NSLog(@"%@",strCheck);
if ([strCheck isEqualToString:@"inApp"]) {
    myString = strCheck;
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:            [NSSet setWithObject:@"All_labelling"]];
    request.delegate = self;

    [request start];
}

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

  SKPayment *payment = [SKPayment paymentWithProduct:[myProduct objectAtIndex:0]];
  [[SKPaymentQueue defaultQueue] addPayment:payment];

      [request autorelease];
   }


    - (void)inAppPurchase {

      reachability = [Reachability reachabilityForInternetConnection];

      NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];



       if(remoteHostStatus == NotReachable) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"LeaderFollow!" message:@"Network is not found" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
         [alert show];
         [progInd stopAnimating];
          [progInd setHidden:YES];
       }

else if ([SKPaymentQueue canMakePayments]) {
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
    [self requestProductData];


}
else {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please enable the ability to make purchases." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [alert release];
  }
    }


   - (void)finishMyTransaction:(SKPaymentTransaction *)transaction {
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
self.view.userInteractionEnabled=YES;
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
    [progInd stopAnimating];
    [progInd setHidden:YES];

   }

   #pragma mark Payment Delegate
   #pragma mark -

   - (void)recordTransaction:(SKPaymentTransaction *)transaction {
   }


    - (void)provideContent:(NSString *)productIdentifier {


   if([productIdentifier isEqualToString:@"All_labelling"]){
    strCheck=@"inApp";
    myString=strCheck;

   }
   if ([strCheck isEqualToString:@"inApp"]){
    [prefs setBool:YES forKey:@"inApp"];
    if(!isTapped){

        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Congratulations!" message:@"You Have Successfully Purchased All Objects Pack" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }
    [self viewWillAppear:YES];
   }



//}


  [progInd stopAnimating];
  [progInd setHidden:YES];


  }

  - (void)completeTransaction:(SKPaymentTransaction *)transaction {

[self recordTransaction:transaction];
     [self provideContent:transaction.payment.productIdentifier];

    [self finishMyTransaction:transaction];
  }

  -(IBAction)btnRestoreTapped{
    [progInd setHidden:NO];
    [progInd startAnimating];
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
    [[UIApplication sharedApplication]beginIgnoringInteractionEvents];



   }



    - (void)restoreTransaction: (SKPaymentTransaction *)transaction {

[self recordTransaction:transaction];
     [self provideContent:transaction.originalTransaction.payment.productIdentifier];

     [self finishMyTransaction:transaction];

    }


     - (void)failedTransaction: (SKPaymentTransaction *)transaction {

 if (transaction.error.code != SKErrorPaymentCancelled) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:[transaction.error localizedDescription]
                                                    delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];
         }

    [self finishMyTransaction:transaction];
      }


       - (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];

            break;

        default:
            break;
       }

     }

     }
      - (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue{
       [progInd stopAnimating];
        [progInd setHidden:YES];
         [[UIApplication sharedApplication]endIgnoringInteractionEvents];
         if([prefs boolForKey:@"inApp"]){
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"LeaderFollow!" message:@"You Have Successfully Restored   Pack(s)" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
        [prefs setObject:@"YES" forKey:@"Restore"];
        }
        else{
           UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"LeaderFollow!" message:@"No purchases to restore" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
           [alert show];
          [alert release];
     }
       isTapped=NO;
      }

     - (void)paymentQueue:(SKPaymentQueue*)queue restoreCompletedTransactionsFailedWithError:(NSError*)error
     {
      [[UIApplication sharedApplication]endIgnoringInteractionEvents];
      [progInd stopAnimating];
      isTapped=NO;
      self.view.userInteractionEnabled=YES;
       [progInd setHidden:YES];
   }