Windows Phone 8 – Ajouter l’in-app purchase à votre application

devCenterLogo

Depuis Windows Phone 8, Microsoft a apporté une fonctionnalité très demandée par les développeurs et déjà présente sur les plateformes concurrentes, l’In-App Purchase. L’In-app purchase apporte un nouveau canal de rémunération aux développeurs, en plus de la publicité et de l’achat de l’application. Grâce à cela nous pouvons maintenant baser nos applications sur un nouveau business model, le Freemium. Dans cet article, je vais vous montrer comment utiliser l’in-app purchase pour acheter un produit au sein de votre application Windows Phone 8, et les différentes manières de la tester via une librairie dédiée de Microsoft ou la création d’une application en beta au sein du Dev Center.

Première méthode, utiliser la mock in-app library

Ce qu’il faut savoir, c’est que l’achat par in-app implique une certaine infrastructure serveur du coté de Microsoft. En effet, l’application doit dialoguer avec le système d’achat de Microsoft et s’occuper de la transaction qui doit être validée par les serveurs de Microsoft. Une fois cet achat validé, c’est au développeur d’implémenter le résultat de l’achat (déblocage de niveaux dans un jeu, ajout de fonctionnalités premium etc…). Pour ce faire, Microsoft a développé une petite librairie qui permet de simuler le serveur d’achat pour votre application en local. Vous pourrez ainsi tester le processus d’achat et de validation du produit directement sur votre téléphone.

Voici un schéma de Microsoft permettant d’illustrer ce principe :

Commençons d’abord par télécharger cette librairie sur le site de Microsoft et ajouter le projet au sein de notre solution : http://go.microsoft.com/fwlink/?LinkId=269984

Puis dans le fichier App.xaml.cs plaçons le code relatif

private void SetupMockIAP()
{
#if DEBUG
MockIAP.Init();

MockIAP.RunInMockMode(true);
MockIAP.SetListingInformation(1, "fr-FR", "A description", "1", "TestApp");

// Add some more items manually.
ProductListing p = new ProductListing
{
Name = "Wallpapers_720x1280_Pack_One",
ImageUri = new Uri("dl.png", UriKind.Relative),
ProductId = "Wallpapers_720x1280_Pack_One",
ProductType = Windows.ApplicationModel.Store.ProductType.Durable,
Keywords = new string[] { "wallpapers" },
Description = "4 wallpapers - 720x1280",
FormattedPrice = "0.99",
Tag = string.Empty
};
MockIAP.AddProductListing("Wallpapers_720x1280_Pack_One", p);
#endif
}

Dans cet exemple, je crée un objet de test à acheter par l’utilisateur. Il s’agit d’un pack de wallpapers avec différents attributs comme un nom, une description, un prix, une image et des mots clés associés.  Ensuite nous allons appeler cette méthode au sein de notre page App.xaml.cs  après le InitializePhoneApplication() .

 #if DEBUG
SetupMockIAP();
#endif

Vous avez maintenant mis en place votre solution de test local de l’in-app purchase. Voyons maintenant une seconde méthode en passant par une application Beta.

Seconde méthode, utiliser une application Beta

Utiliser une application Beta par rapport à la librairie de Microsoft permet d’obtenir un aperçu utilisateur bien plus réaliste. En effet, en créant une application beta vous allez utiliser les serveurs de Microsoft et réaliser le parcours utilisateur tel qu’il le fera. De plus, un achat effectué au sein de l’application beta restera validé à jamais pour cet utilisateur, comme sur une application en environnement de production. Ainsi, vous pouvez aussi tester votre fonctionnalité après la réinstallation de l’application.  Par contre, cette méthode est bien plus lente car la soumission d’une application beta peut prendre jusqu’à 2 heures avant qu’elle soit disponible sur le store et téléchargeable sur votre téléphone.

La soumission d’une application en beta utilise le même processus qu’une application classique sur le Windows Phone Dev Center, penser à bien sélectionner le mode de distribution “beta”  et écrire votre adresse Live afin de pouvoir télécharger l’application.

inapp-1

