iOS - Mua trong ứng dụng
Mua trong ứng dụng được sử dụng để mua nội dung bổ sung hoặc nâng cấp các tính năng liên quan đến ứng dụng.
Các bước liên quan
Step 1 - Trong kết nối iTunes, hãy đảm bảo rằng bạn có unique App ID và khi chúng tôi tạo bản cập nhật ứng dụng với bundle ID và ký mã trong Xcode với cấu hình cung cấp tương ứng.
Step 2- Tạo ứng dụng mới và cập nhật thông tin ứng dụng. Bạn có thể biết thêm về điều này trong apple'sAdd new apps tài liệu.
Step 3 - Thêm sản phẩm mới để mua hàng trong ứng dụng Manage In-App Purchase của trang ứng dụng của bạn.
Step 4- Đảm bảo bạn thiết lập chi tiết ngân hàng cho ứng dụng của mình. Điều này cần được thiết lập choIn-App purchaselàm việc. Ngoài ra, hãy tạo một tài khoản người dùng thử nghiệm bằngManage Users trong trang kết nối iTunes của ứng dụng của bạn.
Step 5 - Các bước tiếp theo liên quan đến xử lý mã và tạo giao diện người dùng cho giao dịch mua trong ứng dụng của chúng tôi.
Step 6 - Tạo một single view application và nhập số nhận dạng gói là số nhận dạng được chỉ định trong kết nối iTunes.
Step 7 - Cập nhật ViewController.xib như hình dưới đây -
Step 8 - Tạo IBOutlets cho ba nhãn và nút đặt tên chúng lần lượt là productTitleLabel, productDescriptionLabel, productPriceLabel và buyButton.
Step 9 - Chọn tệp dự án của bạn, sau đó chọn mục tiêu và sau đó thêm StoreKit.framework.
Step 10 - Cập nhật ViewController.h như sau -
#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
Step 11 - Cập nhật ViewController.m như sau -
#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
Ghi chú
Bạn phải cập nhật kTutorialPointProductID lên productID bạn đã tạo cho Mua hàng trong ứng dụng của mình. Bạn có thể thêm nhiều sản phẩm bằng cách cập nhật NSSet của productIdentifier trong fetchAvailableProducts. Tương tự, xử lý các hành động liên quan đến mua hàng cho các ID sản phẩm bạn thêm.
Đầu ra
Khi chúng tôi chạy ứng dụng, chúng tôi sẽ nhận được kết quả sau:
Đảm bảo bạn đã đăng xuất khỏi tài khoản của mình trong màn hình cài đặt. Khi nhấp vào Bắt đầu mua, hãy chọn Sử dụng ID Apple Hiện tại. Nhập tên người dùng và mật khẩu tài khoản thử nghiệm hợp lệ của bạn. Bạn sẽ được hiển thị cảnh báo sau trong vài giây.
Khi sản phẩm của bạn được mua thành công, bạn sẽ nhận được thông báo sau. Bạn có thể xem mã liên quan để cập nhật các tính năng ứng dụng nơi chúng tôi hiển thị cảnh báo này.