求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 
 

iOS教程
iOS (iPhone, iPad)教程
IOS - 快速入门
IOS - 开发环境配置
iOS - Objective-C基础
iOS - 创建第一个
IOS - 动作和插座
iOS - Delegates实例
iOS - UI元素
iOS - Accelerometer(加
IOS - 通用应用程序
IOS - 摄像头管理
iOS - 位置处理
iOS - SQLite 数据库
iOS - 发送电子邮箱
iOS - 音频和视频
IOS - 文件处理
IOS - 访问地图
iOS - 应用程序内购买
iOS - iAd 整合
 
 

iOS - 应用程序内购买
885 次浏览
29次  

介绍

应用程序内购买用于购买额外内容或应用方面的升级功能。

涉及的步骤

1. 在iTunes连接,确保您拥有一个独特的应用程序ID和相应的配置文件捆绑ID和代码签名在Xcode,当我们创建应用程序更新。

2. 创建一个新的应用和更新应用程序的信息。可以了解这个苹果添加新的应用程序文档。

3. 添加一个新的产品,在管理应用程序内购买在应用程序的页面应用程序内购买。

4.确保您设置银行为您的应用程序的详细信息。这需要应用程序内购买的设置工作。还可以创建一个测试用户帐户使用管理用户“选项,应用程序在iTunes连接页面。

5. 接下来的步骤是处理代码和创建用户界面为我们的应用程序内购买。

6. 创建一个单独视图应用程序并进入包标识符指定的标识符在iTunes连接。

7. 更新 ViewController.xib 内容如下所示:

8. 创建三个IBOutlets 标签的命名分别为productDescriptionLabel productTitleLabel,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 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

注意事项:

创建在应用程序内购买的ProductID更新kTutorialYiibaiProductID。可以添加一个以上的产品通过更新productIdentifiers的NSSet fetchAvailableProducts。同样处理产品ID添加购买相关动作。

输出

现在,当我们运行程序时,我们会得到下面的输出。

请确定登录您的帐户设置屏幕。在点击启动购买请选择“使用现有的Apple ID。输入您的有效的测试帐户的用户名和密码。在几秒钟内将显示以下警告。

所购买的产品一旦成功,会得到以下警示。可以更新显示此警报的应用程序功能的相关代码。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



885 次浏览
29次
 捐助