A cette application beta, nous devons aussi ajouter un produit in-app beta afin d’effectuer l’achat de ce produit. Nous retrouvons toutes les caractéristiques du produit que nous utilisions lors de la méthode 1. Attention à nommer correctement l’in-app product ID car il servira d’identifiant unique lors de l’achat.

inapp-2

Nous allons passer maintenant au code commun qui permet soit d’utiliser la librairie de test en local soit en environnement beta.

Acheter un produit et vérifier sa licence

Tout d’abord, nous allons voir pour acheter notre produit (créé via la librairie de Microsoft ou via le DevCenter)

public static async void BuyProductById(PackItem Pack)
{
// First, retrieve the list of some products by their IDs.
ListingInformation allProducts = await CurrentApp.LoadListingInformationAsync();

ProductListing productListing = null;
if (!allProducts.ProductListings.TryGetValue(Pack.Name, out productListing))
{
MessageBox.Show("Could not find product information","Error",MessageBoxButton.OK);
return;
}

await CurrentApp.RequestProductPurchaseAsync(productListing.ProductId, false);
}

Dans mon exemple, après un clic au sein de l’application sur un pack de wallpapers, je recherche dans le listing produit de l’application si un ID de produit correspond bien à mon pack de wallpaper, si oui, j’affiche la demande d’achat du produit.  Voici un aperçu de l’application en test local et en situation réelle.

inapp-3in-app4

Maintenant, nous devons vérifier s’il a correctement acheté le produit ou non.

public static bool IsPaid(PackItem Pack)
{
ProductLicense productLicense = null;
if (CurrentApp.LicenseInformation.ProductLicenses.TryGetValue(Pack.Name, out productLicense))
{
       if (productLicense.IsActive)
       {
             return true;
       }
       else
       {
            return false;
       }
}
else
{
    return false;
}

}

Cette méthode me permet de tester si l’utilisateur a acheté le pack de wallpapers qu’il a sélectionné. Si la méthode renvoie true, l’utilisateur a bien payé pour le produit, et nous devons donc lui fournir le service associé, ici en l’occurrence le téléchargement de plusieurs wallpapers.

Cas d’un produit consommable (pièces d’or)

Dans l’exemple d’avant, nous avons acheté un produit de type “durable” (achat définitif), il existe un second type de produit, le “consommable” (ex des pièces d’or). Pour ce type de produit, vous devez notifier le service d’achat in-app que le produit a bien été utilisé et qu’il peut être ré-acheté.

Voici un exemple tiré du MSDN :

void MaybeGiveMeGold(ProductLicense license, int goldCount)
{
    if (license.IsConsumable && license.IsActive)
    {
        m_goldCount += goldCount;
        CurrentApp.ReportProductFulfillment(license.ProductId);
    }
}

Conclusion

L’ajout de l’in-app purchase à son application est donc une méthode assez simple mais qui nécessite de tester à 100% tout le processus. En effet, ici l’utilisateur paie directement pour un service et le développeur ne peut se permettre d’avoir un bug qui empêche la livraison de ce service. Le processus que j’adopte est donc un mix des deux méthodes, à savoir d’abord plusieurs tests en local via la librairie de mock  puis ensuite un test avec une application beta afin de vérifier avec le véritable process Microsoft.  N’oubliez pas ensuite après l’achat de bien délivrer votre service et/ou produit à l’utilisateur.

Pour un déploiement au sein d’une application en production, le code réalisé en environnement beta reste le même, mais il ne faut surtout pas oublier de rajouter les produits in-app associés à cette application sur le Dev Center.

COMMENTAIRES 3 commentaires

  1. […] Pour cela, deux méthodes sont proposées par microsoft, histoire de gagner du temps, je vous conseille de lire l’article de Florent Rousselet qui le fait très bien : http://blog.soat.fr/2013/09/windows-phone-8-ajouter-lin-app-purchase-a-votre-application/ […]

  2. […] Pour voir l’intégralité, c’est ici : Blog Soat […]

  3. […] Ajouter l’in-app purchase à votre application […]

AJOUTER UN COMMENTAIRE