Статьи

EvenTiles от начала до конца — часть 16

В предыдущем выпуске этой серии о том, как разрабатывать приложение для Windows Phone с нуля, вы узнали, как создать пользовательский интерфейс более или менее типичной страницы About с помощью Expression Blend. Страница About не содержит ничего необычного, только несколько текстовых блоков и несколько кнопок. Прямо сейчас мы готовы добавить некоторые функции на страницу «О нас», чтобы:

  • Показать версию приложения в TextBlock
  • Отправить электронное письмо с замечаниями и / или предложениями издателю приложения
  • Оставить отзыв на заявку
  • Проверьте Marketplace для большего количества приложений, доступных от того же издателя

screen1

Само по себе это все небольшие, относительно простые и частично не связанные действия. Однако последние 3 пункта, хотя и разные, имеют что-то общее. Для достижения желаемого результата мы будем использовать функциональные возможности, доступные в Windows Phone, но за пределами нашего приложения. Чтобы использовать эту конкретную функциональность, мы будем использовать различные средства запуска Windows Phone., Вы можете думать о Launcher как об отдельном приложении, которое может использоваться нашими приложениями, чтобы пользователи могли выполнять некоторые общие задачи единообразным и согласованным образом. Тот факт, что Launcher запускает отдельное встроенное приложение, имеет некоторые последствия для нашего приложения, которое использует Launcher. Когда запущенное нами приложение станет активным, наше приложение будет перемещено в фоновый режим. Это означает, что наше приложение будет временно приостановлено и даже захоронено в ситуациях с нехваткой памяти / ресурсов. Поскольку мы уже позаботились о том, чтобы правильно перенести наше приложение в фоновый режим ( см. Эпизод 7 о Tombstoning ), это не так уж и сложно, но хорошо осознавать, что происходит под прикрытием платформы Windows Phone.

Примечание. Обычно средства запуска упоминаются вместе с программами выбора, поскольку они предоставляют схожую функциональность и работают более или менее одинаково. Большая разница между ними заключается в том, что Chooser (как следует из слова) способен выбирать некоторые данные (например, изображение) и возвращать выбранный элемент в наше приложение. Выбор будет рассмотрен в следующем эпизоде ​​EvenTiles.

Как всегда, имеет смысл видеть вещи в действии и смотреть на реальный код. Вот почему, помимо этой серии записей в блоге, есть также сопровождающие видео и примеры кода, доступные для скачивания.

Получение номера версии приложения

Первая цель, которую мы хотим достичь, — это получить номер версии нашего приложения и отобразить его на странице «О программе». Поскольку наше приложение хранит свой собственный номер версии в своем файле манифеста , мы хотим получить его оттуда.

ПРИМЕЧАНИЕ. Номер версии также должен быть указан при отправке приложения на Windows Phone Marketplace. Согласно документации, этот номер версии должен совпадать с номером версии вашего приложения, но сохранение его в файле манифеста — это отдельное действие. Существует еще один номер версии, который хранится в файле AssemblyInfo.cs приложения и может изменяться через свойства проекта. В EvenTiles мы игнорируем последнее и сразу получаем номер версии из файла манифеста приложения.

Номера версий приложений состоят из основных, вспомогательных компонентов, компонентов сборки и редакции. Чтобы соответствовать номеру версии, указанному на Windows Phone Marketplace, мы хотим отображать только основные и второстепенные части приложения. Поскольку файл манифеста приложения — это просто еще один XML-файл, мы можем легко извлечь из него номер версии.

Информация о версии в файле манифеста

<App xmlns=""
     ProductID="{883385e6-52e5-4835-83db-8a17499b5767}"
     Title="EvenTiles"
     RuntimeType="Silverlight"
     Version="1.0.0.0"
     Genre="apps.normal"
     Author="Maarten Struys"
     Description="Sample description"
     Publisher="DotNETForDevices">

To retrieve the version number and to display it in a Textblock inside the About Page, we can just load the XML from the manifest file and find the value of the version attribute of the App element. The reason why this works is because the application manifest file (WMAppManifest.xml) is deployed to the phone as part of the XAP file.

Get Version from Manifest File

private string GetVersionNumber()
{
    string[] version = XDocument.Load("WMAppManifest.xml").Root.Element("App").Attribute("Version").Value.Split('.');
 
    StringBuilder sb = new StringBuilder(version[0]);
    sb.Append(".");
    sb.Append(version[1]);
    versionNumber = sb.ToString();
 
    return versionNumber;
}
 
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    tbVersion.Text = GetVersionNumber();
}

Sending an email

A nice feature inside a Windows Phone application is the possibility for end users to get in touch with you through email. Making this as easy as possible for end users might result in you getting some useful feedback about your application and might also increase the user’s satisfaction with your application, which in turn might lead to better and more reviews. To send an email programmatically to a fixed email address is very simple. You simply can make use of the EmailComposeTask and even pre-populate information in the email to make it easier for the end user to send out an email. The following code shows how to send an email programmatically:

Using the EmailCompose Task

private void btnEmail_Click(object sender, RoutedEventArgs e)
{
    StringBuilder sb = new StringBuilder("Feedback / Support for EvenTiles ");
    sb.Append(versionNumber);
 
    var emailComposeTask = new EmailComposeTask
    {
        To = "[email protected]",
        Subject = sb.ToString()
    };
    emailComposeTask.Show();
}

 

NOTE: In order to test this functionality, you have to use a physical device. The Windows Phone Emulator will throw an exception when using the email compose task.

Submitting a review

If you know how to use one Windows Phone Launcher you basically know how to use them all. Since we already saw that sending an email is a very simple operation (creating a new object, setting some properties and calling the Show method on the object), submitting a review should not be difficult. The following code shows how to allow your users to submit a review by using the MarketplaceReviewTask Launcher:

Submitting a Review

private void btnReview_Click(object sender, RoutedEventArgs e)
{
    MarketplaceReviewTask reviewTask = new MarketplaceReviewTask();
    reviewTask.Show();
}

 

screen2

Of course, this code can be extended, for instance by storing in the application settings if a review has already been submitted. If so, we can for instance remove the button to submit a review from the application. We can also verify if we currently have a data connection in order to submit a review. All this functionality is omitted in this sample code.

Checking for more applications

Using the same approach as described before, we can also allow the user to look for more applications that we already published on the Windows Phone Marketplace. This can be achieved by using the MarketplaceSearchTask, again in a similar way:

Finding Apps on Marketplace

private void btnMore_Click(object sender, RoutedEventArgs e)
{
    var searchTask = new MarketplaceSearchTask
    {
        ContentType = MarketplaceContentType.Applications,
        SearchTerms = "DotNETForDevices"
    };
    searchTask.Show();
}

The MarketplaceSearchTask is a very nice marketing instrument because you can guide users of your application to other Windows Phone applications you have published.

The following video shows how to create the functionality we described in this episode of EvenTiles. It also shows two of the described Launchers in action, one running in the emulator, one on a physical device.

To be able to experiment with this working implementation of EvenTiles, especially to understand how the application interacts with the PeriodicTask through a file in IsolatedStorage, the sample code is available for dowload here. In the next episode of EvenTiles we will talk about implementing Trial Mode in your application to allow users to try the application before optionally buying it.

EvenTilesIf you want to see EvenTiles already in action on your Windows Phone, you can also install the latest free version from Marketplace. Remember that this application is not meant to be extremely useful, although it contains similar functionality that “serious” applications have. Just go ahead and get your free copy of EvenTiles from Marketplace at this location: http://www.windowsphone.com/en-US/search?q=EvenTiles (or search on your phone for EvenTiles in the Marketplace application).