Блог Сергея Байдачного

Мой блог о технологиях

Posts Tagged ‘Windows Phone 7

Windows Phone 7: Разрабатываем приложение с использованием Push Notification (часть 1, веб-роль)

4 комментария

Этим постом я начинаю серию из 4-х статей, посвященных разработке решения для Windows Phone 7 с использованием Push Notification. Описанное тут решение мы разрабатывали для Украинского Медиа Холдинга. Между тем оно является типовым, хотя информацию по некоторым шагам найти достаточно сложно.

Начнем с описания задачи: партнер реализовал специальную службу, которая позволяет пользователям мобильных телефонов получать нотификацию о ходе прохождения футбольных игр, а также получать расписание ближайших игр, интересных для украинского зрителя. Доступ к службе осуществляется на основе платной подписки. Оплата взымается, в основном, за использование гейтов мобильных операторов для рассылки СМС сообщений.

Поскольку Windows Phone 7 обладает такой замечательной вещью, как Push Notification, то было принято решение, реализовать аналогичный функционал для устройств WP 7 на бесплатной основе. Ведь для использования Push Notification мобильный оператор не используется, а уведомления доставляются с помощью специальной Push Notification службы, которой управляет Microsoft.

Идея очень простая: клиент, используя приложение партнера, подписывается на службу доставки мгновенных сообщений. При этом клиент передает партнеру уникальный URL, позволяющий партнеру связаться с Notification службой и передать сообщение на конкретный телефон. Партнер, генерируя новое сообщение, опрашивает свою базу адресов, и по каждому из адресов отправляет сообщение в Push Notification службу, которая на основании уникального адреса нотифицирует конкретный телефон, передавая ему сообщение.

Таким образом, при разработке этого решения, нам необходимо следующие три компонента:

· Служба, которая позволяет получить новое сообщение от оператора и поставить его в очередь;

· Модуль (служба), который обрабатывает сообщения в очереди;

· Клиент для Windows Phone 7, позволяющий пользователю подписаться на службу и настроить параметры уведомлений;

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

Учитывая проблемы выше и список основных компонентов, было принято решение использовать технологию Windows Azure для создания подобного решения. В случае использования Windows Azure, первый компонент можно было бы реализовать в виде обычных WCF служб, для реализации очереди использовать соответствующий тип хранилища в Storage службе, а для компонента обработки элементов очереди можно использовать Рабочую роль. Последняя предназначена для работы в фоне и может регулярно опрашивать очередь на наличие новых элементов. Кроме того, Рабочая роль очень хорошо масштабируется.

Таким образом, 3 из 4 статей будут иметь достаточно опосредованное отношение к Windows Phone, а скорее относятся к Windows AzureJ

Начнем работу. На первом шаге создадим проект в Visual Studio на базе шаблона Windows Azure

image

В создаваемое решение добавим две роли, это WCF Service Web Role и Worker Role. Тут Вашим ролям можно дать более осмысленные названия (я не буду).

image

Про Рабочую роль сейчас забудем и сосредоточимся на реализации WCF службы.

Опишем интерфейс нашей службы следующим образом:

   1:      [ServiceContract]
   2:      public interface INotification
   3:      {
   4:          [OperationContract]
   5:          void SubscribePhoneToService(Guid guid, string pushServiceUri);
   6:   
   7:          [OperationContract]
   8:          SMSMessage[] RefreshData();
   9:   
  10:          [OperationContract]
  11:          void NewSMSMessage(string sms, string login, string password);
  12:      }
  13:   
  14:   
  15:      [DataContract]
  16:      public class SMSMessage
  17:      {
  18:          string date;
  19:          string message;
  20:   
  21:          [DataMember]
  22:          public string DateTimeValue
  23:          {
  24:              get { return date; }
  25:              set { date = value; }
  26:          }
  27:   
  28:          [DataMember]
  29:          public string MessageValue
  30:          {
  31:              get { return message; }
  32:              set { message = value; }
  33:          }
  34:      }

 

Тут описан класс SMSMessage, с помощью которого мы будем передавать данные между службой и телефонами, а также интерфейс INotification, описывающий три метода интерфейса службы. Тут определены следующие методы:

· SubscribePhoneToService – этот метод позволяет подписать телефон на сообщения, принимая уникальный ID телефона и адрес службы уведомлений для отправки сообщений данному устройству. Обратите внимание, что сообщения высылаются каждому подписанному телефону отдельно. Это дает возможность кастомизировать текст сообщения и фильтры, в зависимости от настроек. В данном случае какой-то специальной настройки для конкретного телефона мы не поддерживаем, поэтому метод принимает всего два параметра;

