Home - About me - Browse by categories

[Windows Phone 8] Utilisation du ProximityDevice NFC

Windows Phone 8 permet de mettre en place de la communication NFC entre devices, en mode tap. Pour commencer à découvrir les APIs, je vous propose un scénario ultra simple : une application Windows Phone 8 ayant deux pages. La première est capable de publier un message via NFC, la seconde est capable de recevoir un message via NFC. Lorsque l’on tape deux téléphones entre eux celui sur la page de publication envoi un message qui est reçu sur l’autre téléphone.

Publier un message via NFC

Pour commencer, il est nécessaire de récupérer une instance de la classe ProximityDevice, défini dans Windows.Networking.Proximity.

public partial class Publish : PhoneApplicationPage
{
ProximityDevice _proximityDevice;

public Publish()
{
InitializeComponent();
_proximityDevice = ProximityDevice.GetDefault();
}
}

A partir du moment ou vous récupérez une instance, c’est que le NFC est supporté sur le device !

Pour être en capacité de publier un message, on utilise la méthode PublishMessage, à laquelle on précise un type de message et le contenu du message :

private long _messageId = 0;

protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (_proximityDevice != null)//NFC is supported
{
_messageId = _proximityDevice.PublishMessage("Windows.SampleNFC", "Hello dude, Windows Phone 8 Rocks !");
}

base.OnNavigatedTo(e);
}

A partir de là, l’application enverra le message à n’importe qu’elle autre application qui écoute ce type particulier de message, ici <em>Windows.SampleNFC</em>. Le type de message indique le protocole utilisé (avant le .) et le sous type de message. Lorsque l’on utilise la méthode PublishMessage, le protocole est obligatoirement <em>Windows</em>.

La méthode PublishMessage renvoie un id. Celui-ci est très important car votre application ne peut supprimer qu’un seul type de message à la fois. Aussi, avant de pouvoir publier un autre type de message, il faut stopper la publication, à l’aide de la méthode **StopPublishingMessage **:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
if (_proximityDevice != null)
{
_proximityDevice.StopPublishingMessage(_messageId);
}
base.OnNavigatedFrom(e);
}

Voilà concernant la partie publication.

Souscrire à un message NFC

La souscription à un message NFC est assez similaire, puisqu’elle utilise également un ProximityDevice, que l’on récupère avec la méthode statique GetDefault, comme dans la partie précédente. Ensuite, on utilise la méthode SubscribeForMessage en précisant le type de message qu’on vont recevoir :

protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (_proximityDevice != null)
{
_subscriptionId = _proximityDevice.SubscribeForMessage("Windows.SampleNFC", OnMessageReceived);
}
base.OnNavigatedTo(e);
}

Comme pour la publication, on obtient un id de souscription qu’il est nécessaire d’utiliser pour arrêter d’écouter ce type de message :

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
if (_proximityDevice != null)
{
_proximityDevice.StopSubscribingForMessage(_subscriptionId);
}
base.OnNavigatedFrom(e);
}

Et voilà le handler appelé lors de la réception d’un message :

private void OnMessageReceived(ProximityDevice sender, ProximityMessage message)
{
if (message != null)
{
Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(message.DataAsString);
});
}
}

Le tour est joué. Voilà ce que ça donne avec deux téléphones :

</param></embed> A+ Julien
read more

[Build 2012] Windows Phone 8 – tiles et notifications

Allez, on attaque la troisième session de la journée pour voir ce qu’il y a de nouveau du côté te des tiles et des notifications.

Au niveau des notifications, l’architecture reste similaire à celle de Windows Phone 7.5 avec l’envoie de requêtes http au service de push notifications Microsoft (MPNS). Quelques nouveautés quand même, puisqu’il n’y a plus de limite concernant le nombre d’applications qui peuvent utiliser les notifications sur le device (30 sous WP7).

Il y a également un nouveau type de notification push qui permet de réveiller une application VOIP.

Du côté des vignettes dynamique il y a aussi pas mal de nouveautés, puisqu’il est maintenant possible de créer des tuiles de trois tailles différentes : petite, moyenne, large. A ces trois tailles de vignettes, il est possible d’appliquer un modèle, parmi les suivants :

Flip tile

Ce modèle est similaire à celui existant sous phone 7.x. On retrouve l’image avant et arrière, le count, le titre, le contenu…

Cycle tile

Il s’agit d’un modele permettant de faire defiler plusieurs images, un peu à la manière de la vignette du hub photos.

Iconic tile

Ce modèle permet de générer des vignettes qui possèdent un count et un logo, mais en animant le count, comme la tuile Outlook, par exemple.

Côté local tiles APIs, la ShellTileSchedule peut mettre à jour TOUTES les propriétés de la vignette. Il est désormais possible de passer un payload xml pour alimenter les tiles data, plutôt que d’affecter toutes les propriétés à la main !

Il est également possible de s’intégrer avec l’écran de verrouillage du téléphone afin d’y ajouter des informations (logo, nombre et texte) identiques aux informations de la vignette principale, mais celle-ci ne doit pas obligatoirement être épinglée.

