Сегодня к нам попала программа для OS X, которую не пропустили в официальный магазин приложений.
Соскучился по Dev Story? Напоминаю, что в рамках этой рубрики, OS X и iOS-разработчики делятся с нами историями о создании своего софта.
На этот раз речь пойдёт о приложении для OS X, которое позволяет скачивать фото и видео из Instagram с любого публичного профиля (или частного, если ты на него подписан). Да, есть способ сделать это вручную, но придётся лично ковыряться в коде страницы и вытягивать по одной фотографии. Зачем терпеть, когда можно упростить этот процесс?
В этой статье я поделюсь опытом разработки приложения для Mac, которое не было допущено в Mac App Store, и, тем не менее, пользуется популярностью. К сожалению, истории успеха тут не будет, взамен — много интересного опыта.
Идея
Я хотел изучить и опробовать на практике язык программирования Swift, а также новую для себя платформу — OS X. Решено было сделать небольшое приложение, достаточное для получения опыта с одной стороны, и не совсем бесполезное с другой.
До этого я писал на Objective-C под iOS. Кроме того, моё предыдущее приложение (Feeds) было завязано на Instagram, поэтому я решил использовать уже полученные знания для создания чего-то нового.
Итак, простое приложение-утилита для Instagram. После того как я пришёл к этому заключению, идея родилась уже сама собой. Это должен быть браузер для просмотра аккаунтов в Instagram с возможностью сохранения фотографий и видео.
Морально-правовые аспекты
Сразу скажу, что Instagram всеми силами препятствует возможности сохранять фотографии пользователей. Моё мнение — если боишься, что твой бесценный контент кто-то скачает, не выкладывай его в интернет. Я не поощряю пиратство, но мне смешно, когда айтишники из Instagram борются с возможностью сохранения фотографий на диск. В пору подавать коллективный иск на Apple за возможность копирования контента без разрешения автора простым нажатием двух кнопок!
Зуб на Instagram
И если сохранять фотографии не запрещено здравым смыслом, то правилами использования API Instagram это делать запрещено.
Мой предыдущий опыт работы с API показал, что Instagram довольно наплевательски относится к сторонним разработчикам и в любой момент может поменять правила игры и заблокировать часть функций. Так было с моим приложением Feeds, они просто запретили ставить лайки пользователям приложения (про подписки я уже и не говорю, их закрыли с самого начала). После моей просьбы объяснить происходящие, был дан ответ, что от Feeds исходит слишком много активности, похожей на спам.
Что мы имеем в итоге: модерация в Instagram непредсказуема, API запрещает скачивать фотографии пользователей, а залезть в App Store с таким приложением — та ещё задачка. Поэтому я отказался от API с их правилами и решил пойти другим путём — через web-интерфейс Instagram. Конечно, пришлось покопаться в том, как устроены их собственные AJAX-запросы.
Название
Отказ от API дал возможность проигнорировать ещё одно глупое требование — использование корней «insta» и «gram» в названии. Рабочее название приложения было Take, но потом я решил воспользоваться полученным преимуществом и придумал InstaBro, как благозвучное, подразумевающее получение «братской» помощи и являющееся сокращением от Instagram Browser.
Дизайн и возможности приложения
За основу я взял дизайн стандартного приложения Image Capture для импорта фотографий и видео с внешних медиаустройств. Все просто — слева список аккаунтов, справа фотографии в виде таблицы или сетки из превью. Добавил возможность быстрого просмотра видео или фото в максимальном разрешении по пробелу. Для просмотра аккаунтов, закрытых настройками приватности, нужно авторизоваться (если у вас есть доступ к ним). Остальное по мелочам — горячие клавиши, экспорт данных и сохранение медиафайлов с разбивкой по подкаталогам, конечно.
App Store
Когда моя идея воплотилась в жизнь, приложение вышло очень даже полезным. Мне, конечно же, захотелось продавать его через Mac App Store баксов, эдак, за 5-6. Тем более я знал о наличии как минимум одного менее «юзабельного» аналога.
«Пропесочивание»
Когда я начал проходить знакомую по iOS процедуру размещения приложения в App Store, оказалось, что не все так просто. Последние несколько лет Apple пытается контролировать софт, который распространяется через Mac App Store, и называется это «Sandboxing». Суть его заключается в том, что для приложения создаётся своё изолированное окружение (песочница) — структура папок для хранения данных, частично копирующая стандартную (в ~/Library) и явно указанные полномочия на доступ к ресурсам компьютера, такие как: чтение и запись файлов, доступ к сети, доступ к стандартным пользовательским папкам и другие.
Тут у разработчиков возникает две проблемы. Во-первых, не все полномочия доступны для песочницы. В таких случаях надо ходатайствовать о предоставлении «временного исключения» для приложения. Во-вторых, сам механизм работы песочницы накладывает отпечаток на удобство работы с программой. К примеру, пользователь должен явно выбирать каждую папку, к которой хочет иметь доступ приложение, что весьма неудобно в случае, скажем, файлового менеджера. Эти и другие препятствия, за которые ещё нужно отдавать 30% своих доходов привели к уходу ряда популярных приложений из Mac App Store, таких как SourceTree или Sketch.
Мне не потребовалось много времени, чтобы загнать InstaBro в песочницу, и тут начался (точнее продолжился) долгий процесс рассмотрения программы модераторами. В результате которого, моё приложение было отклонено. Формальной причиной отказа была «возможность скачивать пользовательский контент без явного разрешения со стороны сервиса». Ну что же, апеллировать тут особо не к чему, и моя бесславная схватка с модераторами закончилась ничем.
Привет, Интернет!
К счастью, на Mac App Store свет клином не сошёлся, и мне не хотелось, чтобы усилия пропали даром, поэтому я решил заявить миру о своём детище, обустроив для него тёплую ламповую домашнюю страницу. Тут пригодились старые навыки вёрстки: Bootstrap, S3, виджет Facebook, Google Forms и Google Analytics.
Lite версия
В дальнейшем я все-таки пропихнул в App Store lite-версию своего приложения без возможности скачивать фотографии, только лишь для того, чтобы она служила дополнительной рекламой. Из неё пришлось убрать любые упоминания, «побуждающие пользователей скачать основную версию, предназначенную для скачивания фотографий». ОК, я вернул эти упоминания после успешного прохождения модерации.
Анонс на Product Hunt
Итак, приложение есть, сайт тоже есть. Теперь нужен трафик. Недолго думая, решил, что заявить об InstaBro нужно прямиком на Product Hunt, излюбленном месте для анонсов всяких технических новинок и стартапов. Чтобы публиковать там что-либо, нужно получить инвайт. Мне удалось довольно легко выйти на человека, который публикует много анонсов на Product Hunt, и он с радостью согласился анонсировать InstaBro. А заодно выдать мне инвайт на правах автора.
Анонс состоялся 8 февраля. Это не было феерией, но и не превратилось в провал. Я поучаствовал в дискуссии, набрал больше 200 голосов, получил порядка 400 закачек сразу и несколько публикаций на других ресурсах.
Особенную популярность после публикации приложение получило в Южной Корее и Японии.
Полную статистику недели после анонса можно посмотреть на сайте.
Старт продаж
После очень даже неплохого старта я начал задумываться, как немного подзаработать. У меня была кнопка для внесения пожертвований через PayPal на сайте, которая принесла мне целых 20 баксов в первые дни, но что-то мне подсказывало, что таким способом я много не заработаю.
Я начал искать простые варианты монетизации приложений для Mac и вышел на сервис DevMate, отличное решение «все-в-одном» от киевских разработчиков.
Вот список того, что они предлагают:
- Базовая аналитика
- Управление лицензиями
- Автоматические обновления (на основе Sparkle)
- Обработка обратной связи
- Обработка краш-репортов
- Интеграция с сервисом оплаты FastSpring
Почти сразу после начала использования, разработчики объявили, что сервис полностью бесплатен! Удача чистой воды, тем более у такого сервиса практически нет аналогов.
Из серьёзных минусов — интеграция с FastSpring, чьи комиссии мне показались несколько завышенными по сравнению с конкурентами, а формы оплаты — устаревшей. Но количество плюсов явно перевешивало все недостатки, да головной боли поубавилось.
У FastSpring, кстати, есть своя очень привлекательная особенность — возможность вывода средств на дебетовую карту Payoneer MasterCard.
Модель монетизации
Осталось решить вопрос, каким образом брать с пользователей деньги. Я остановился на схеме, похожей на ту, что некогда использовали популярные файлообменники. Чтобы начать скачивать фотографии, пользователю надо выждать 40 секунд, после чего — качать фотографии по одной на низкой скорости. В полной версии можно скачать до восьми файлов одновременно, скорость при этом неограниченна.
Покупка лицензии происходит тут же, через приложение, а ключ приходит сразу после оплаты на почту — спасибо интеграции DevMate c FastSpring. Отказ от App Store даёт преимущество не только в размере комиссии, но и в гибкости предоставления функций. В DevMate, помимо прочего, есть возможность управления сроком действия выданных лицензий.
Каких-то баснословных денег приложение не приносит, но несколько покупок в день совершается. Что интересно, ни одной покупки из России не было, а самый большой процент оплаты после установки — в Германии.
В итоге
- Скачивать фотографии — можно!
- Swift — порадовал!
- Instagram API — в топку!
- Mac App Store — туда же!
- Product Hunt — легко!
- DevMate — супер!
- InstaBro — уже в сети.
Данная история опубликована в рамках рубрики Developer Story, где разработчики делятся секретами своей внутренней кухни.
Это бесплатно. Прочитайте правила.
Источник: