report
handbookinformation
privacy
blog Toß.Net - Windows Phone, Windows 8
language

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

careers
0  
report

Gérer le même projet en WP7 et WP8

Bon, faut pas se voiler la face, y’a encore à ce jour pas mal de Windows Phone 7.x en service qu’il ne faut pas oublier. Et vous êtes peut être comme moi très attiré par les caractéristiques que nous offre les Windows Phone 8. Mais voilà, comment bien gérer mon application sans faire du double code ?
windowsphone7et8
Je vous partage ici une solution que m’a expliqué David Poulin dernièrement.

Outil nécessaire


Il faut d’abord installer une extension pour votre Visual Studio 2012 qui se nomme « Project Linker 2012 »
extensions
Que vous installerez via le menu [OUTILS] puis [EXTENSIONS ET MISE A JOURS] PS: Oui, je suis français, je parle français et je mets mes logiciels en .. français.
Ici le lien http://visualstudiogallery.msdn.microsoft.com/273dbf44-55a1-4ac6-a1f3-0b9741587b9a

Ajout d’un projet Windows Phone 8


Afin d’avoir une solution « propre » je renomme mon projet existant PhoneAppli en PhoneAppli7. Pensez juste après à aller dans les propriétés de ce projet pour vérifier l’ »Objet de démarrage » et regardez si vos Nom d’assembly et/ou espace de nom de change pas.
Maintenant un clic droit sur la solution et [AJOUTER] [NOUVEAU PROJET...]
prjwp8
Et nous voilà maintenant avec nos deux jolis projets:
deuxprojets

Namespace

La première chose que je fais dans mon projet Windows Phone 8.0 est de mettre le même Namespace :
namespace

Flag de compilation


Il faut maintenant penser à rajouter un flag de précompilation pour le projet Windows Phone 8.0 « WP8″:
flag

 
#if WP8
//code spécifique Windows Phone 8
#else
//code spécifique Windows Phone 7.x
#end if

Liaisons avec mon projet initial

Il faut maintenant que je relie mon projet WP8 à mon projet WP7.x en faisant un clic droit sur le projet [PhoneAppli8] puis [Add project link..]
projectlink
Et de choisir le projet initial :
projectlink2
A ce moment là, Project Linker, crée automatiquement toutes les liaisons dans mon projet PhoneAppli8. Par la suite lorsque vous supprimerez ou ajouterez un élément du projet initial, il sera supprimé ou ajouté du projet PhoneAppli8. Cela fonctionne heureusement que dans un sens car si vous ajoutez par exemple une classe dans le projet WP8, elle y sera que pour ce projet.

Ajout des liaisons sans utiliser « Project Linker »


Vous pouvez ajouter vos Assets, Class, Models, View, Pages… existantes manuellement sans utiliser l’extension Project Linker en « liaison » en faisant un clic droit sur le projet PhoneAppli8, [Ajouter] [ELEMENT EXISTANT]. Vous sélectionnez le ou les éléments et veillez à sélectionnez « [Ajouter en tant que lien] » :
itemlinks
Et pour aller plus vite, sélectionner l’élément que vous aller déplacer en appuyez sur la touche ALT et faite un glisser-déposer dans le projet PhoneAppli8.

Vous remarquerez que l’icone de l’élément ajouté se distingue par un petit symbole supplémentaire. J’ai remarqué aussi que la modification d’un XAML se fait du projet initial et pas du second.

Références

Les références ne sont bien évidement pas reliées ; Certaines spécifiées sont propres à Windows Phone 8, il faut donc les rajouter soi-même.

Autre chose, personnellement, je n’ai pas relié l’App.xaml.

Ceci n’est qu’une méthode.. il y en a surement d’autre… ;)

Steff Vid liked this post
handbook
2  
privacy

Mettez moi de belles tuiles !

Il est grand temps de passer aux tuiles Haute Définition :) ! Le parc Windows Phone 8 grandit mais les Windows Phone 7.8 occupent encore le terrain et je pense réellement qu’il faut pas les oublier. Combien je vois d’applications où le développeur n’a pas mis de tuiles compatibles 7.8/8.0 ! Alors que ça prend 5 minutes (hormis le design des tuiles) pour implémenter sa tuile principale. tuile-avantapres
Le cas ici est à peine exagéré !
Regardez la différence de dimensions : sizes
Il est temps de réagir ! Vous avez 5min ?:D

