Друга частина моєї серії про розробку незалежних продуктів
У попередній статті я описав ресурси для визначення потреби, розробки незалежного застосунку та його випуску з погляду iOS-розробника. За обмежених ресурсів мені вдавалося завершувати лише утиліти, доступні в Apple App Store.
Ця стаття присвячена розробці повнофункціонального продукту для різних платформ, проблемам, що виникають, та їх розв'язанням. Я розповім, як поступово побудував повну екосистему продукту з офіційного облікового запису WeChat, мініпрограми й застосунку.
1. Цілі продукту
У широкому сенсі мета продукту — це цінність, яку він дає. Навіть за наявності сценарію використання продукт без цінності, який не заробляє грошей і має дуже мало користувачів, має мало підстав для існування.
Або можна почати ще ширше — з бачення продукту…
Стоп. Поки не думайте про все це, інакше продукт може так і залишитися у ваших нескінченних фантазіях.
Коли ресурси, люди й інвестиції обмежені, мета стає чіткою: які проблеми має розв'язувати продукт або які функції він повинен надавати?
Наприклад, коли я створював File Manager, MVP мав чітку мету: передавати файли між телефоном і комп'ютером.
Завершення MVP природно привело до інших вимог. Частина походила з моїх планів на продукт, але більше — з відгуків користувачів:
- 1.0.0 Передавання файлів між телефоном і комп'ютером
- 1.1.0 Перегляд або відтворення зображень, відео- й аудіофайлів
- 1.2.0 Групування, переміщення, видалення, стиснення й поширення файлів
- 1.3.0 Удосконалення програвача
- 1.4.0 Додавання перевірки безпеки: графічні ключі й біометрія
- 2.0.0 Додавання вбудованих покупок
- 2.1.0 Додавання сканування документів
- …


Виберіть мету. Вона не мусить бути великою, але має бути здійсненною. Зосередьтеся на чомусь одному й продовжуйте, навіть якщо це здається помилкою: як дізнатися, не завершивши ◔ ‸◔? Спершу завершіть, потім оцініть результат.
2. Прототипи продукту
У попередній статті я згадував, що спробував багато інструментів прототипування й дійшов висновку: за час створення прототипу я встиг би зібрати екрани за допомогою xib.
Тут я собі суперечу ,,Ծ‸Ծ,,
Такі думки зрозумілі, коли створюєш особисту утиліту без подальшого плану й лише прагнеш завершити її та випустити.
У міру розвитку продукту підхід «зробив крок — подумав про наступний», без прототипу чи плану, створить серйозні труднощі для майбутньої розробки. Проєктування прототипу — це насправді впорядкування логіки продукту.
Ось кілька інструментів прототипування. Зараз я найчастіше користуюся MockingBot.
3. Керування проєктом
Після самостійної розробки й випуску iOS-застосунку я помітив серйозну проблему: я не мав уявлення про керування проєктами. Працював, коли мав час або згадував, і нічого не робив, коли лінувався.
Це був мій продукт, який я сам проєктував і розробляв. У MVP, найімовірніше, не було користувачів, які платять, тож я не відчував відповідальності перед ними.
Це дуже сповільнює проєкт. Тривала робота без плану може навіть його занапастити.
Після кількох років керування ітераціями на роботі я виявив, що інструменти керування проєктами добре підходять і для особистих проєктів. Коли є чіткі цілі продукту й логічно узгоджений прототип, розбиття роботи на завдання стає природним кроком.
Для керування проєктом я використовую coding.net; там можна також розміщувати вихідний код.