· RefreshData – этот метод необходим, если пользователь запустил приложение и хочет посмотреть последние сообщения;

· NewSMSMessage – этот метод инициируется оператором и служит для передачи сообщения в очередь. Поскольку мы не хотим, чтобы все желающие отправляли сообщение в очередь, метод кроме сообщения принимает логин и пароль оператора, используя примитивный способ аутентификации.

Данный интерфейс можно модифицировать, позволив пользователю кешировать часть сообщений на телефоне и передавать дату последнего доступного у него сообщения, чтобы обновлять интерфейс только новыми сообщениями. Сюда можно добавить языковую поддержку и другие параметры. Но сейчас это не столь важно.

Следующим шагом мы должны перейти к реализации интерфейса. Но это делать еще рано, так как нам необходимо еще хранилище для наших подписок и сообщений, а также где-то определить параметры приложения, такие как строка соединения с базой, логин и пароль оператора и т. д.

Первым делом создадим хранилище сообщений и подписок. Я решил использовать SQL Azure, так как меня больше устраивало реляционное хранилище. Данных тут не много, зато можно делать сложные выборки.

Для этого воспользуемся панелью управления Windows Azure и создадим новую базу

image

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

Server=tcp:imc39784zf.database.windows.net,1433;Database=UkraineTest;User ID=sbaidachni@imc39784zf;Password=myPassword;Trusted_Connection=False;Encrypt=True;

Далее нажмите кнопку Manage и создайте две таблицы, позволяющие хранить подписки и сообщения.

image

image

Помните, чтобы тестировать подключения к базам в SQL Azure, вы должны через панель управления выполнить настройки firewall, которые позволят подключаться с Вашей девелоперской машины к базе.

Поскольку нам нужен также и Storage Service, то создадим и его. Для этого также воспользуемся панелью управления.

image

Подготовительная работа завершена.

Теперь вернемся в Visual Studio и приступим к написанию кода. Первым делом внесем изменения в конфигурацию решения.

Обратите внимание, что параметры приложения (строка соединения, логин, доступ к Storage аккаунту) нужно прописывать в csdef и cscfg файлах. Если Вы внесете настройки в Web.Config (как Вы привыкли делать в обычных веб-приложениях), то менять их, в процессе работы, у Вас не выйдет.

Поэтому перейдите к настройкам нашей веб-роли и введите необходимые параметры именно там.

image

Тут мы ввели Логин, Пароль, строку соединения к базе, а также строку соединения к Storage Account. Последняя может быть описана с помощью специальной панели:

image

Тут Вы указываете имя созданного Storage аккаунта и ключ, который можно взять в панели управления Windows Azure. Не забудьте поменять HTTPS на HTTP. Наши сообщения не представляют особого интереса, поэтому лишняя безопасность тут не требуется.

Последний параметры NRecords определяет, сколько сообщений мы хотим возвращать на телефон. Мы могли бы отдать эту настройку и пользователю, но я все равно хочу ограничить их количество сверху.

А теперь приступаем к реализации кода.

Первый метод, позволяющий подписаться на сообщения, будет выглядеть следующим образом:

   1:  public void SubscribePhoneToService(Guid guid, string pushServiceUri)
   2:  {
   3:      SqlConnection conn = new SqlConnection(RoleEnvironment.GetConfigurationSettingValue("DatabaseConnection"));
   4:      SqlCommand comm = new SqlCommand("select count(*) from PhoneTable where PhoneID=@par1", conn);
   5:   
   6:      comm.Parameters.Add(new SqlParameter("par1", guid.ToString()));
   7:   
   8:      conn.Open();
   9:   
  10:      int res = (int)comm.ExecuteScalar();
  11:   
  12:      if (res > 0)
  13:      {
  14:          SqlCommand comm1 = new SqlCommand("update phonetable set PhoneUrl=@par2 where PhoneID=@par1", conn);
  15:          comm1.Parameters.Add(new SqlParameter("par1", guid.ToString()));
  16:          comm1.Parameters.Add(new SqlParameter("par2", pushServiceUri));
  17:          comm1.ExecuteNonQuery();
  18:      }
  19:      else
  20:      {
  21:          SqlCommand comm1 = new SqlCommand("insert phonetable (PhoneID, PhoneUrl) values (@par1, @par2)", conn);
  22:          comm1.Parameters.Add(new SqlParameter("par1", guid.ToString()));
  23:          comm1.Parameters.Add(new SqlParameter("par2", pushServiceUri));
  24:          comm1.ExecuteNonQuery();
  25:      }
  26:   
  27:      conn.Close();
  28:      conn.Dispose();
  29:  }

 

