iPhone SDK achats intégrés

Ce didacticiel sur le SDK pour iPhone est le premier d'une série en plusieurs parties consacrée à la vente de produits et services "in-app" avec le cadre Store Kit. Attendez-vous à connaître les avantages et les limites de l'utilisation de la fonctionnalité d'achat intégré, les étapes nécessaires pour enregistrer du contenu "intégré à l'application" avec Apple Inc., comment configurer une vitrine simple et la différence entre le modèle de produit intégré et le modèle de produit serveur pour la distribution de contenu et l'exécution des commandes.

1. Pré-qualifiez votre contenu

L'une des fonctionnalités les plus puissantes du kit SDK pour iPhone 3 est la possibilité de traiter les achats "dans l'application". Étant donné que l'App Store gère l'autorisation et le traitement des paiements en votre nom, cette fonctionnalité facilite considérablement la vente de biens ou de services virtuels, car les développeurs peuvent se concentrer sur la création et la vente de contenus de qualité au lieu de tâches de commerce électronique plus traditionnelles telles que le cryptage et le stockage de numéros de cartes de crédit ou traitement de lots de cartes de crédit. L’utilisation de la fonctionnalité d’achat intégré à l’application simplifiera également le processus de commande pour les utilisateurs, qui devront simplement saisir leur nom d’utilisateur et leur mot de passe Apple pour autoriser la transaction avec leur compte iTunes..

Bien entendu, ces avantages ont un prix: Apple conservera 30% de la vente, comme ils le font pour tous les achats directs dans l'App Store. Si vous choisissez d'utiliser l'App Store comme passerelle de paiement, vous devez également vous conformer aux règles commerciales suivantes établies par Apple:

  • Aucun service physique ou réel n'est autorisé.
    Désolé, mais l'épicerie, les t-shirts et les lave-autos ne peuvent actuellement pas être vendus comme achat intégré..
  • La monnaie virtuelle n'est pas autorisée.
    Apple ne permettra pas actuellement la création d'une économie virtuelle avec une devise intermédiaire directe.
  • Les articles ou services achetés dans votre application doivent être accessibles et utilisés dans votre application..
    Semblable à la restriction sur la vente de biens réels, cela empêche les développeurs de vendre des choses comme des coupons ou des offres échangeables en dehors de l'application..
  • Pas de diffamation, discours de haine, pornographie ou jeu.
  • Apple a publié la liste suivante de catégories approuvées:
  • Contenu
    Inclut des livres numériques, des magazines, des photos, des illustrations, des niveaux de jeu, des personnages de jeux et tout autre contenu numérique pouvant être livré avec votre application..
  • La fonctionnalité
    Les produits déverrouillent ou développent des fonctionnalités que vous avez déjà fournies dans votre application. Par exemple, vous pouvez expédier un jeu avec plusieurs jeux plus petits pouvant être achetés par l'utilisateur..
  • Prestations de service
    Autorisez votre application à facturer aux utilisateurs des services ponctuels, tels que la transcription vocale. Chaque fois que le service est utilisé est un achat séparé.
  • Abonnements
    Fournir un accès au contenu ou aux services sur une base étendue. Par exemple, votre application peut offrir un accès mensuel à des informations financières ou à un portail de jeux en ligne. Vous devez définir une fréquence de renouvellement raisonnable afin d'éviter de gêner les utilisateurs avec des rappels non souhaités. Sachez que vous êtes responsable du suivi des expirations d’abonnement et de la facturation du renouvellement; l'App Store ne surveille pas la durée de l'abonnement et n'offre pas de mécanisme de facturation automatique.

2. Créez un nouveau projet Xcode et importez le framework Store Kit.

Store Kit Framework fournit la puissance et les fonctionnalités que vous utiliserez pour développer vos achats intégrés. Bien que le framework lui-même n'autorise pas les paiements de vos utilisateurs, il sert de passerelle entre votre application et Apple, vous permettant d'envoyer et de recevoir facilement des messages à partir de l'iTunes App Store..

Jetez un coup d'œil à l'illustration suivante d'Apple Inc. pour mieux comprendre ce concept:

Ouvrez Xcode et créez un nouveau projet iPhone en sélectionnant "View Based Application" comme type d'application par défaut. Nommez l'application "InAppDemo" ou insérez un titre plus créatif de votre choix..

Cliquez avec le bouton droit sur le dossier "Frameworks" dans le volet Groupes et fichiers, puis sélectionnez Ajouter -> Frameworks existants. Trouvez StoreKit.framework et cliquez sur "Ajouter".