Діліть завдання на частини, які вимірюються годинами. Так ними легше керувати й простіше писати тестові сценарії. Зараз у мене звичка завершувати тестові сценарії до написання коду. Це необхідно.
Прототип упорядковує логіку продукту, а тестові сценарії — деталі реалізації. Повні тестові сценарії допомагають реалізувати правильну бізнес-логіку ✅ й запобігти багатьом помилкам у ній ❌.
4. Вибір технологій
Досі все це було підготовкою; до розробки ми ще не бралися. Головна складність у тому, що розробник лише один — я, а побудувати хочеться повну екосистему з офіційного облікового запису WeChat, мініпрограми й застосунку.
Потрібні навички розробки мініпрограм, iOS і Android. Опанувати мову програмування не так важко, але реалізувати ту саму бізнес-логіку тричі — це втричі більше зусиль. Це явно нереалістично.
Зазвичай можна використати веб для кількох платформ або навіть відмовитися від застосунку й зосередитися на офіційному обліковому записі та мініпрограмі. На ранньому етапі, коли потреби продукту слід швидко перевіряти, це цілком розумний підхід.
Короткий пошук показує, що кросплатформних технологій чимало. Щоб створити застосунок і мініпрограму з однією кодовою базою для трьох платформ, можна використати Uni-App. Він використовує фронтенд-фреймворк Vue.js, а підтримку iOS і Android забезпечує Weex.
Для особистих чи невеликих комерційних продуктів цього достатньо.
5. Керування даними
Коли підхід до мініпрограми й застосунку визначено, залишається ще одне найважливіше запитання: де зберігати дані?
Для утиліти достатньо локального зберігання в застосунку. Але що, як мета — інформаційна платформа з повноцінною системою користувачів або навіть складніша спільнота з користувацьким вмістом?
Uni-App пропонує власний сервіс uniCloud. Серверну частину можна розробляти на JavaScript, а мініпрограми й застосунки можуть користуватися сервером без доменного імені.
Я вибрав інший підхід: розмістити дані на безсерверній платформі LeanCloud. Мініпрограма й застосунок звертаються до розміщеної бази даних через JavaScript SDK LeanCloud.
Її тариф для розробки підтримує 30 000 безкоштовних API-запитів на день і також надає SMS-сервіси. Цього достатньо, щоб створити систему користувачів, вивантажувати дані користувачів і отримувати дані платформи.
Коли запити перевищують ліміт тарифу для розробки, продукт уже має певну кількість користувачів. Гадаю, на той момент дохід від трафіку має покривати комерційний тариф з оплатою за використання.
Хитрий спосіб отримати дані
Що робити, якщо ви хочете створити погодний чи інформаційний застосунок, але не маєте даних про погоду або новин?
У Китаї є багато майданчиків з API, зокрема:
та інші.
Ці майданчики пропонують і платні, і безкоштовні API.
Якщо продукт має добрий спосіб монетизації трафіку, розгляньте платні API.
Якщо ні, можна скористатися безкоштовними лімітами. Але пробні 100 запитів легко витратити ще під час тестування. Що тоді?
Можна поєднати безсерверну базу даних LeanCloud із майданчиком API. Наприклад, для щоденної погоди спершу зверніться до бази. Якщо даних немає, запитайте їх на майданчику, а потім збережіть у базі.
А якщо 100 запитів усе одно не вистачить на всі міста? Зберігайте дух безкоштовних можливостей і зареєструйтеся на кількох платформах.
6. Запуск і експлуатація
На цьому етапі ми завершили розробку мініпрограми, застосунку й сервера. Як усе запустити?
Із мініпрограмами порівняно просто: на платформі офіційних облікових записів WeChat дотримуйтеся інструкцій для подання заявки на мініпрограму.
Для випуску на iOS потрібен платний обліковий запис розробника. Це бар'єр, але для тривалої роботи я рекомендую оформити його на сайті Apple для розробників. Зараз це просто: завантажте застосунок Developer на iPhone й оплатіть там.
Для поширення на Android потрібна реєстрація авторського права на програмне забезпечення. Звичайна заявка може зайняти 1-2 місяці; також можна заплатити сторонньому посереднику за оформлення.
Продовжуючи тему безкоштовних можливостей: де зберігати зображення, аудіо й відео для рекламно-інформаційних блоків у застосунку та мініпрограмі?
Медіатека офіційного облікового запису може розв'язати цю проблему. Збережіть там зображення, аудіо й відео, отримайте їхні оригінальні URL, і застосунок із мініпрограмою зможуть до них звертатися.
7. Отримання доходу
Простий спосіб монетизувати трафік — реклама.
Однак вимоги платформ до участі видавців постійно зростають, тож незалежним розробникам важко підключити рекламу.
Uni-App пропонує підключення одним натисканням; дивіться документацію.
Коли офіційний обліковий запис збере аудиторію, він може ввімкнути рекламні місця всередині статей.
Мініпрограма може ввімкнути монетизацію для видавців після досягнення 1000 унікальних відвідувачів.
8. Підсумки
Тепер ми побудували екосистему з офіційного облікового запису WeChat, мініпрограми й застосунку, описану на початку.
Дотримуючись цих кроків, я пройшов цей процес для трьох продуктів. Відскануйте коди, щоб спробувати:
