Пользователь
0,0
рейтинг
30 сентября 2013 в 15:17

Разработка → Через тернии в маркет

image

Хочу поделиться опытом разработки приложения на Windows Phone 7.5, миграции его на Windows Phone 8, и что я думаю о перспективах в целом. Информация будет интересна в первую очередь начинающим разработчикам, так как сам я только недавно перешел с web разработки на мобильную и опыта у меня еще не очень много.


Что бы Вы не подумали, прочитав статью, что разработка под Windows Phone (WP) — ад кромешный, скажу сразу:
Ребята из Microsoft молодцы: отличный SDK, доступная ценовая политика, море документации, отличное комьюнити и с# — все это делает процесс разработки приятным и увлекательным. Просто я хочу рассказать именно о сложностях, с которыми я столкнулся.

Немного о том, чем я занимался. Задача стояла предельно простая:
есть успешное приложение на Iphone, Android, Ipad, Mac os, Windows (кому интересно) и нужно было перенести его на WP. Начинал я разработку в то время, когда на рынке телефонов от Microsoft передовой была Windows Phone 7.5 и вот-вот должна была появиться Windows Phone 8. После выяснения задачи следующее, что нужно было сделать — это определиться на чем писать и как писать. Если с тем, на чем писать вопросов не возникало, то над тем как писать пришлось задуматься. Дело в том, что я уже писал приложение для платформы WP7, но оно было простое и не требовало каких-либо сложных шаблонов проектирования. Начитавшись про крутость MVVM паттерна решил попробовать и начал искать фреймворки для его реализации. Больше всех мне понравился Mvvm Light toolkit за его простоту и легкий порог вхождения. Именно благодаря использованию MVVM процесс миграции на WP8, а затем и на Windows 8 стал в разы проще.

Дизайн

С дизайном мы провозились очень долго. Для нас этот опыт был первый и очень много было тонкостей. Кроме того не все то, что смотрится красиво, будет быстро работать на телефоне ( к примеру выбор между Pivot и Panorama). Так как мы сразу решили поддерживать светлую и темную темы, долго провозились с подбором backround — ов для страниц, но так и не пришли к варианту, который бы нас устроил (отдельный привет ApplicationBar, который как бельмо на глазу ). Советую сразу продумывать все менюшки в приложении и то, что у вас будет в ApplicationBar ( в него только самое необходимое: сохранить, удалить, отменить, добавить.). Подумайте как вы будете использовать accent colours и как это все будет смотреться в разных темах. Сетку мы попробовали и у нас не получилось. Я тогда первый раз узнал что такое полупиксель 8) (в приложении он и по сей день иногда всплывает 8) ). Минимализм хорошо, но сделать что-то выделяющиеся реально сложно.

А что с компонентами и контролами?

Все необходимые компоненты и контролы есть, но не все они работают так, как нужно. Начинал я с использования Windows Phone Toolkit. Все работало хорошо, но когда дело доходило до тонкостей, нужно было браться за напильник, особенно когда дело касалось производительности и юзабилити. Больше всего меня сводил с ума тормознутый LongListSelector. На одной из конференция я услышл о RadControls , попробовав я уже не смог работать с другими. Стоят не дорого, а времени сэкономят уйму, да и еще стандартные элементы, к примеру TextBox, PasswordBox, намного приятней в использовании (базовая анимация, clear button, открывания звездочек в PasswordBox ). Казус случился с Multiselect ListPicker, который напрочь отказался работать с Two-way databinding и пришлось немного шаманить.

Кроме того сводило с ума несколько вещей:

— Виртуальная клавиатура при появлении перкрывает нижнюю часть формы.С этой фичей я сражался на каждой странице и так полностью не победил. Пришлось каждую форму оборачивать в ScrollViewer и при появлении клавиатуры добавлять Margin с низу. Я реально не понимаю почему не работает как в Iphone.
image

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

— Изменение фокуса элемента, при открытой виртуальной клавиатуре приводит к тому, что элемент сна который будет перенесен фокус, будет находиться под клавиатурой. ( я изменил фокус с Title на Original Title, нажав ↲)
image

