Classificação é um processo importante no desenvolvimento de apps. Utilizadores terão preferência por uma app com (boa) classificação. Este artigo tem como objetivo demonstrar como, em apps desenvolvidas em C# para Windows 8 e Windows Phone 8, sugerir ao utilizador que classifique a app e envie o seu feedback após um dado número de utilizações.
O método consiste em gravar o número de vezes que o utilizador abre a aplicação, e, à quinta vez, sugerir ao utilizador que classifique a app. O código está desenvolvido para poder ser usado numa app universal1, mas poderá também ser utilizado em aplicações individuais.
Namespaces:
using System; // Uso Uri Email using System.Threading.Tasks; // Funções Assíncronas using Windows.System; // Launcher para abertura Store using Windows.ApplicationModel.Store; // App ID using Windows.UI.Popups; // Caixas Mensagem
Iremos usar as seguintes variáveis:
- Chaves que irão guardar informação do contador de aberturas e estado da classificação:
public static string chaveContadorAberturas = "CLASSIFIQUE_APP_CONTADOR_ABERTURAS"; public static string chaveClassificada = "CLASSIFIQUE_APP_CLASSIFICADA";
- Variáveis que irão conter valor lidos e valores a serem gravados:
public static int contadorAberturas = 0; public static bool classificada = false;
- Chaves que irão guardar informação do contador de aberturas e estado da classificação:
Para review, iremos usar uma função:
public async static void AppReview() { }
Começamos por verificar nas definições da app se foi classificada, usando uma função GetSetting
:
classificada = GetSetting<bool>(chaveClassificada, false);
Função GetSetting
:
public static T GetSetting<T>(string key, T defaultValue) { if (Windows.Storage.ApplicationData.Current.LocalSettings.Values.ContainsKey(key)) { return (T)Windows.Storage.ApplicationData.Current.LocalSettings.Values[key]; } else { return defaultValue; } }
Usamos o Windows.Storage.ApplicationData
para obter valores previamente guardados nas definições da app. Se a chave não existir, no caso de a app ser aberta pela primeira vez, devolve o valor por defeito, que deve ser introduzido na chamada da função. No caso da variável classificada
, o valor por defeito será false
.
Após leitura do valor, iremos verificar se a app foi classificada:
if (!classificada) { }
Se a app não tiver sido classificada, iremos ler contador aberturas:
contadorAberturas = GetSetting<int>(chaveContadorAberturas, 0);
Incrementamos a abertura atual:
contadorAberturas ++;
Se a app tiver sido aberta 5 vezes2, chamamos função review
:
if (contadorAberturas == 5) { await Review(); }
Por fim, guardamos o novo número de aberturas e estado da classificação, usando a função StoreSetting
s, similar à função GetSetting
s, mas usada para gravar definições:
StoreSetting(chaveContadorAberturas, contadorAberturas); StoreSetting(chaveClassificada, classificada);
Função StoreSetting
:
public static void StoreSetting(string key, object value) { Windows.Storage.ApplicationData.Current.LocalSettings.Values[key] = value; }
Função AppReview
completa:
public async static void AppReview() { //Variáveis que irão conter valor lidos e valores a serem gravados classificada = GetSetting<bool>(chaveClassificada, false); if (!classificada) { contadorAberturas = GetSetting<int>(chaveContadorAberturas, 0); //Valor por defeito 0, se não tiver nenhum valor (caso app abertura primeira vez) contadorAberturas ++; // Acrescenta ao contador abertura atual if (contadorAberturas == 5) { await Review(); } StoreSetting(chaveContadorAberturas, contadorAberturas); StoreSetting(chaveClassificada, classificada); } }
Função Review
:
public static async Task<bool> Review() { classificada = true; var messageDialog = new MessageDialog("Testou a App 5 vezes. Gostaria de a classificar?"); messageDialog.Commands.Add(new UICommand("Sim")); messageDialog.Commands.Add(new UICommand("Não")); var messageResult = await messageDialog.ShowAsync(); if (messageResult.Label == "Sim") { #if WINDOWS_PHONE_APP await Launcher.LaunchUriAsync(new Uri("ms-windows-store:reviewapp?appid=" + CurrentApp.AppId.ToString())); #else await Launcher.LaunchUriAsync(new Uri("ms-windows-store:review?PFN=" + CurrentApp.AppId.ToString())); #endif } else { var messageDialogFeedback = new MessageDialog("Gostaria de nos dar o seu feedback sobre a App?"); messageDialogFeedback.Commands.Add(new UICommand("Sim")); messageDialogFeedback.Commands.Add(new UICommand("Não ")); var messageResultFeedback = await messageDialogFeedback.ShowAsync(); if (messageResultFeedback.Label == "Sim") { var mailTo = new Uri("mailto:?to=email@domain.com&subject=Classifique a App - App Feedback&body=Escreva aqui o seu feedback"); await Windows.System.Launcher.LaunchUriAsync(mailTo); } } return true; }
Na função Review
, apresentamos uma mensagem para sugerir classificação.
Caso o utilizador queria classificar a app, obtemos o ID da nossa app3, usando CurrentApp.AppId
, e redirecionamos o utilizador para a página da app na Windows Store, usando o protocolo Review4.
Caso o utilizador não queira classificar a app, convidamos a dar o seu feedback.
Caso o utilizador queira dar o seu feedback, redirecionamos para um novo email (que será aberto no editor de email predefinido), preenchendo “De:” com o email suporte, e “Assunto”.
Agora basta fazer uma chamada à função AppReview
no LoadState
da app. Como inseri a função no ficheiro na classe comum App
, estou a chamar a função da seguinte forma:
App.AppReview();
Se usar numa app única, basta chamar a função, não universal:
AppReview();
Notas
- Apps desenvolvidas com target para Windows 8 e Windows Phone 8, com código partilhado. Mais informações: http://msdn.microsoft.com/en-us/library/windows/apps/dn609832.aspx
- Novas apps universais para Windows 8.1 e Windows Phone 8.1 usam
Windows.Storage.ApplicationData
. Para versões anteriores do Windows Phone, é usada funçãoIsolatedStorageSettings
. - O ID de uma app é atribuído durante publicação na Store.
- Mais detalhes sobre protocolos em: http://msdn.microsoft.com/en-us/library/windows/apps/hh974767.aspx