Через тернии в маркет

    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 платформы, а я думаю над тем стоит ли связываться и в дальнейшем с этой платформой.
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 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
              Потрудился, молодец! 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
                                          скорее всего — это основная причина.
                                • НЛО прилетело и опубликовало эту надпись здесь

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