做(zuò)自(zì)由與創造的先行(xíng)者

iOS應用內(nèi)購買

iOS開(kāi)發手冊

IOS應用內(nèi)購買

簡介

應用程序內(nèi)購買是應用程序用于購買額外(wài)內(nèi)容或升級功能(néng)。

實例步驟

1.在 iTunes 連接中請(qǐng)确保擁有一(yī)個唯一(yī)的 App ID(unique App ID ),當創建捆綁的ID( bundle ID)應用程序更新時(shí),代碼會以相應的配置文件簽名在Xcode上(shàng)

2.創建新的應用程序和(hé)更新應用程序信息。你可(kě)以知道(dào)更多有關的,在蘋果的 添加新的應用程序 文檔中

3.在應用程序頁的管理應用程序( Manage In-App Purchase)中,為(wèi)app內(nèi)付費(fèi)添加新産品

4.确保設置的應用程序為(wèi)的銀(yín)行(xíng)詳細。需要(yào)将其設置為(wèi)在應用程序內(nèi)購買(In-App purchase)。此外(wài)在 iTunes 中使用管理用戶(Manage Users)選項,創建一(yī)個測試用戶帳戶連接您的應用程序的頁。

5.下(xià)一(yī)步是與處理代碼和(hé)為(wèi)我們在應用程序內(nèi)購買創建有關的 UI。

6.創建一(yī)個單一(yī)的視(shì)圖應用程序,并在 iTunes 中指定的标識符連接輸入捆綁标識符

7.更新ViewController.xib

8.為(wèi)三個标簽創建IBOutlets,且将按鈕分别命名為(wèi) productTitleLabel、 productDescriptionLabel、 productPriceLabel 和(hé) purchaseButton

9.選擇項目文件,然後選擇目标,然後添加StoreKit.framework

10.更新ViewController.h ,如(rú)下(xià)所示

#import

#import

@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 ,如(rú)下(xià)所示

#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

注意: 需要(yào)修改你創建In-App Pur(應用內(nèi)購買)的 kTutorialPointProductID 。通(tōng)過修改fetchAvailableProducts産品标識符的 NSSet, 你可(kě)以添加多個産品。

網站建設開(kāi)發|APP設計開(kāi)發|小程序建設開(kāi)發
下(xià)一(yī)篇:iOS地(dì)圖開(kāi)發
上(shàng)一(yī)篇:iOS整合iAD