Фактически, мы связываемся с базой, чтобы проверить наличие устройства. Если устройства нет, то мы вносим его URL в базу, если оно есть, то обновляем URL (он может измениться). Интерес представляет класс RoleEnvironment, позволяющий получить доступ к настройкам роли.

Второй метод, RefreshData, возвращает последние N сообщений из базы. Тут лучше использовать LINQ, чтобы уменьшить количество строк кода, но я сейчас не буду усложнять код технологиями.

   1:  SqlConnection conn = new SqlConnection(RoleEnvironment.GetConfigurationSettingValue("DatabaseConnection"));
   2:  string n = RoleEnvironment.GetConfigurationSettingValue("NRecords");
   3:   
   4:  SqlCommand comm = new SqlCommand("select TOP (" + n + ") * from messagetable order by messagedate desc", conn);
   5:   
   6:  conn.Open();
   7:   
   8:  SqlDataReader res = comm.ExecuteReader();
   9:   
  10:  List<SMSMessage> SMSMessages = new List<SMSMessage>();
  11:   
  12:  while (res.Read())
  13:  {
  14:      SMSMessages.Add(new SMSMessage() { MessageValue = res["MessageText"].ToString(), DateTimeValue = res["MessageDate"].ToString() });
  15:  }
  16:   
  17:  conn.Close();
  18:  conn.Dispose();
  19:   
  20:  return SMSMessages.ToArray();

 

А вот последний метод представляет наибольший интерес, так как именно тут идет работа с очередью.

   1:  if ((login.Equals(RoleEnvironment.GetConfigurationSettingValue("Login"))) && (password.Equals(RoleEnvironment.GetConfigurationSettingValue("Password"))))
   2:  {
   3:   
   4:      SqlConnection conn = new SqlConnection(RoleEnvironment.GetConfigurationSettingValue("DatabaseConnection"));
   5:      SqlCommand comm = new SqlCommand("insert messagetable (MessageText, MessageDate) values (@par1, @par2)", conn);
   6:      comm.Parameters.Add(new SqlParameter("par2", DateTime.Now.ToUniversalTime().ToString()));
   7:      comm.Parameters.Add(new SqlParameter("par1", sms));
   8:   
   9:      conn.Open();
  10:   
  11:      comm.ExecuteNonQuery();
  12:   
  13:      conn.Close();
  14:      conn.Dispose();
  15:   
  16:      CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
  17:      {
  18:          configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
  19:   
  20:          RoleEnvironment.Changed += (sender, arg) =>
  21:          {
  22:              if (arg.Changes.OfType<RoleEnvironmentConfigurationSettingChange>()
  23:                  .Any((change) => (change.ConfigurationSettingName == configName)))
  24:              {
  25:                  if (!configSetter(RoleEnvironment.GetConfigurationSettingValue(configName)))
  26:                  {
  27:                      RoleEnvironment.RequestRecycle();
  28:                  }
  29:              }
  30:          };
  31:      });
  32:   
  33:      CloudStorageAccount acc = CloudStorageAccount.FromConfigurationSetting("StorageConnection");
  34:      CloudQueueClient queueClient = acc.CreateCloudQueueClient();
  35:   
  36:      CloudQueue queue = queueClient.GetQueueReference("smsqueue");
  37:      queue.CreateIfNotExist();
  38:   
  39:      queue.AddMessage(new CloudQueueMessage(sms));
  40:  }

 

Тут мы вставляем новое сообщение в нашу таблицу, а также размещаем его в очереди. Для работы очереди мы использовали управляемую библиотеку Microsoft.WindowsAzure.StorageClient.dll, которая облегчает нам работу с REST API. Итак, тут мы создаем объект типа CloudStorageAccount, который будет ассоциироваться с нашим Storage аккаунтом в Azure. После чего создаем объект типа CloudQueue, который будет ассоциироваться с нашей очередью. И с помощью метода CreateIfNotExist создает новую очередь или получаем ссылку на существующую. После этого можно добавлять элементы.