Pour utiliser le framework dans notre projet, nous devrons l'ajouter à la classe du contrôleur de vue de notre projet. Développez le dossier "Classes" et cliquez sur InAppDemoViewController.h..

Juste sous la commande "import UIKit", ajoutez cette ligne:

 #importation  

Votre application devrait maintenant pouvoir tirer parti des fonctionnalités de Store Kit Framework..

3. Enregistrer du contenu Premium avec Apple Inc.

Chaque produit ou service virtuel que vous souhaitez vendre dans l'application doit être enregistré auprès d'Apple et doté d'un identifiant de produit unique. Étonnamment, ces identifiants sont générés dans iTunesConnect, pas dans le portail du programme pour développeurs..

Pour les nouvelles applications, cela pose le problème classique du "poulet ou de l'oeuf". Afin de construire votre projet d'achat intégré à l'application, vous devez générer des identifiants de produit, mais comme les identifiants de produit ne peuvent être créés que via iTunesConnect, votre application doit déjà avoir été soumise pour publication..

La solution à ce dilemme consiste à suivre le processus de soumission de votre demande pour examen par Apple, mais cochez la case "Télécharger le fichier binaire de l'application plus tard" lorsque vous accédez à l'onglet "Télécharger". Cela placera votre application dans l'état "En attente de téléchargement", ce qui est ce que vous voulez afin d'éviter une révision formelle de votre application pendant que vous intégrez et configurez encore vos achats intégrés..

Connectez-vous à votre compte de développeur iPhone et accédez au portail de provisioning iPhone pour commencer le processus de soumission d'une application de test. Si vous n'êtes pas déjà membre du programme pour développeurs iPhone, vous devez vous inscrire ici..

Après vous être connecté au portail de provisionnement, sélectionnez l'onglet "ID d'application". Cliquez sur "Nouvel identifiant d'application".

Vous devrez entrer un nom commun et un identifiant unique. Le nom commun sera utilisé pour identifier cet ID d'application dans le portail de provisioning et l'identifiant de paquet est un identifiant unique pour le binaire de votre application réelle. Lorsque vous développez une application qui utilisera des achats intégrés, vous devez utiliser un identifiant de lot complet. Aucun identifiant "joker" n'est autorisé.

Cliquez sur soumettre. Vous serez redirigé vers la page principale des identifiants d'application..

Recherchez votre ID d'application nouvellement créé dans la liste, puis cliquez sur le lien "Configurer" situé à droite de celui-ci..

Sur l'écran "Configurer l'identifiant de l'application", cochez la case "Activer l'achat dans l'application" et cliquez sur le bouton "Terminé":

Vous devez maintenant disposer d’un identifiant d’application unique que vous pouvez utiliser pour commencer à développer la fonctionnalité d’achat intégré à l’application avec.

Vous allez maintenant créer une soumission d'application test, laissez donc le portail du programme et connectez-vous à votre compte iTunesConnect à l'adresse itunesconnect.apple.com..

Une fois dans votre compte, sélectionnez l'option "Gérer les applications", puis "Ajouter une nouvelle application" en haut à gauche du panneau..

Parcourez les écrans présentés pour ajouter une nouvelle application et assurez-vous de cocher la case "ajouter une application binaire plus tard" dans l'onglet "Télécharger". Au cours de ce processus, vous devrez probablement télécharger une image de test aléatoire pour le logo 512x512 et l’écran principal..

Une fois votre soumission fictive terminée, vous revenez à la page de destination de la gestion des applications iTunesConnect. Sélectionnez la soumission d'application que vous venez de créer, puis sélectionnez "Gérer les achats intégrés".

Pour ajouter votre premier article, sélectionnez "CRÉER NOUVEAU" en haut à gauche..

Vous serez maintenant invité à sélectionner l'identifiant de l'ensemble auquel vos achats intégrés seront associés. Sélectionnez l'identifiant unique Bundle que vous avez créé plus tôt dans ce tutoriel et cliquez sur "Continuer". Si vous suivez strictement le didacticiel, l'identifiant de l'ensemble à sélectionner est "com.mobiletuts.inapppurchasedemo".

Un ensemble d’options pour la détermination du prix apparaît maintenant dans l’écran "Créer un nouvel achat intégré". Comme indiqué dans les astuces relatives aux outils d'aide, "Nom de référence" sert à identifier votre offre d'achat dans les résultats de recherche iTunesConnect et "Produit" à l'identification de votre application dans les rapports iTunesConnect..

