trucs et astuces pour rendre votre application windows phone 8 plus visible

Post on 28-Jan-2018

1.051 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Alex Danvy

Rudy Huyn

WINDOWS PHONE 8rendre votre application plus visible

Alex DANVY

Évangéliste Windows Phone

Microsoft France

alex.danvy@microsoft.com

@danvy

Rudy HUYN

Responsable technique pour Orange Business Services

MVP Windows Phone Development

rudyhuyn@gmail.com

@rudyhuyn

http://www.rudyhuyn.com

Faciliter le téléchargement

Encourager l’utilisation

Tuiles dynamiques

LES TYPES DE TUILES

Flip

Iconic

Cycle

Permet une mise en avant :

SUR LE TELEPHONE DE

L’UTILISATEUR

SUR LE WINDOWS PHONE

STORE

WINDOWS PHONE 7.8 ?

OUI !

*Ce

slid

ee

st sp

on

so

risé

pa

r le

s m

éd

ica

me

nts

Do

lipra

ne

ALTERNATIVE ?

METTRE A JOUR SA TUILE ?

Solution : background agent

Attention !

ALTERNATIVE

Mise à jour programmée

var scheduler = new ShellTileSchedule(maintile){

Recurrence = UpdateRecurrence.Onetime,

StartTime = date,

MaxUpdateCount = 1,

RemoteImageUri = new Uri("http://www.monsite.com/generateTile.php");

};

Ecran de verrouillage

Différentes mises en avant :

IMAGE DE FOND

ZONE TEXTUELLE

ICONE DE NOTIFICATIONS

Icône de notification :

JUSQU’À 5 APPLICATIONS

AJOUT EXPLICITE

COMPTEUR LIÉ A LA TUILE

PRINCIPALE

Zone textuelle

UNE SEULE APPLICATION

CHOIX EXPLICITE

LIÉE A LA TUILE PRINCIPALE

PAS TUILE CYCLIQUE

INCIDENCE SUR LA TUILE

Contraintes fortes sur le

design

Alternative : Proposer une

tuile secondaire

Image de fond

RESPECTER LES

DEFINITIONS

OBLIGATOIREMENT UNE

IMAGE LOCALE

ATTENTION A L’OCCUPATION

DE L’ESPACE

DEMO

Locke Screen

if

(!Windows.Phone.System.UserProfile.LockScreenManager.IsPro

videdByCurrentApplication)

{

Windows.Phone.System.UserProfile.LockScreenManager.

RequestAccessAsync();

}

LockScreen.SetImageUri(new System.Uri("ms-

appdata:///local/" + filename, UriKind.Absolute));

Windows.System.Launcher.LaunchUriAsync(ne

w Uri("ms-settings-lock:"));

Hub musique + vidéo

Mise en avant de l’application

<App xmlns="" ProductID=""

Title="WindowsPhoneApplication"

Genre="NormalApp" HubType="1">

Lecture en cours

var media = new MediaHistoryItem(){

ImageStream = stream;

Source = "";

Title = "Techdays Radio";

};

MediaHistory.Instance.NowPlaying = media;

Historique + nouveautés

MediaHistory.Instance.WriteRecentPlay(media);

MediaHistory.Instance.WriteAcquiredItem(media);

Photo !

Intégration au hub

<Extension ExtensionName="Photos_Extra_Hub"

ConsumerID="{5B04B775-356B-4AA0-AAF8-

6491FFEA5632}"

TaskID="_default" />

Intégration aux menus

<Capability Name="ID_CAP_MEDIALIB_PHOTO"

/>

<Extension ExtensionName="Photos_Extra_Share"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}"

TaskID="_default" />

<Extension ExtensionName="Photos_Extra_Image_Editor"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}"

TaskID="_default" />

<Extension ExtensionName="Photos_Extra_Viewer"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}"

TaskID="_default" />

RICH MEDIA

NOUVEAUTÉ WINDOWS PHONE 8(UNE PRESQUE)

Principe

Ajoute un indicateur : « capturé par XYZ»

Ajoute un menu « ouvrir dans XYZ »

<Extension

ExtensionName="Photos_Rich_Media_Edit"

ConsumerID="{5B04B775-356B-4AA0-AAF8-

6491FFEA5632}"

TaskID="_default" />

DEMO

Super Courgette*

* Il va faire noir

POURQUOI PRESQUE ?

Un nouveau service pour l’utilisateur

Mais aucune nouvelle API

SAUVEGARDER

Vous générez une image

Vous la sauvegardez dans le hub

photo

Vous récupérez le chemin de l’image

Vous stockez dans votre isolated

storage l’ensemble des informations

qui ont permis la génération de l’image

+ le chemin

MODIFIER

Récupérez l’image à partir du token

Retrouvez le chemin : GetPath()

Récupérez les données

correspondant au chemin

Affichez l’image

Duplication et non édition

AUTO UPLOADIL N’Y A PAS QUE SKYDRIVE DANS LA VIE

PRINCIPE ?

Mise en avant

<Extension ExtensionName="Photos_Auto_Upload"

ConsumerID="{5B04B775-356B-4AA0-AAF8-

6491FFEA5632}" TaskID="_default" />

• Créer un agent

• Lancer l’agent en tant que ressource intensive

• Explorer les albums du téléphone

• Identifier les nouvelles photos

• Uploader les photos vers un serveur

DEMO

AUTO UPLOADR.

foreach (PictureAlbum album in new

MediaLibrary().RootPictureAlbum.Albums)

{

if (album.Name == "Screenshots")

return album;

}

return null;