Теперь необходимо реализовать рабочую роль, добавить поддержку https и написать клиента. Но об этом в следующей статье.

Реклама

Written by Sergiy Baydachnyy

13.04.2011 at 12:12

Опубликовано в Windows Azure, Windows Phone

Tagged with , , ,

Windows Phone 7: Application Bar

3 комментария

Глупая привычка, пришедшая с опытом создания Windows и Web приложений – создание всех интерфейсных элементов в окне приложения. Я сам на это купился, создавая свое первое приложение для Windows Phone 7 – Пятнашки. В основном окне этого приложения есть две кнопки: Refresh и About. Выглядят они странно (особенно About) и явно лишними. И все хорошо, пока в Вашем приложении нет полей редактирования, инициирующих вызов клавиатуры, закрывающей часть необходимых кнопок. Представьте приложение, имеющее поле редактирования на весь экран, а внизу экрана кнопку Send, позволяющую отправить сообщение. При вводе текста, кнопка Send будет перекрыта клавиатурой, а начинающий пользователь будет ломать голову, что с этим делать и как добраться до кнопки. Именно поэтому, Windows Phone 7 приложения имеют возможность использовать специальную панель для элементов управления Application Bar.

Application Bar представляет собой всплывающую панель внизу окна приложения, которая может содержать от одной до четырех кнопок, позволяющих выполнить какие-то действия. Кроме того, тут может присутствовать не иерархическое текстовое меню. Меню может быть привязано к одной из кнопок панели и в основном используется для выбора одной из опций приложения.

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

Итак, попробуем создать простой Application Bar. Первое, что необходимо сделать, это определиться с иконками. Некоторые иконки доступны в папке C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Icons\dark, а остальные нужно нарисовать самостоятельно. При создании иконки есть несколько рекомендаций: 1). Иконку рисуют белым цветом на прозрачном фоне. При изменении темы, такая практика позволяет сделать иконку видимой для пользователя; 2). Размер иконки должен быть 48 на 48 пикселей, но все, что Вы нарисовали, нужно уместить в прямоугольник 26 на 26 пикселей и расположить изображение по центру. Все от того, что любое изображение будет заключено в окружность радиусом 14. Если Ваше изображение будет больше, то возникнут пересечения.

Итак, чтобы добавить кнопку Refresh и About в Application Bar приложения, достаточно в MainPage.xaml добавить следующий код:

   1:      <phone:PhoneApplicationPage.ApplicationBar>
   2:          <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
   3:              <shell:ApplicationBarIconButton 
       IconUri="/Images/appbar.refresh.rest.png"  
       Text="Refresh" Click="ClickRefresh"/>
   4:              <shell:ApplicationBarIconButton 
       IconUri="/Images/appbar.questionmark.rest.png" 
       Text="About" Click="ClickAbout"/>
   5:          </shell:ApplicationBar>
   6:      </phone:PhoneApplicationPage.ApplicationBar>
 

Иконки я выбрал из SDK, установив Build Action в Content и Copy to Output Directory в Copy Always.

Вот такая панель у нас получилась:

clip_image001[1]

Естественно, чтобы панель работала, необходимо реализовать обработчики событий ClickAbout и ClickRefresh.

Добавим к этой панели возможность выбора языка интерфейса. Для этого расширим Application Bar двумя пунктами меню:

   1:      <phone:PhoneApplicationPage.ApplicationBar>
   2:          <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
   3:              <shell:ApplicationBarIconButton 
        IconUri="/Images/appbar.refresh.rest.png"  Text="Refresh" Click="ClickRefresh"/>
   4:              <shell:ApplicationBarIconButton 
        IconUri="/Images/appbar.questionmark.rest.png" Text="About" Click="ClickAbout"/>
   5:              <shell:ApplicationBar.MenuItems>
   6:                  <shell:ApplicationBarMenuItem Text="Russian" 
        Click="SetLanguageClick"></shell:ApplicationBarMenuItem>
   7:                  <shell:ApplicationBarMenuItem Text="English" 
        Click="SetLanguageClick"></shell:ApplicationBarMenuItem>
   8:              </shell:ApplicationBar.MenuItems>
   9:          </shell:ApplicationBar>
  10:      </phone:PhoneApplicationPage.ApplicationBar>

 

В результате мы увидим следующую панель:

clip_image002[1]

Нужно сказать, что меню в Application Bar очень часто не оправдывают себя. С таким же успехом я мог бы разместить кнопку Language и переводить пользователя на отдельную страницу, по выбору языка.

