iOS - Покупка в приложении
Покупка в приложении используется для приобретения дополнительного контента или обновления функций в отношении приложения.
Вовлеченные шаги
Step 1 - В iTunes connect убедитесь, что у вас есть unique App ID и когда мы создаем обновление приложения с bundle ID и подпись кода в Xcode с соответствующим профилем подготовки.
Step 2- Создайте новое приложение и обновите информацию о приложении. Вы можете узнать больше об этом в Apple'sAdd new apps документация.
Step 3 - Добавить новый продукт для покупки в приложении в Manage In-App Purchase страницы вашего приложения.
Step 4- Убедитесь, что вы установили банковские реквизиты для своего приложения. Это необходимо настроить дляIn-App purchaseработать. Также создайте тестовую учетную запись пользователя, используяManage Users на странице подключения iTunes вашего приложения.
Step 5 - Следующие шаги связаны с обработкой кода и созданием пользовательского интерфейса для нашей покупки в приложении.
Step 6 - Создать single view application и введите идентификатор пакета - это идентификатор, указанный в iTunes connect.
Step 7 - Обновите ViewController.xib как показано ниже -

Step 8 - Создать IBOutlets для трех ярлыков и кнопки с именами productTitleLabel, productDescriptionLabel, productPriceLabel и Purchaton соответственно.
Step 9 - Выберите файл проекта, затем выберите цели и затем добавьте StoreKit.framework.
Step 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
Step 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, который вы создали для покупки в приложении. Вы можете добавить более одного продукта, обновив NSSet productIdentifiers в fetchAvailableProducts. Точно так же обрабатывайте действия, связанные с покупкой, для добавляемых вами идентификаторов продуктов.
Вывод
Когда мы запустим приложение, мы получим следующий вывод -

Убедитесь, что вы вышли из своей учетной записи на экране настроек. Нажав «Начать покупку», выберите «Использовать существующий Apple ID». Введите действительное имя пользователя и пароль для тестовой учетной записи. Через несколько секунд вам будет показано следующее предупреждение.

После успешной покупки продукта вы получите следующее предупреждение. Вы можете увидеть соответствующий код для обновления функций приложения, где мы показываем это предупреждение.