— Пока фокус не уйдет с поля two-way DataBinding не происходит. К примеру, если в ситауции показанной на картинке выше, нажать на кнопку сохранить на AppBar, то все то, что будет в поле Original Title во ViewModel не прийдет. Это пришлось обходить при помощи кода

private void UpdateSource()

{

object focusObj = FocusManager.GetFocusedElement();

if (focusObj != null && focusObj is TextBox)

{

var binding = (focusObj as TextBox).GetBindingExpression(TextBox.TextProperty);

binding.UpdateSource();

}

if (focusObj != null && focusObj is Telerik.Windows.Controls.RadTextBox)

{

var binding = (focusObj as Telerik.Windows.Controls.RadTextBox).GetBindingExpression(Telerik.Windows.Controls.RadTextBox.TextProperty);

binding.UpdateSource();

}

}


— ApplicationBar не работает с commands и локализировать ее можно только программно. Кроме того, сделать динамический ApplicationBar ( к примеру у каждого Pivot Item свой ApplicationBar) тот еще костыль. Пришлось использовать BindableApplicationBar , который очень плохо дружит с Expression Blend.

— Если Вы захотите показать большое количество текста на странице, Вас ждет разочарование в виде ограничения, и все что не вписывается 2048x2048 pixels будет поглащено черной дырой Microsoft, и поможет Вам только вот эта статья.

— как просто работать с картинками, чтобы они смотрелись на разных экранах одинаково хорошо, я не понял и использовал multi resolution image

База данных

С базой данных получилась самая большая заминка, я бы даже сказал реальный Fuck up. Версия WP7.5 (как и последующие) имеет свою встроеннуюю СУБД — SQL CE. Первая версия программы была реализована именно на этой СУБД. Надо сказать, что программа для Iphone, Ipad, Android и остальных ОС была написана с использованием SQlite. Но для WP7, на тот момент, официальных драйверов не было (как нет их и сейчас, появились только с версии Windows Phone 8 ), а с неофициальным связываться не хотелось. Для клиента это оказалось небольшим шоком, но со скрипом мы портировали уже готовую БД sqlite на SQL CE, создали модели, описали связи, индексы и т.д..

При работе с небольшими объемами данных БД работала без проблем, но когда количество записей переваливало за пару тысяч — тут начинались ощутимые тормоза. Я долго пытался оптимизировать работу с БД, но ничего не выходило. Кроме того, у меня стоит бесплатная версия студии и работать с БД было немного проблематично, вьювер для нее не ставился и пришлось долго и нудно искать программу для работы с sdf файлами.

Затем было принято решение начать разработку под Windows 8\RT и каково было общее удивление, когда оказалось, что в Windows 8\RT не потдерживается SQL CE и они рекомендуют использовать sqlite (к тому времени уже вышли версии драйверов sqlite для Windows 8\RT Windows Phone 8 ).

Это был шок. Плюнув на все, решили искать варианты работы с sqlite на Windows 7.5. Потратив уйму времени, нашел устаревшую библиотеку. К счастью, в ней оказалась потдержка транзакций, без которой мы не смогли бы работать. Был написан небольшой helper для работы с библиотекой (могу дать страждущим). И все вроде заработало, но косяки в ней выгребаю и по сей день. Кроме того она очень плохо работает с UTF8.

Лично мною был сделан вывод: если нужна работа с БД, то только sqlite и только начиная с Windows Phone 8.

Работа с сервером

Работать с сервером оказалась не очень сложно. Облегчить работу с API мне помогла библиотека RestSharp (Simple REST and HTTP API Client for .NET) http://restsharp.org/. Единственной сложностью оказалось выполнение синхронных запросов. В WP7 это можно сделать используя делегаты. Правда, порою мне казалась, что я совсем запутался в хитросплетениях колбеков и приходилось производить рефакторинг.

Кроме того, работать с SSL оказалось невозможно и это очень грустно. Но в целом все не так страшно, как работа с базой данных.

Локализация