Apple vous encourage à choisir entre "Contenu", "Fonctionnalité", "Services" et "Abonnements" lors de l'examen des catégories possibles pour vos offres in-app, mais vous ne pouvez pas les soumettre au magasin. identifier votre application avec l'un des trois types totalement nouveaux.

Comme décrit par Apple Inc., ces types sont:

  • Consommables:
    Les produits doivent être achetés chaque fois que l'utilisateur a besoin de cet article. Par exemple, les services sont généralement implémentés en tant que produits consommables.
  • Non consommables:
    Les produits ne peuvent être achetés qu'une seule fois par les utilisateurs. Une fois qu'un produit non consommable est acheté, il est toujours disponible sur tous les appareils associés au compte iTunes de cet utilisateur. Assistance des fournisseurs de kits de magasin pour la restauration de produits non consommables sur d'autres appareils.
  • Abonnements:
    Partager les attributs des produits consommables et non consommables. Comme un produit consommable, un abonnement peut être acheté plusieurs fois. Cela vous permet de mettre en œuvre votre propre mécanisme de renouvellement dans votre application. Cependant, des abonnements doivent être fournis sur tous les périphériques associés à un utilisateur. In App Purchase s'attend à ce que les abonnements soient livrés via un serveur externe que vous allez fournir. Vous devez fournir une infrastructure pour fournir des abonnements à plusieurs périphériques..

Sélectionnez celle qui s'applique à votre type d'offre ou "Consommable" si vous suivez ce tutoriel strictement. Notez qu'une fois ce type défini, il ne peut plus être modifié ultérieurement. Choisissez donc judicieusement..

Ensuite, nous définissons le prix de l’offre en sélectionnant un niveau de prix plutôt que de saisir directement une valeur. Le système de niveau de prix d'achat par application est identique au système de vente directe présenté lors du téléchargement initial de votre application, mais si vous souhaitez revoir vos options, cliquez sur le texte "Voir la matrice de tarification" à droite du menu déroulant..

Allez-y et sélectionnez "Tier 1" pour le prix ou celui qui correspond à votre offre. Assurez-vous de cocher la case "Réservé à la vente", même si vous n'êtes pas encore prêt à lancer votre application.. Cette case doit être cochée pour déboguer et tester votre code.

L'ensemble de champs "Afficher les détails" vous permet de contrôler facilement la localisation des offres. Sélectionnez la ou les langues dans lesquelles vous souhaitez répertorier votre offre et ajoutez votre nom d'affichage et description personnalisés. Une description explicite et spécifique est requise par Apple pour l'approbation de la révision..

Pour l'instant, vous pouvez ignorer le champ Capture d'écran car il s'agit simplement d'un guide destiné à l'employé Apple pour la révision de votre produit. Cliquez sur "Enregistrer les modifications" pour enregistrer cette offre auprès d'Apple. Répétez cette procédure pour ajouter des éléments supplémentaires à la vente "dans l'application".

Ce tutoriel utilisera les données génériques suivantes pour nos offres, mais n'hésitez pas à être aussi créatif que vous le souhaitez en insérant les vôtres:

Produit 1 | Consommable | com.mobiletuts.inappdemo.1 | Niveau 1
Produit 2 | Consommable | com.mobiletuts.inappdemo.2 | Niveau 2
Produit 3 | Consommable | com.mobiletuts.inappdemo.3 | Niveau 3

4. Construisez votre devanture de magasin

Après avoir enregistré vos articles premium avec iTunesConnect, vous êtes prêt à commencer à intégrer ces offres dans votre application. Pour les besoins de ce tutoriel, nous utiliserons un simple UITableView pour afficher notre liste de produits..

Accédez au fichier d'en-tête de votre contrôleur de vue d'application principal, dans ce cas InAppDemoViewController.h, et modifiez le code pour qu'il ressemble à ceci:

 #importation  #importation  @interface InAppDemoViewController: UIViewController  NSMutableArray * productIdentifierList; NSMutableArray * productDetailsList; IBOutlet UITableView * productDisplayTableView;  @property (nonatomic, keep) NSMutableArray * productIdentifierList; @property (nonatomic, keep) NSMutableArray * productDetailsList; @property (nonatomic, keep) UITableView * productDisplayTableView; @fin 

Le tableau productIdentifierList stockera les identificateurs de produit que nous avons créés à l'étape 3 sous forme de chaînes, tandis que productDetailsList stockera les informations sur le produit localisées fournies par l'App Store et réellement affichées à l'utilisateur..