Проблема в Application Bar состоит в том, что это элемент управления Windows Phone 7, и он не поддерживает возможности Silverlight-элементов управления, например, связывание с данными. Несмотря на это, элемент управления поддерживает возможность динамического заполнения из языка программирования C#.

Так, класс ApplicationBar находится в пространстве имен Microsoft.Phone.Shell. Доступ к ApplicationBar осуществляется через соответствующее свойство класса PhoneApplicationPage.

В общем штука хорошая, поэтому пользуйтесь.

Written by Sergiy Baydachnyy

07.03.2011 at 20:41

Опубликовано в Windows Phone

Tagged with ,

Windows Phone 7: Публикация приложений

2 комментария

Поскольку украинские разработчики могут пробовать публиковать свои приложения (распространяемые бесплатно) прямо сейчас, то мне бы хотелось остановиться на вопросе публикации приложений, разобрав процесс и остановившись на основных ошибках.

Итак, первое, что необходимо сделать при публикации в Marketplace, это убедиться, что приложение обладает иконкой, отличной от той, которая используется по умолчанию. Таких иконок две: 62 на 62, используемая при отображении приложения в общем списке; 173 на 173, используемая при привязке приложения к основному окну.

Таким образом, если при тестировании Вы увидели иконку, аналогичную иконке ниже, то Ваше приложение не примут. Не совершайте этой ошибки.

clip_image001

Чтобы изменить иконку, в проекте Visual Studio достаточно заменить файлы ApplicationIcon.png и Background.png.

Если Вы добавили файлы со своими именами, то они должны находиться в корневой директории и иметь свойство Build Action установленным в Content. Далее можно отредактировать манифест приложения, используя дизайнер Visual Studio, перейдя в окно свойств проекта:

clip_image002

Имея готовый пакет для публикации, переходим к публикации приложения. Для этого нам нужны следующие компоненты:

· Сам пакет xap, содержащий приложение

· Иконки в формате png 173 на 173, 200 на 200, 99 на 99

· Минимум один скрин приложения 480 на 800

· Короткое описание приложения

Это тот минимум, который необходим для публикации приложений.

Вторая ошибка, которая возникает при публикации – неправильные скрины вашего приложения. Поскольку Вы будете снимать скрины используя эмулятор, ни в коем случае нельзя захватывать фрейм эмулятора. Нужно захватывать только окно приложения. Если Вы захватили фрейм, то приложение не примут.

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

clip_image004

Если Вы сделали это, то приложение примут.

Последняя, четвертая ошибка – приложение должно иметь окно типа About, содержащее информацию об авторе приложения, контактах для поддержки. Данное окно должно быть легко доступно. Если этого окна (даже примитивного MessageBox) нет, то приложение не примут.

Вот и все. Это основные ошибки, с которыми мы столкнулись при публикации приложений. Присылайте Ваши приложения для публикации.

Written by Sergiy Baydachnyy

07.03.2011 at 10:51

Опубликовано в Windows Phone

Tagged with ,

Начинаем разрабатывать для Windows Phone 7: Настройка клавиатуры

with one comment

Чтобы почувствовать дух Windows Phone 7 и посмотреть на различия в подходах построения обычных Silverlight- и Windows Phone приложений, рассмотрим несколько небольших примеров.

Пример 1. Управление клавиатурой

Начнем с простого элемента управления TextBox, который позволяет вводить текст. В обычной реализации этот элемент ничем особым не выделяется. Но если говорить о Windows Phone 7, то вопрос ввода очень существенен. Так, двигаясь со скоростью 130-160 км/ч, мне очень затруднительно делать ввод данных на наших дорогах. Поэтому моим простым желанием является то, чтобы клавиатура содержала только тот набор элементов, который нужен мне в данном контексте. То есть, если я ввожу телефонный номер, то я должен видеть только цифры, а если я переписываюсь в месенджере, то мне необходимы не только буквы, но и специальные символы. В идеале я бы хотел иметь и проверку орфографии. Все эти возможности в Windows Phone 7 присутствуют. И если проверка орфографии выполняется автоматически, то управлять клавиатурой при вводе текста можно с помощью простого свойства InputScope элемента TextBox.

Ниже показан простой пример, «настраивающий» элемент TextBox для ввода электронного адреса:

<TextBox>
    <TextBox.InputScope>
        <InputScope>
            <InputScopeName NameValue="EmailUserName"></InputScopeName>
        </InputScope>
    </TextBox.InputScope>
