iOS应用内购买 iOS访问地图 iOS iAd集成 应用程序内购买用于购买与应用程序相关的其他内容或升级功能。 涉及的步骤 步骤1 - 在iTunes连接中,确保您拥有 唯一的应用程序ID, 以及何时使用 捆绑包ID 和Xcode中的代码签名以及相应的配置文件创建应用程序更新。 第2步 - 创建新应用程序并更新应用程序信息。 您可以在Apple的 添加新应用 文档中了解更多相关信息。 第3步 - 在应用 程序页面的 管理 应用程序内购买中添加用于应用程序内购买的新产品。 第4步 - 确保为应用程序设置银行详细信息。 这需要设置为 应用内购买 工作。此外,使用应用的iTunes连接页面中的“ 管理用户” 选项创建测试用户帐户。 第5步 - 接下来的步骤与处理代码和为我们的应用程序内购买创建UI有关。 步骤6 - 创建 单个视图应用程序 并输入bundle标识符是iTunes connect中指定的标识符。 第7步 - 更新 ViewController.xib ,如下所示 步骤8 - 为三个标签创建 IBOutlets ,并将按钮分别命名为productTitleLabel,productDescriptionLabel,productPriceLabel和purchaseButton。 步骤9 - 选择项目文件,然后选择目标,然后添加 StoreKit.framework 。 第10步 - 更新 ViewController.h 如下 #import <UIKit/UIKit.h> #import <StoreKit/StoreKit.h> @interface ViewController : UIViewController< SKProductsRequestDelegate,SKPaymentTransactionObserver> { 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的购买相关操作。 输出 当我们运行应用程序时,我们将获得以下输出 - 确保您已在设置屏幕中退出帐户。单击“启动购买”时,选择“使用现有Apple ID”。输入您的有效测试帐户用户名和密码。您将在几秒钟内看到以下警报。 成功购买产品后,您将收到以下警报。您可以在我们显示此警报的位置查看更新应用程序功能的相关代码。 iOS访问地图 iOS iAd集成