var pictures=album.Pictures.Where(p => p.Date >

lastuploadedPicture).OrderBy(p=>p.Date).ToList();

foreach(var picture in pictures)

{

var res= await UploadPicture(picture);

if(res==SUCCESS)

{

SaveLastUploadedPictureDate(picture.Date);

}

}

LES LENTILLESLESLENSES

DEMO

LES LENSES

SEARCH EXTENSIBILITY

Principe

Principe

<Extensions>

<Extension ExtensionName="Bing_Products_Computing"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"

TaskID="_default" ExtraFile="Extensions\\Extras.xml" />

<Extension ExtensionName="Bing_Products_Electronics"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"

TaskID="_default" ExtraFile="Extensions\\Extras.xml" />

<Extension ExtensionName="Bing_Products_Software"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"

TaskID="_default" ExtraFile="Extensions\\Extras.xml" />

</Extensions>

<?xml version="1.0" encoding="utf-8" ?>

<ExtrasInfo>

<AppTitle>

<default></default>

<fr-FR>LoPrestiAimeur</fr-FR>

</AppTitle>

<Consumer ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}">

<ExtensionInfo>

<Extensions>

<ExtensionName>Bing_Products_Computing</ExtensionName>

<ExtensionName>Bing_Products_Electronics</ExtensionName>

</Extensions>

<CaptionString>

<default>Research computer product details</default>

<fr-FR>Recherche retraits d’ordinateurs</fr-FR>

</CaptionString>

</ExtensionInfo>

</Consumer>

</ExtrasInfo>

<Extensions>

<Extension ExtensionName="Bing_Products_Computing"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"

TaskID="_default" ExtraFile="Extensions\\Extras.xml" />

<Extension ExtensionName="Bing_Products_Electronics"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"

TaskID="_default" ExtraFile="Extensions\\Extras.xml" />

<Extension ExtensionName="Bing_Products_Software"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"

TaskID="_default" ExtraFile="Extensions\\Extras.xml" />

</Extensions>

<Extensions>

<Extension ExtensionName="Bing_Products_Computing"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"

TaskID="_default" />

<Extension ExtensionName="Bing_Products_Electronics"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"

TaskID="_default" />

<Extension ExtensionName="Bing_Products_Software"

ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"

TaskID="_default" />

</Extensions>

/SearchExtras?MovieName=The+Trey+Research+C

ompany&ReleaseDate=129836124000000000

&Category=Bing_Movies

COMMANDES VOCALES

Principe

Permet de lancer une

application grâce à la

reconnaissance vocale

Mise en avant

Mise en avant

VOICE COMMAND vs SPEECH-TO-TEXT

• Uniquement pour lancer une

application

• Reconnaissance déterministe

DEMO

SUDOKAL

ID_CAP_SPEECH_RECOGNITION

ID_CAP_MICROPHONE

ID_CAP_NETWORKING

Créer fichier VCD

<VoiceCommands

xmlns="http://schemas.microsoft.com/voicecommands/1.0">

<CommandSet xml:lang="fr-FR" Name="French">

<CommandPrefix>TVShow</CommandPrefix>

<Example> Calendrier, Ouvre Lost </Example>

<Command Name="OpenTVShow">

<Example> ouvre Lost, Desperate Housewives, etc... </Example>

<ListenFor> [ouvre] {TVShows} </ListenFor>

<ListenFor> ouvrir {TVShows} </ListenFor>

<ListenFor> lance {TVShows} </ListenFor>

<Feedback> Ouverture de la série... </Feedback>

<Navigate Target="/Pages/TVShowPage.xaml"/>

</Command>

VoiceCommandService.InstallCommandSetsFromFileAsync

(

new Uri("ms-appx:///command.xml"));

NavigationContext.QueryString["number"]

NavigationContext.QueryString["voiceCommandName"];

WALLET

CONTACT STORE

<Capability Name="ID_CAP_CONTACTS" />

Créer store

store = await

ContactStore.CreateOrOpenAsync(ContactStoreSys

temAccessMode.ReadOnly, ContactStoreApplication

AccessMode.ReadOnly);

var contact = new StoredContact(store);

var props=await contact.GetPropertiesAsync();

props[KnownContactProperties.Email] =

"longcat@miaou.net";

props[KnownContactProperties.Telephone] = "09 99 99 99

99";

props[KnownContactProperties.Birthdate] = new

DateTimeOffset(new DateTime(2012, 12, 25));

Ajouter image

await

contact.SetDisplayPictureAsync(stream.AsInputStream());

await contact.SaveAsync();

Extra properties

var extprops = await contact.GetExtendedPropertiesAsync();

extprops["PictureETAG"] = "AB654654E545D5F";

DEMO

LONG CONTACT

Comment mettre en avant mon application ?

var props = await contact.GetPropertiesAsync();

props[KnownContactProperties.Notes] = "contact créé par

l'application LongContact";

props[KnownContactProperties.Url] =

"miaou://www.longcontact.com/foot";

EXTENSION DE

PROTOCOLE

<Extensions>

<Protocol Name="miaou" TaskID="_default"

NavUriFragment="uri=%s" />

</Extensions>

/Protocol?uri=%s

public class MyUriMapper : UriMapperBase

{

public override Uri MapUri(Uri uri)

{

if (uri.OriginalString.StartsWith("/Protocol?uri="))

{

var exturi = HttpUtility.UrlDecode(uri.OriginalString.Substring(14));

if (exturi == "miaou://www.longcontact.com/foot")

return new Uri("/FootPage.xaml", UriKind.Relative);

}

return uri;

}

}

QUESTIONS ?

http://www.facebook.com/groups/devwp7/

top related