Maintenant, allez dans le fichier d'implémentation de classe, InAppDemoViewController.m, et synthétisez les variables que vous venez de déclarer dans votre fichier d'en-tête:

 @implementation InAppDemoViewController @synthesize productIdentifierList, productDetailsList, productDisplayTableView; 

Décommentez la fonction viewDidLoad et initialisez votre source de données:

 - (void) viewDidLoad productDetailsList = [[NSMutableArray alloc] init]; productIdentifierList = [[NSMutableArray alloc] init]; for (short item_count = 1; item_count <= 3; item_count++)  [productIdentifierList addObject:[NSString stringWithFormat:@"com.mobiletuts.inappdemo.%d", item_count]];  SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:productIdentifierList]]; request.delegate = self; [request start]; [super viewDidLoad];  

Dans une application réelle, nous ne voudrions jamais placer ce code de chargement d'achat dans la méthode viewDidLoad, car il s'exécutera dans le thread principal et verrouillera brièvement l'interface de l'application lors de la récupération des données. Nous utilisons viewDidLoad ici uniquement à des fins de démonstration.

À partir de la ligne 6, nous créons une boucle for pour effectuer une itération sur le nombre d'éléments à afficher. Étant donné que nous utilisons un schéma de dénomination commun pour nos identificateurs de produit, nous pouvons créer plusieurs éléments à la volée sans avoir à saisir chaque identificateur à la main. Notez que ce modèle peut encore être amélioré avec certaines programmations Internet: votre liste d'identifiants de produit serait idéalement chargée depuis un serveur externe afin de vous permettre d'ajouter ou de supprimer de manière dynamique des produits sans pousser un nouveau fichier binaire à travers l'App Store à chaque fois..

En commençant à la ligne 10, nous découvrons notre premier objet Store Kit Framework, SKProductsRequest. Cet objet est utilisé pour envoyer une liste d'identifiants de produits à l'App Store afin de recevoir une liste d'informations sur les produits localisés et des informations précises sur les prix des produits. Cette technique de localisation dynamique et de regroupement de produits vous permet une flexibilité bien plus grande que le codage manuel de ces attributs.

Sur la ligne 12, nous définissons le délégué à la demande que le Store Kit Framework appellera après avoir reçu un résultat. Copiez et collez le code suivant pour vous conformer à ce protocole de délégué:

 -(void) productsRequest: (SKProductsRequest *) demande didReceiveResponse: (SKProductsResponse *) response [productDetailsList addObjectsFromArray: response.products]; [productDisplayTableView reloadData];  - (void) requestDidFinish: (SKRequest *) request [demande de publication];  - (void) request: (SKRequest *) request didFailWithError: (NSError *) error NSLog (@ "Impossible de se connecter avec l'erreur:% @", [error localizedDescription]);  

La méthode productsRequest est appelée après que la liste de produits a été extraite de l'App Store et nous affectons cette liste d'objets de produit de l'App Store à notre tableau productDetailsList pour une utilisation ultérieure. Les deux autres méthodes de protocole fonctionnent comme prévu.

Nous passons maintenant à la configuration de UITableView qui sera utilisé pour afficher les informations sur nos produits. Commencez par configurer votre fichier nib dans Interface Builder. Développez le dossier "Ressources" dans le volet Groupes et fichiers, puis double-cliquez sur le fichier InAppViewController.xib pour ouvrir Interface Builder..

Dans le volet Bibliothèque, faites glisser un objet UITableView vers la fenêtre Contrôleur d'affichage de démonstration d'application. Cliquez avec le bouton droit sur UITableView dans la fenêtre et connectez le source de données et déléguez-le au propriétaire du fichier. Cliquez ensuite avec le bouton droit de la souris sur le propriétaire du fichier et connectez productDisplayTableView à l'objet UITableView. Sauvegarder et fermer la plume.

Revenez à votre fichier d'implémentation de contrôleur de vue, InAppDemoViewController.m.

Collez les lignes suivantes pour répondre aux exigences de protocole UITableViewDelegate et UITableViewDataSource:

- (NSInteger) tableView: (UITableView *) numéro de la table (numéro de la vue): (NSInteger) section return [self.productDetailsList count];  - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath statique NSString * GenericTableIdentifier = @ "GenericTableIdentifier"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: GenericTableIdentifier]; if (cell == nil) cell = [[[UITableViewCell alloc]] initWithFrame: CGRectZero reuseIdentifier: GenericTableIdentifier] autorelease];  NSUInteger row = [ligne indexPath]; SKProduct * thisProduct = [productDetailsList objectAtIndex: row]; [cell.textLabel setText: [NSString stringWithFormat: @ "% @ -% @", thisProduct.localizedTitle, thisProduct.price]]; cellule de retour;  