</TextBox>

 

В результате на экране будет появляться следующая клавиатура:

clip_image002

@17.4 Ввод электронного адреса

 

Подобный код можно реализовать и программно, настраивая элементы TextBox динамически:

 

txtBox.InputScope = new InputScope()
{
    Names = 
    {
        new InputScopeName()
        {
            NameValue = InputScopeNameValue.EmailUserName
        }
    }
};

Written by Sergiy Baydachnyy

24.06.2010 at 10:23

Опубликовано в SilverLight, Windows Phone

Tagged with

Начинаем разрабатывать для Windows Phone 7: Первое приложение

2 комментария

Итак, установив все необходимое, можно приступить к созданию первого приложения для Windows Phone 7 на Silverlight. Я буду во всех примерах использовать полноценную версию Visual Studio, но Express Edition ничем особым не отличается.

После установки Windows Phone утилит, у Вас появляется несколько шаблонов:

clip_image002

@17.1 Создание Windows Phone приложения

Часть шаблонов находится в разделе Silverlight for Windows Phone, а часть в разделе XNA Game Studio 4.0.

Первые приложения мы будем создавать на основе Windows Phone Application шаблона. Тут достаточно ввести имя приложения и нажать ОК.

Проект, который будет создан в результате, очень напоминает обычный проект на Silverlight. Естественно, имеются несколько отличий. Так, файл App.xaml содержит набор предопределенных ресурсов, о которых мы поговорим позже. А вместо UserControl используется PhoneApplicationPage, имеющий в режиме дизайнера вид настоящего телефонаJ

clip_image004

@17.2 Создание Windows Phone приложения

Visual Studio позволяет не просто создавать проекты и редактировать код, но и заниматься отладкой Windows Phone приложений. Причем, несмотря на отсутствие устройств, Visual Studio предлагает развернуть приложение в эмуляторе или на действующее устройство, которое можно будет подключать через USB. Если говорить о дизайнере интерфейса, то тут поддерживается визуальное редактирование (хотя это не особо нужно).

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

clip_image006

@17.3 Запуск эмулятора

Первый запуск эмулятора действительно занимает много времени. Это связано с тем, что запускается своеобразная виртуальная машина. Поэтому, чтобы при каждом изменении не терять уйму времени, просто не закрывайте эмулятор – Visual Studio автоматически обновит Ваше приложение при очередной компиляции и выполнить его перезапуск (это занимает несколько секунд).

Внесем изменения в код. Для этого внутренний элемент Grid заменим на следующий код:

<StackPanel x:Name="ContentGrid" Grid.Row="1">
    <Button Content="Say Hello" Click="Button_Click"></Button>
    <TextBlock Text="" Name="txtHello"></TextBlock>
</StackPanel>

В качестве обработчика событий пропишем код на C# (пока поддерживается только C#):

private void Button_Click(object sender, RoutedEventArgs e)
{
    txtHello.Text = "Hello";
}

В результате мы получим приложение, отображающее кнопку и сообщение «Hello» при нажатии на кнопку.

Таким образом, Silverlight-разработчики пока не найдут ничего нового, исключая новый элемент PhoneApplicationPage, который является реализацией Page для Windows Phone, но об этом позже.

Written by Sergiy Baydachnyy

23.06.2010 at 13:32

Опубликовано в SilverLight, Windows Phone

Tagged with

Начинаем разрабатывать для Windows Phone 7: утилиты

8 комментариев

Судя по всему, Windows Phone 7 будет запущен в Украине в декабре 2010, то есть вместе с американским рынком. Это будет телефон с англоязычным интерфейсом и без доступа к Windows Marketplace. Если говорить о России, то там не будет даже англоязычной версии, до тех пор, пока не появится поддержка кириллицы. Зато, наличие моделей на рынке Украины, позволит разработчикам тестировать свои приложения уже в декабре. Что касается рынков, то нам не привыкать зарабатывать на европейском или североамериканском рынкахJ Поэтому возникает логичный вопрос: когда можно будет приступить к созданию приложений для Windows Phone 7?

Несмотря на то, что финальную версию утилит для разработчика обещают к октябрю, начинать исследовать Windows Phone 7 Вы можете уже сегодня. Сайт http://developer.windowsphone.com предлагает для этого все необходимое, включая эмулятор платформы. Как уже было сказано выше, создавать приложения под Windows Phone 7 можно с помощью Visual Studio 2010 или его бесплатного аналога Visual Studio 2010 Express для Windows Phone. Проекты можно редактировать и в Expression Blend, но последний пока не содержит шаблонов, позволяющих создать проект прямо в Blend (это временное явление).