1) INTALLATION DE MANGOPOLLO


Cherchons pas tous les moyens à se simplifier la vie ! Installez Mangopollo

 
PM> Install-Package Mangopollo

mangopollo nuget

2) PREPARER VOS TUILES


C’est le plus long ! Le minimum idéal : Une de 159×159, deux de 336×336 et deux de 691×336 en JPG ou PNG
tuiles
Et les placer par exemples dans un dossier \Assets\Tiles\
Assets

2) EST-ON SUR WINDOWS PHONE 7.8 OU PLUS ?


Placer ces quelques lignes dans l’App.xaml.cs :

 
private static Version TargetedVersion = new Version(7, 10, 8858);
public static bool IsTargetedVersion 
{ 
    get 
    { 
        return Environment.OSVersion.Version >= TargetedVersion; 
    } 
}

3) CREATION DES TUILES


C’est encore une fois super facile :

 
void NouvellesTuiles()
{
    if (App.IsTargetedVersion)
    {
        var tile = ShellTile.ActiveTiles.First();
        var flipTileData = new FlipTileData
        {
            SmallBackgroundImage = new Uri("/Assets/tiles/159x159.png", UriKind.Relative),
            BackTitle = "Mon appli",
            BackContent = "",
            BackgroundImage = new Uri("/Assets/tiles/336x336.png", UriKind.RelativeOrAbsolute),
            BackBackgroundImage = new Uri("/Assets/tiles/336x336b.png", UriKind.Relative),
            WideBackContent = "",
            WideBackgroundImage = new Uri("/Assets/tiles/691x336.png", UriKind.RelativeOrAbsolute),
            WideBackBackgroundImage = new Uri("/Assets/tiles/691x336b.png", UriKind.Relative)
        };
        tile.Update(flipTileData);

    }
}

Et exécuter cette méthode au démarrage de votre appli. Perso je l’ai mis dans le OnNagivationFrom().

Vous pouvez en tuile principale avoir le style FLIP ou Standard et tous les autres modes si vous créez une tuile secondaire.
wide

ALORS PLUS AUCUNE EXCUSE ! De plus le store aime bien les tuiles dynamique et le met en avant :
store


Source du projet Windows Phone : Tile7880.zip

blog
0  
language

Sans Clip, ça déborde : Tiles + Images

Usercontrol avec image animée

tile_storyboardAller encore de « à la façon de » avec ce petit contrôle like a Wikipédia de Rudy ou encore la tuile du Hub photo de notre Windows Phone.

J’ai fait ce petit contrôle que j’utile sur la plupart de mes applications là où je n’ai pas besoin d’y placer dynamiquement des images ; En effet, ici elles sont de dimensions fixes.

Clipping

La seule petite difficulté est qu’il faut appliquer un masque sur le Layout principal du contrôle sinon…ça déborde ! :
clip

















Il suffit donc d’utiliser RectangleGeometry et de lui définir les quatres coins de la zone visible

 
<Grid x:Name="LayoutRoot" Margin="0" Width="205" Height="205" >
	<Grid.Clip>
		<RectangleGeometry Rect="0,0,205,205" />
	</Grid.Clip>

Source du projet Windows Phone : ImageTile.zip

careers
2  
report

Pseudo Circular Progress

J’avais pas envie de perdre du temps à coder ou à chercher un contrôle du type Circular Progress qui ressemble à celui là :
Circular Progress classique

Alors qu’avec Blend, 8 ellipses, un storyboard avec un rotation sur le Z en boucle, on se rapproche du résultat en moins de 10 minutes pour les plus lent comme moi et ça donne ce résultat (Bon, ma capture vidéo ci-dessous tremblote un peu):

pseudo circular progress
Voilà pourquoi je dis j’ai ajouté le mot « pseudo » : c’est une rotation de l’ensemble pas un changement de couleur et opacité sur chaque ellipse mais au fond c’est pas si mal !

A l’utilisation, et bien je l’affiche au début d’un chargement long puis je le masque une fois terminé comme on le fait pour la progressbar.

Trop facile !

Source du projet Windows Phone : pseudocircularprogress.zip

handbook
0  
privacy
blog
blog