La plupart de ceci est du code standard pour afficher du texte dans des cellules UITableView. Notez cependant que nous créons une instance de SKProduct, thisProduct, pour extraire les données de produit de la ligne en cours, et que nous pouvons facilement extraire des informations de produit localisées à partir des données membres de l'objet. Reportez-vous à la référence officielle Apple SKProduct pour plus d'informations sur toutes les données membres disponibles..

Vous devriez maintenant pouvoir compiler et exécuter votre application, mais il y a un problème: les achats dans l'App Store ne peuvent être testés que sur un appareil réel. Vous devrez donc créer et installer un profil d'approvisionnement pour cette application afin de tester la code.

Après avoir installé votre profil d'approvisionnement et configuré Xcode, créez et exécutez l'application sur votre appareil. Une vue de table de base avec des titres de produits est trop simpliste pour votre application réelle, mais la beauté du système d'achat par application réside dans le fait que l'apparence de la devanture de magasin dépend entièrement de vous. Dans les prochains tutoriels de cette série, une interface plus avancée sera créée. En attendant, étendez votre créativité et utilisez le design que vous souhaitez pour présenter vos produits.!

5. Choisir une stratégie de distribution

Avant de commencer à autoriser les transactions et à vendre du nouveau contenu à vos utilisateurs, prenez un moment pour réfléchir à la manière dont ce nouveau contenu sera livré. Le cadre Store Kit vous permettra d’autoriser facilement un achat, mais vous êtes seul pour l’exécution de votre commande. Le modèle de produit intégré et le modèle de produit serveur sont les deux principaux modèles de conception parmi lesquels vous pouvez choisir pour vous assurer que vos utilisateurs en ont pour leur argent..

Modèle de produit intégré

Avec le modèle de produit intégré, tout ce qu'un utilisateur peut acheter est déjà inclus dans l'application lors du premier téléchargement. L'utilisation de ce contenu est verrouillée ou dissimulée jusqu'à ce qu'un achat intégré à l'application soit effectué. L'offre devient alors utilisable..

Le diagramme ci-dessous de Apple Inc. illustre le modèle de produit intégré:

Modèle de produit serveur

Dans le modèle de produit serveur, le contenu est poussé dynamiquement vers le périphérique de l'utilisateur au moment de l'achat à partir d'un serveur sous votre contrôle. Dans le modèle de produit serveur, vous devez ajouter l'étape supplémentaire consistant à vérifier que le reçu de transaction reçu du périphérique client est valide. Vous devrez peut-être également configurer un mécanisme permettant d'identifier vos utilisateurs afin de vous assurer que les abonnements et autres produits non consommables peuvent toujours accessible depuis n'importe quel appareil iPhone OS appartenant à l'utilisateur acheteur, et pas seulement à partir du périphérique sur lequel il a initialement acheté l'élément (il s'agit d'une exigence commerciale d'Apple). Vous êtes également responsable de la négociation de la connexion réseau pour transférer une quantité considérable de texte ou de données multimédia..

L'un des principaux avantages du modèle de produit serveur est qu'il vous permet de vendre une très grande quantité de contenu à la demande tout en limitant la taille de téléchargement initiale de votre application. Il est également beaucoup plus rapide de créer et de diffuser du nouveau contenu premium dans votre application, car vous ne devriez pas avoir besoin d'insérer une nouvelle application binaire sur iTunes Store pour pouvoir proposer de nouveaux articles à la vente..

Le diagramme suivant d’Apple Inc. illustre le modèle de produit serveur:

Comme vous pouvez le constater, le modèle de produit intégré est le plus simple des deux modèles de conception. Il est plus facile à mettre en œuvre et à entretenir, mais n’a pas le pouvoir de la diffusion à la demande. Le modèle de produit serveur est beaucoup plus complexe, mais vous permet de créer un nouveau contenu avec plus de flexibilité et de rapidité, tout en préservant la taille de votre application en fournissant des téléchargements volumineux uniquement au besoin..

Le modèle de produit intégré et le modèle de produit serveur seront traités en détail dans les futures parties de cette série..

Le moment est venu d'examiner ces deux modèles de distribution et de déterminer celui qui convient le mieux à votre application..