С локализацией особых проблем не было. В первой версии программы было решено поддерживать 12 языков. Переводы были сделаны с помощью сервиса http://www.icanlocalize.com. Ничего плохого сказать про работу сервиса не могу, но есть одно НО: работает только с Iphone\Android и пришлось писать конвертер для конвертирования XML в resx и обратно (если кому надо — могу дать). И опять же есть небольшая несовместимость файлов локализации между Windows Phone и Windows 8 \RT (Microsoft такой soft ). Небольшие трудности возникли с локализацией AppBar, но они легко обходятся.

“Ура”: новая Windows

Пока двигалась разработка, новость о том, что будет новая WP8 была все время на слуху. После презентации Windows Phone 8 в июне 2012 стало ясно, что телефоны на базе Windows Phone 7.5 не будут работать с WP8, а получат свое ущербное обновление. Для нас это оказалось довольно неприятной новостью. Ложкой меда было то, что программы, написаные для WP7.5, будут работать и на телефонах с WP8, но не смогут использовать все фичи новой ОС. Мы подумали: ну ок, нам, вроде, они и ни к чему. Но телефончик заказали.

Когда пришел телефон, пришлось ставить и новую студию 2012. Затем, в довесок к студии, купить новый ноутбук (так как нужен процессор выше i3 с поддержкой технологии SLAT ). Ну и конечно, Windows 8 ( куда ж без нее ...). В общем, переход получился очень затратный, как по времени, так и по деньгам. Установили на WP8 то, что мы сделали, поплакали и задумались: что делать дальше. Конечно, было не все так ужасно, но стало ясно, что в таком виде выходить нельзя. Основная проблема была в картинках, сплеш скринах, иконках, но и некоторые компоненты отказались работать. В решении этой проблемы помогла статья http://developer.nokia.com
можно посмотреть и вот ее

Делая отдельные проекты для каждой версии в одном солюшене, я все время радовался, что еще в самом начале принял решение использовать MVVM паттерн.

В MARKETplace

Так как у приложения уже было свое community ( для меня было откровением, что так много людей имеют телефоны на разных платформах одновременно), то мы решили сделать Betta Testing, и очень здорово, что платформа позволяет это сделать. Пригласив людей с форума имеющих WP телефоны начали тестирование. На исправление ошибок ушло около двух месяцев, попутно поменяли дизайн и нарастили функционал (все для клиента). К релизу мы подошли уже уверенные в себе, огромное спасибо тем людям, которые учавствовали в тестировании.

Загрузка приложения в магазин прошла быстро, сертификация заняла 8 дней и прошла с первого раза. Единственная морока была с подготовкой скринов, так как нужно для каждого языка делать свой набор скринов, а у нас 12 языков. Начались продажи, и вскоре выплыл один баг, который нужно было срочно исправить. Исправил я его за 10 минут и отправили update на сертификацию. Создали тикет в Microsoft с описанием того, что случилось и просьбой ускорить сертификацию. Ответа не получили, так же как и ускорения — 7 рабочих дней 8(, а с учетом выходных 9. 9 дней волнений и самобичеваний. Я уверен, что им для таких случаев нужно делать отдельный механизм сертификации, ведь проверить где и что поменялось с предыдущей версии не может занимать так много времени. Хотя бы для критических ошибок, ведь это и их деньги тоже.

Разместили рекламу в соцсетях, на сайте и сделали рассылку. Начало продаж было вяленьким и клиент сразу поник, так как у него уже был опыт запуска этого приложения на других платформах. Естественно после пика загрузок и покупок при запуске начался медленный спад продаж. На сегодняшний день продажи составляют в средней 10 приложений в сутки, что есть очень низким показателем в сравнении с другими платформами (50 покупок в день для Android и 150 для Iphone)
image
Статистика загрузок выглядит где-то так:
image
Ну и в сравнении с Iphone и Android
iphone
android

Очень расстраивает не то, что продажи такие низкие, а то что при таких низких продажах мы находились в рейтингах Top Paid приложений:

— Италия, Швеция, Норвегия: 40 место

— США: 70 место

— Швецария: 16 место.

— Чехия: 6 место

— Франция: 50 место

А в нутри своей категории на первом\втором местах! и это при таких низких покупках!!!
Можно предположить, что у приложений находящихся в топах дела идут чуть-чуть лучше.

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

На сегодняшний день, к сожалению, заказчик решает вопрос о целесообразности продолжении поддержки приложения для WP платформы, а я думаю над тем стоит ли связываться и в дальнейшем с этой платформой.
Дикусар Владимир @vovich
карма
–31,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (45)

  • +2
    У меня была аналогичная ситуация — игра висит в топах, даже в Featured всего Marketplace вылезла, а прирост юзеров \ продажи все равно стремятся к нулю. После этого напрочь отпало желание использовать при разработке игр технологии, которые затруднят портирование на другие платформы.
    • 0
      да да, тут еще главное сразу выяснить, что приложение будет на других платформах и понимать, что на что-то универсальное уходит больше времени и денег. Клиент до сих пор в шоке, что под Windows RT все не так как под Windows Phone, он привык к Iphone\Ipad.
      • 0
        Кстати, с релизом WP8.1 майки вроде как обещают сделать единый W/WP store
        • 0
          лично я слабо в это верю, ну по крайней мере не представляю как это будет.
        • 0
          да прочитал сегодня о таких планах у них. Любопытно
    • 0
      А у меня по графику скачиваний отчетливо видно когда приложение попадало в фичуред — острые пики в пару тысяч скачиваний в день:-).
      • 0
        Первое попадание в топ — да, на графике огромный пик, но:
        1. Графики показывают относительное значение, которое может выглядеть внушительно при низком абсолютном: если было 2 пользователя, а стало 5 — то кричать о 2.5x приросте рановато.
        2. Количество пользователей, пришедших во время повторных попаданий, даже в сумме не дают столько, сколько в их пришло после первого.
    • 0
      А много пользователей Windows Phone? Может быть их просто мало, вот и прироста нет.
  • 0
    Потрудился, молодец! Apple, кстати, со своим перегруженным AppStore на критические апдейты реагирует гораздо лучше. Мы получали несколько раз Expedited App Review и апдейты загружались за день. Кроме того, если этих апдейты отвергались Review team по любым причинам, повторная загрузка после исправления все равно автоматически попадала под Expedited App Review.
    • 0
      спасибо на добром слове. Я еще ни разу не получал отказа от Microsoft, но думается мне, что если маленький апдейт проверяют 7- 9 дней и после этого им что-нибудь не понравится, то этот маленький апдейт может занять 15-18 дней!!! это очень круто!!! пол месяца нервов!!! начинаешь чувствовать себя на минном поле — шаг в сторону и все…
      • 0
        У нас было уже около 10 релизов и больше 5 дней ни разу не выходило. иногда даже быстрее рассматривали.
        • 0
          ну может мы попадали в такие периоды, хотя никаких праздников и акций у них не было.
        • 0
          Сейчас пять дней, да. Под прошлый новый год даже по три дня бывало. Прошлой осенью до 15 могло быть.
  • 0
    автор, как называется Ваше приложение?
    я тоже неделю назад опубликовал своё. пока только одна загрузка :(.
    отфутболивали на этапе сертификации три раза.
    • 0
      • +1
        Цена для такого приложения довольно высокая, я ожидал увидеть цену в 34 или 69 рублей. За 199 рублей продаются довольно популярные игры и народ наверное к этому привык (я сам не играю), но приложения за такую цену я лично покупать не стал бы.
        • 0
          я полностью с этим согласен. Ну и так как я не смотрю фильмы и у меня нету фильмотеки, я бы и за 1$ его бы не купил 8)
          • 0
            Попробуйте сделать «скидку на выходные», скажем до 69 рублей или даже 34. Увидите, как продажи взлетят вверх.
            • –1
              я программист и не управляю ценовой политикой. Но думается мне, что от этого покупок станет меньше в дальнейшем — все будут ждать скидки 8). Мне как раз хотелось бы услышать о реальном опыте — что работает\ не работает. Но за скидку я обязательно предложу.
  • –1
    спасибо за статью! Как же я рад что не стал связываться с winphone!
    • –1
      Возможно не все так и плохо, возможно не покупают приложения, а платят за подписку или расширение свойств.
  • +1
    Насчет «отсутствия» SQLite на Windows Phone: C#-SQLite на чистом C#, прекрасно заводится на Windows Phone 7/7.5/8, стабильно работает и бинарно совместима с другими версиями (iOS/Android/Windows/WinRT/etc etc etc).

    А, да. Оно еще заводится в Silverlight, чтобы не морочиться с наличием отсутствия websql/indexeddb соответственно.

    Посему хотя аргумент «предпочитать официальное» я часто поддерживаю, но использовать его вслепую как-то странно.

    ЧЯДНТ?
  • +1
    еще:

    — да, RadControls хорошие.
    — проверку SSL сертификатов, действительно, выключить нельзя. Но, ээ, зачем? На всякий случай напомню, что если ее выключить, то от перехвата трафика (иначе зачем вам SSL?) защититься вы не сможете — т.к. не сможете отличить, ваш это сервер, или враждебный проксик.
    А сертификат, в целом, редко стоит более 1% бюджета проекта.
  • 0
    Требования приложения
    съемка фото и видео
    камера

    А что вы там фотографируете в приложении?
    • –1
      там сканер штрих-кодов: отсканировал штрих-код, нашел на сервере и добавил в коллекцию
  • 0
    Если есть планы и в дальнейшем разрабатывать под разные платформы, то советую присмотреться к Xamarin + MvvmCross. 60-80% кода получается общим для 3х платформ
    • –1
      спасибо я гляну. Но не я решения принимаю 8(
  • 0
    вот про 2048x2048 — это сильно, это MS надо постараться было такое нагородить
    • –1
      ага, но у них есть объяснение там какое-то по поводу производительности, но я его не понял, да и к чему его понимать, если все равно обходить надо
  • 0
    Как-то странно: вы сделали вывод о целой платформе всего лишь по одному приложению одной категории приложений (причём сомнительной полезности). Не совсем понимаю смысл подобного поступка. Объясните?
    • 0
      мы сравнили как продается ОДНА и та же программа на РАЗНЫХ платформах. Если программа продается на Android и Iphone хорошо и она же на WP плохо, и при этом занимает неплохие места и имеет хороший рейтинг, то проблема, скорее всего, не в программе.
      Если у Вас другое мнение — поделитесь.
      • 0
        Если вода хорошо продаётся в Конго и Малазии, и она же в России — плохо (при этом воду пьют и покупают), то это не значит, что в России не выгодно продавать товары.

        Вы делаете выводы по несоразмерным данным, на мой взгляд.
        • 0
          сравнение идет по ОДНИМ И ТЕМ ЖЕ СТРАНАМ, Вы статью прочитали? или Вы с намеком на то, что WP девайсы покупают немного «другие» люди? поясните
          • 0
            Не нужно кэпслокить. Это была метафора. Специально для вас разжёвываю: в данной метафоре страна «Россия» — это платформа «Windows Phone», а «Конго» и «Малазиия» — iOS и Андроид соответственно.
            • –2
              Это я и хотел сказать, что перспектив в «России» нету, работайте в «Конго» или «Малазиия»
              • 0
                Нет слов (фейспалм).
                Вы так мастерски вырываете всё из контекста, что я не вижу смысла дальше что-то вам объяснять.
                Но мне очень печально, что вы из всего сказанного, смогли придумать только «В России нет перспектив»… Странно, почему же тогда в России продают миллиарды товаров, если перспектив нет?
                • 0
                  есть конкретные примеры, что продается хорошо и приносит денег?
      • 0
        " На сегодняшний день продажи составляют в средней 10 приложений в сутки, что есть очень низким показателем в сравнении с другими платформами (50 покупок в день для Android и 150 для Iphone)"

        судя по всему, она не так плохо продается, учитывая что пользователей windows phone меньше 10% от всего рынка
        • 0
          возможно Вы правы, надо подождать.
          • +1
            кол-во телефонов на андроиде в 20 раз больше чем на windows. Поэтому 10 приложений по отношению к 50 это очень хороший результат, остается только надеяться что Microsoft удержится и захватит больше рынка
            • 0
              скорее всего — это основная причина.
  • 0
    Можно на Qt/QML разрабатывать под нее?

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