Achats intégrés dans iOS
Introduction
L'achat intégré est une fonctionnalité utilisée par les applications pour acheter du contenu supplémentaire ou mettre à niveau des fonctionnalités.
Étapes de l'exemple
1. Dans iTunes Connect, assurez-vous d'avoir un App ID unique. Lors de la création du bundle ID et de la mise à jour de l'app, le code sera signé dans Xcode avec le profil de provisionnement correspondant.
2. Créez une nouvelle app et mettez à jour les informations de l'app. Vous pouvez en savoir plus à ce sujet dans la documentation d'Apple « Adding a New App ».
3. Sur la page de l'app, sous Gérer les achats intégrés, ajoutez un nouveau produit pour l'achat intégré.
4. Assurez-vous que les coordonnées bancaires sont définies pour l'app. Celles-ci doivent être configurées pour l'achat intégré. De plus, dans iTunes, utilisez l'option Gérer les utilisateurs pour créer un compte utilisateur de test sur la page de votre app.
5. L'étape suivante consiste à gérer le code et à créer l'interface utilisateur liée à notre achat intégré.
6. Créez une application à vue unique, et saisissez l'identifiant de bundle dans iTunes Connect qui correspond à l'identifiant spécifié.
7. Mettez à jour ViewController.xib comme indiqué ci-dessous.
8. Créez des IBOutlets pour les trois étiquettes et le bouton, en les nommant respectivement productTitleLabel, productDescriptionLabel, productPriceLabel et purchaseButton.
9. Sélectionnez le fichier de projet, puis sélectionnez la cible, puis ajoutez StoreKit.framework.
10. Mettez à jour ViewController.h comme indiqué ci-dessous.
#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. Mettez à jour ViewController.m comme indiqué ci-dessous.
#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
Remarque :Vous devez modifier le kTutorialPointProductID pour l'achat intégré que vous avez créé. En modifiant le NSSet d'identifiants de produit dans fetchAvailableProducts, vous pouvez ajouter plusieurs produits.
Sortie
Exécutez l'application, la sortie est la suivante.

Assurez-vous d'être connecté. Cliquez sur purchase pour sélectionner l'Apple ID existant. Saisissez le nom d'utilisateur et le mot de passe d'un compte de test valide. Après quelques secondes, le message suivant s'affiche.

Une fois le produit acheté avec succès, les informations suivantes seront affichées. Là où ces informations sont affichées, vous pouvez mettre à jour le code lié aux fonctionnalités de l'application.