Естественно, что эмулятор, который поставляется вместе с Windows Phone утилитами, не позволяет использовать весь функционал, доступный на Windows Phone. Так, достаточно сложно эмулировать акселерометр (даже невозможно), а MultiTouch можно проверять, имея соответствующий монитор на рабочей станции (кто-то писал о возможности эмулировать мултитач с помощью MultiPoint – не верьте. Интерфейс Windows Phone рассчитан на работу с пальцами рук, а несколько мышек могут дать немного другой эффект) и т. д. Несмотря на это, большой спектр приложений можно разрабатывать уже сейчас, используя действующий эмулятор. Нужно отметить, что первая версия эмулятора (март 2010) была крайне урезанной и не позволяла воссоздать весь жизненный цикл приложения. Новая версия утилит для Windows Phone (май 2010) содержит эмулятор, позволяющий использовать объектную модель Windows Phone в полной мере.

Итак, чтобы приступить к созданию Windows Phone 7 приложений, откройте http://developer.windowsphone.com и установите все необходимые утилиты.

Written by Sergiy Baydachnyy

23.06.2010 at 11:35

Опубликовано в SilverLight, Windows Phone

Tagged with

Начинаем разрабатывать для Windows Phone 7: что такое Windows Phone 7

5 комментариев

Наверняка все слышали о платформе от Microsoft для мобильных устройств – Windows Mobile. Являясь обладателем телефонов на этой платформе вот уже пять лет, могу сказать, что Windows Mobile идеальна для бизнес телефонов. Но если говорить о телефонах для рядового пользователя, то тут Windows Mobile проигрывает по всем параметрам, тем более что платформа проектировалась в конце 20-го века. Да и разработчикам с производителями телефонов она доставляет массу проблем. Так, интерфейс Windows Mobile включает элементы, которые не адаптированы для работы с использованием Touch технологий. Поэтому, если компании-разработчики телефонов, хотели выпустить новое устройство с поддержкой Touch, то им приходилось вкладывать ресурсы в создание новой оболочки поверх Windows Mobile. Рядовым же разработчикам приходилось прибегать к созданию неуправляемого кода на С++, так как именно таким образом, можно было достигнуть максимальной производительности. Наконец, распространение приложений под Windows Mobile ложилось на плечи самих разработчиков. Учитывая размер рынка Windows Mobile и ориентацию телефонов на бизнес пользователя, разработкой под эту платформу могли заниматься только большие компании. В конечном итоге весной 2010 года было объявлено о том, что Windows Mobile «умер». Естественно, что Microsoft будет еще долгое время поддерживать устройства на платформах Windows Mobile 6.x, но, учитывая время жизни мобильных устройств, можно забыть об этих платформах. Так Visual Studio 2010 уже не поддерживает разработку для Windows Mobile.

Отказ от платформы Windows Mobile вовсе не означает, что Microsoft уходит с рынка мобильных устройств. Скорее наоборот, Microsoft пытается показать, что этот рынок интересен и в ближайшее время там многое изменится. И первые изменения, которые предстоит опробовать пользователям – выход новой платформы для мобильных устройств Windows Phone 7.

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

Мы не будем говорить о пользователях, пусть они сами оценивают новые устройства. А вот, что касается разработчиков, то тут можно выделить несколько нововведений:

· Разработка приложений для Windows Phone 7 унифицирована для всех устройств;

· Разработчики получают новые инструменты и технологии;

· Изменена модель распространения приложений;

Давайте поговорим о каждом из нововведений отдельно.

Итак, теперь разработчик не должен думать о модели устройства, разрабатывая то или иное приложение. Несмотря на то, что телефоны на базе Windows Phone будут создавать различные компании (LG, Samsung и др.), Microsoft выдвигает достаточно жесткие требования к устройствам. Так, все телефоны, построенные на платформе Windows Phone 7, будут обладать следующими характеристиками:

· Обязательное наличие трех кнопок на передней панели телефона (Поиск, Старт, Назад). Наличие этих кнопок обусловлено исследованиями, связанными с удобством интерфейса для пользователя. Естественно, что каждый производитель сможет добавить свои кнопки, включая полноценную клавиатуру;