Les APIs sont toutes plus simple à utiliser les unes que les autres et beaucoup d’incohérences que l’on pouvait avoir ont disparues. Bref, ça poutre bien comme il faut !

Stay tuned 😉

Julien

read more

[Build 2012] Maps, géolocalisation et exécution en arrière plan.

Première session Windows Phone 8 de cette 3ème journée de //build/ 2012 (pas de keynote aujourd’hui!), on s’intéresse aux nouveautés concernant les maps, la géolocalisation et l’exécution en arrière plan !

image

Location Services APIs

Les APIs de géolocalisation ont été complètement repensées sous Windows Phone 8. On conserve l’ancienne API .NET avec le GeoCoordinateWatcher pour la compatibilité ascendante, mais une nouvelle API WinRT est disponible et beaucoup plus complète !

Côté WinRT, on retrouve une nouvelle classe, Geolocator pour localiser un utilisateur. Il y a plus de contrôle sur la précision souhaitée (en mètres) et il est notamment possible de récupérer la position de l’utilisateur sans la tracker en continue (Single Location Request), ce qui permet d’économiser la batterie de l’utilisateur. Comme beaucoup d’API WinRT, celle-ci est totalement asynchrone (async/await). On retrouve aussi la possibilité de contrôler la mise en cache et les timeout.

En terme de bonnes pratiques, il faut utiliser au maximum le Single Location Request, quand c’est possible, car celà permet vraiment de réduire la consommation de la batterie !

En bonus, un bout de code sur l’utilisation de l’API Geolocator :

image

###

Map Control et service de géolocalisation

Autre grosse nouveauté de la plateforme Windows Phone 8 côté cartes, l’utilisation des maps Nokia et des services de géolocalisation Nokia. On utilise un nouveau contrôle Maps qui permet notamment à l’utilisateur d’avoir ses cartes en mode offline pour ne plus consommer sa connexion de données et augmenter la fluidité ! Au passage, un nouveau launcher permet de proposer à l’utilisateur de télécharger une carte : MapsDownloader.

Le contrôle maps est capable d’afficher des cartes en 2D/3D, en vectoriel, ainsi que des itinéraires.

Avec cette carte, de nouveaux services arrivent pour effectuer directement des opérations de geocoding, géocoding inversé et de calcul d’itinéraire (il ne s’agit plus des services Bing, mais Nokia !)

Le BingMaps contrôle existe toujours pour la compatibilité des applications 7.x, mais il est déprécié !

L’utilisation du contrôle Maps et des services Nokia est gratuite, il faut juste associer son compte de développeur pour pouvoir récupérer un token.

