27 décembre 2024

Une période Trial pour une application Windows Phone

OU alors comment débloquer une version payante pour un utilisateur « gagnant »

(Bon ce post est fait à l’arrache pour un copain)

Le but est par exemple d’offrir une application payante à quelqu’un. On peut imaginer un concours ou autre bref. Il y a sûrement plein de méthode mais j’ai voulu chercher par moi-même. Qui a dit « ah ben pour une fois » ? bon…

Alors mon idée est de stocké dans une base le WindowsLiveId et de débloquer s’il l’ID existe. Il envoi au développeur un email contenant son identifiant et le développeur l’ajoute dans sa base. Si l’utilisateur se met en mode Avion, tant pis pour lui, dans mon exemple, ça bloque.

Dans le code source que vous trouverez en bas de page, j’ai fait simplement une variante sur un nombre de jour (que l’on fait bien sur depuis longtemps ça très facilement sur Windows Phone) mais vous saurez adapter au besoin !

Côté hébergement, MySQL et page PHP

Du côté de votre hébergement, il faut une base avec ceci :

CREATE TABLE IF NOT EXISTS `MyApp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `deviceID` text NOT NULL,
  `install` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

Puis créer une page .PHP (V5.2 mini) où on passera un argument, le WindowsLiveAnonymousID :

<?php
//recupere le deviceID
isset($_GET['id']) ? $id = $_GET['id'] : $id = "";
 
if ($id != "") {
    $host     = 'votrehost';
    $login    = 'votrelogin';
    $password = 'votrepassword';
    $base     = 'votrebase';
 
    //connexion à la base de données
    $link = mysqli_connect($host, $login, $password, $base);
 
    //protection
	$id = mysqli_real_escape_string($link, $id);
	
	$query = "SELECT install FROM MyApp WHERE deviceID='$id' LIMIT 0,1";
	$result = mysqli_query($link, $query);
	
	$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
	
	$today = date('Y-m-d H:i:s');

	if ($row == NULL) {
        $query = "INSERT INTO MyApp(deviceID,install) VALUES('$id','$today')";
        mysqli_query($link, $query);
    }
	else {
		$install = strtotime($row["install"]);
		$today = strtotime($today);
		$days = $today - $install;
		$days = ceil($days/86400);
		echo $days;
	}
    
    mysqli_close($link);
}
?>

Ma petite difficulté et qu’il faut attendre le retour du site pour valider la variable IsTrial…

Vous noterez que j’utilise le WebClient / DownloadStringTaskAsync et sur Windows Phone 8 il faut installer le packet Nuget Bcl.Async

Bon c’est bien sur du code très simple, rien de spécial ! il y a sûrement des lacunes mais… ça peut aider. Maintenant, sérieux pour 1 ou 2 euros, c’est pas non plus la mer à boire et les utilisateurs peuvent faire cette effort surhumain pour vous l’acheter.

Merci Samuel Blanchard pour mon problème d’async résolu en 5 min où ça m’a pris 2h… no comment

Source du projet : DonneApp.zip