· Разрешение экрана 800 на 480. Стандартизация разрешения – одно из самых важных нововведений для разработчика. Ведь это существенно облегчит задачи создания интерфейсов;

· Наличие Wi-Fi. Как не странно, но большинство телефонов на альтернативных платформах, которые я видел на нашем рынке, не содержат этого модуля;

· Наличие камеры не менее 5 мПк со вспышкой. Взаимодействие с друзьями в социальных сетях требуют наличия хорошей камеры. В бизнес версиях телефонов этому совсем не уделяли внимания, но Windows Phone 7 – телефон для пользователей;

· Наличие акселерометра. С помощью этой функциональности можно разрабатывать большое количество интересных игр;

· Поддержка вибрации и цифрового компаса;

· Распознавание и синтез голоса. Идея состоит в том, что независимо от реализации данного механизма тем или иным производителем, разработчик всегда будет иметь доступ к единому API;

· Определение местоположения. На сегодняшний день местоположение можно определить с помощью модуля GPS, по параметрам Wi-Fi сети или пользуясь информацией из сети оператора. Каждый из способов обладает преимуществами и недостатками, именно поэтому Windows Phone 7 будет поддерживать все три механизма. Разработчику будет доступен специальный API, позволяющий задавать точность определения местоположения и другие параметры. Платформа будет определять наиболее простой и доступный механизм, возвращая данные через единый интерфейс;

· Все телефоны будут поддерживать аппаратное ускорение для графического чипа, который будет поддерживать DirectX.

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

Перейдем теперь к технологиям разработки программного обеспечения. Основная новость для разработчиков в том, что приложения для Windows Phone 7 можно создавать на одной из двух технологий: XNA или Silverlight. Больше никакого С++ и неуправляемого кода. Естественно, что Silverlight используется для создания интерфейсов различного типа приложений, тогда как XNA используется только для создания игр. При этом разработчик может использовать как платную версию Visual Studio 2010, так и бесплатный аналог Visual Studio 2010 Express для Windows Phone. Тут начинается самое интересное, так как технология Silverlight значительно лучше воспринимается современным разработчиком и позволяет создавать сложные интерфейсы без существенных затрат. В первом релизе Windows Phone 7 планируется использовать оптимизированную версию Silverlight 3, а в следующих версиях перейти к унифицированной версии Silverlight для всех платформ (c Silverlight 5). Несмотря на то, что используется Silverlight 3, разработчик не будет особо ущемлен в возможностях. Так, Silverlight 4 предлагает много возможностей для работы приложений вне браузера, но для Windows Phone 7 эти нововведения не существенны, так как все Silverlight-приложения на этой платформе работают вне браузера! Более того, в первом релизе Windows Phone 7 пользователи не смогут работать с Silverlight-приложениями, которые размещены в Интернет на различных сайтах и доступны через браузер. Иными словами, Silverlight-приложение должно быть установлено на Windows Phone непосредственно. Еще одним полезным нововведением Silverlight 4 является наличие элемента WebBrowser, который отсутствует в Silverlight 3. Между тем, этот элемент присутствует в списке компонент самой платформы Windows Phone 7 и может быть использован Silverlight-приложением.

Наконец перейдем к вопросу распространения приложений. Тут модель стала похожа на ту, которую предлагает компания Apple для своих устройств iPhone. Иными словами, приложение можно будет установить только с Windows Marketplace, интерфейс к которому интегрирован в Windows Phone 7. С одной стороны тут есть негативная сторона: большие компании, уже завоевавшие часть рынка, вынуждены конкурировать с решениями от рядовых разработчиков, полностью приспособившись к новой модели. С другой стороны тут есть много преимуществ для небольших компаний и рядовых разработчиков: теперь каждый сможет зарабатывать деньги, разместив свое приложение на Windows Marketplace, а Microsoft берется гарантировать непрерывный доступ к приложениям, тесно интегрируя механизм работы с Marketplace в Windows Phone 7. Возможность заработать деньги даже рядовому разработчику, должна создать большое сообщество вокруг Windows Phone, которое предоставит на рынок большой спектр различных приложений, а, следовательно, гарантирует успех. Действительно, можно много говорить о достоинствах или недостатках Windows Phone 7, а можно попробовать реализовать свой потенциал, приступив к разработке приложений на уже знакомых технологиях.

Written by Sergiy Baydachnyy

23.06.2010 at 10:06

Опубликовано в SilverLight, Windows Phone

Tagged with