Le maps toolkit extensions (http://phone.codeplex.com) permet d’avoir des fonctionnalités supplémentaires pour le contrôle Maps (pushpin etc..)

Géolocalisation en arrière plan

Sous Windows Phone 8, une application peut s’exécuter en arrière plan ET récupérer la position de l’utilisateur en continue (une seule application peut le faire). C’est uniquement possible pour les applications XAML (XAML, XAML+Direct3D, mais pas pur Direct3D).

En mode background, l’application n’a accès qu’à des ressources limitées et qu’à un sous ensemble des APIs :

image

Comme pour les background agent sous Windows Phone 7.5, l’utilisateur peux désactiver l’application dans les paramètres du téléphone.

L’application peut être notifiée (event) et notifier l’utilisateur lorsque la géolocalisation est désactivée au niveau du téléphone.

Au niveau du cycle de vie de l’application, on a un nouvel événement : RunningBackground (en plus de Launching, Deactivated, Activated et Close) qui permet de savoir que l’application s’exécute en arrière plan ! Ce nouvel event remplace le deactivated pour les applications de géolocalisation en arrière plan :

image

Fast Resume

Le fast resume est la capacité des applications Windows Phone 8 à reprendre là où elles étaient, même si l’utilisateur les relance depuis son écran d’accueil ou la liste des applications (contrairement à Windows Phone 7 ou l’application était totalement relancée!). Pour permettre à une application de faire du fast resume, il faut éditer le fichier manifest, au niveau de la définition de la DefaultTask (par défaut, le comportement est le même que sous Phone 7, Replace) :

image

Lorsque l’application est résumée, le mode de navigation dans la méthode OnNavigatedTo est à **Reset**, ce qui permet par exemple de vider la stack de navigation tout en conservant une ancienne instance de l’application (optimisation de la mémoire du téléphone et de la rapidité du chargement de l’application). Toutes les explications ici : http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj735579(v=vs.105).aspx

Conclusion

Beaucoup de nouveautés autour de la géolocalisation, avec le nouveau contrôle Maps de Noka, les APIs de Nokia pour le géocoding et surtout la possibilité d’avoir une application qui track la position de l’utilisateur en continue et en background !

Stay tuned Winking smile

Julien

read more

[Build 2012] Quoi de neuf dans l’update ASPNET Fall 2012

Le keynote de la deuxième journée était principalement consacrée à Windows Azure (vous pourrez le voir ou revoir ici, lorsqu’il sera dispo) mais quelques annonces assez sympa ont été faites autour d’asp.net / asp.net mvc et asp.net web api.

Toutes les nouveautés annoncées sont regroupées sous la forme d’une mise à jour ASP.NET Fall 2012 Update qu’il est possible d’installer depuis cette page.

image

Tooling

On retrouve quelques nouveautés en terme de publication (même expérience pour les web applications que pour les websites, selective publish qui permet de choisir les fichiers à publier…) et de nouveaux templates de projets : Facebook, Single Page Application et FixedDisplayModes package.

ASP.NET Web API OData

Il s’agit d’une extension à Web API qui permet de construire des services OData compliant (i.e. avec la possibilité d’appliquer des filtres directement dans l’URL). Cette fonctionnalité était déjà disponible via nuget en preview. Concrètement, c’est super simple à mettre en place, puisqu’il suffit d’exposer des IQueryable dans les ApiController et de précéder les actions qui doivent supporter OData par un attribut Queryable :

[Queryable]
public IQueryable<Post> Get()
{
return _context.Posts;
}

ASP.NET Web API Tracing

Il s’agit tout simplement de la mise en place par défaut de traces .NET pour les services ASP.NET Web API. On peut exploiter ces données de trace dans l’IntelliTrace.

###

ASP.NET Web API Help Page

Fonctionnalité assez sympatique, puisqu’elle permet très simplement de générer des pages d’aide à l’utilisation des services ASP.NET Web API.

Windows Azure Authentication

Il s’agit de la continuité d’une des annonces faites sur Azure lors du keynote : la possibilité de supporter dans une application ASP.NET de l’authentification via Windows Azure Active Directory ou Office 365.

SignalR

SignalR est un framework permettant de développer des interfaces temps réel en javascript, notamment. Il permet d’optimiser les communications avec le serveur pour connaître (par exemple) l’avancement de certaines tâche en faisant du long polling plutôt que de lancer n requêtes http par secondes. Il est désormais supporté de base depuis cette mise à jour.

###

Voilà pour ce que l’on pouvait dire concernant les nouveautés de cette update ASP.NET. Plein de nouvelles choses sympa en perspective ! Au passage, les démos ont été faites avec une preview d’Entity Framework 6 qui supporte désormais le développement asynchrone basé sur les Task et les mots-clés async/await !! Cette preview est disponible sur nuget : http://nuget.org/packages/EntityFramework/6.0.0-alpha1

Stay tuned Winking smile

Julien

read more

[Build 2012] Développement d’applications connectées sous Windows Phone 8

Windows Phone 8 apporte un certain nombre d’APIs permettant de développer des applications connectées : Socket, NFC, Bluetooth…

image

Dans cette session, Tim Laverty, PM Windows Phone nous présente toutes ces nouveautés !

Les objectifs de la session

  • Avoir une bonne vue d’ensemble de toute la stack networking de Windows Phone 8
  • Voir quel sont les éléments qui diffèrent entre Phone 7, Phone 8 et Win 8 (et donc ceux qui se rapprochent, pour pouvoir réutiliser un max de code)
  • Découvrir les APIs et leur prise en main

Les APIs de networking

  • APIs .NET pour la manipulation des sockets  dans System.Net.Sockets
  • APIs WinRT pour la manipulation des sockets dans Windows.Networking.Sockets
  • APIs WinRT pour le networking de proximité (NFC / Bluetooth) dans Windows.Networking.Proximity
  • APIs native pour la manipuation de socket (Winsock api family)

image

Communication via Bluetooth

  • Couvre des scénarii de communication App to App et App to Device
  • Permet d’ouvrir un socket WinRT (StreamSocket)
  • Fonctionne dans un rayon de 0 à 100m

Communication NFC

  • Couvre également des scénarii de communication App to App et App to Device, mais pour des volumes de données réduits (bande passant ~424 kbit/s)
  • Fonctionne dans un rayon de 2 à 4 cm
  • Il est possible d’associer le contenu NFC à une application du téléphone : je scan un tag NFC, ça ouvre mon application (on utilise une extension de protocole dans le manifeste de l’application)
  • Il est également possible d’envoyer de la données dans un tag NFC (pour l’associer avec votre app, en lui précisant le protocole à utiliser)

Sockets

Concernant les sockets, on peut donc utiliser plusieurs API : .NET, WinRT ou native. Dans tous les cas, il est possible de faire aussi bien du TCP que de l’UDP.

Concrètement, à partir du moment ou il faut mettre en place des stratégies de code sharing avec les applications Windows Store, il faut partir sur des sockets WinRT, les APIs .NET et native n’étant pas compatibles avec les Windows Store Apps. Les API .NET sont là pour du code portable sous Windows 8 (pas WinRT) et les API natives si vous possédez du code existant utilisant Winsock.

Stay tuned Winking smile

Julien

read more