开发手册 欢迎您!
软件开发者资料库

iOS - 应用内购买

iOS应用程序内购买 - 在iOS上学习iPhone和iPad应用程序开发,从简单和简单的步骤开始,从基本到高级概念,包括入门,环境设置,Objective-C,第一个iPhone应用程序,操作和插座,代表,UI元素,加速计,通用应用程序,相机管理,位置处理,SQLite数据库,发送电子邮件,音频和视频,文件处理,访问地图,应用程序内购买,iAd集成,GameKit,故事板,自动布局,Twitter和Facebook,内存管理,应用程序调试。

应用程序内购买用于购买与应用程序相关的其他内容或升级功能.

涉及的步骤

步骤1 : 在iTunes连接中,确保您拥有唯一的应用ID 以及我们使用捆绑包ID 创建应用程序更新以及使用相应的配置文件在Xcode中进行代码签名.

第2步 : 创建新应用程序并更新应用程序信息.您可以在Apple的添加新应用文档中了解更多相关信息.

第3步 : 在应用程序页面的管理应用程序内购买中添加用于应用程序内购买的新产品.

步骤4 : 确保为应用程序设置银行详细信息.这需要设置应用内购买才能工作.此外,使用应用的iTunes连接页面中的管理用户选项创建测试用户帐户.

步骤5 : 接下来的步骤与处理代码和为我们的应用程序内购买创建UI有关.

第6步 : 创建单一视图应用程序并输入包标识符是iTunes连接中指定的标识符.

步骤7 : 更新 ViewController.xib ,如下所示 :

iOS Tutorial

第8步 : 为三个标签创建 IBOutlets ,并将按钮分别命名为productTitleLabel,productDescriptionLabel,productPriceLabel和purchaseButton.

步骤9 : 选择您的项目文件,然后选择目标,然后添加 StoreKit.framework .

步骤10 : 更新 ViewController.h 如下 :

#import #import @interface ViewController : UIViewController {   SKProductsRequest *productsRequest;   NSArray *validProducts;   UIActivityIndicatorView *activityIndicatorView;   IBOutlet UILabel *productTitleLabel;   IBOutlet UILabel *productDescriptionLabel;   IBOutlet UILabel *productPriceLabel;   IBOutlet UIButton *purchaseButton;}- (void)fetchAvailableProducts;- (BOOL)canMakePurchases;- (void)purchaseMyProduct:(SKProduct*)product;- (IBAction)purchase:(id)sender;@end

步骤11 : 更新 ViewController.m 如下 :

#import "ViewController.h"#define kTutorialPointProductID @"com.tutorialPoints.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:kTutorialPointProductID,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:kTutorialPointProductID]) {               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:kTutorialPointProductID]) {         [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

注意

你必须将kTutorialPointProductID更新为productID你已为您的应用内购买创建.您可以通过在fetchAvailableProducts中更新productIdentifiers的NSSet来添加多个产品.类似地,处理您添加的产品ID的购买相关操作.

输出

当我们运行应用程序时,我们将获得以下输出和减号;

iOS Tutorial

确保您已退出帐户设置屏幕.单击"启动购买"时,选择"使用现有Apple ID".输入您的有效测试帐户用户名和密码.您将在几秒钟内看到以下警告.

iOS Tutorial

成功购买产品后,您将收到以下提醒.您可以在我们显示此警报的位置查看更新应用程序功能的相关代码.

iOS Tutorial