С Новым Годом дорогие мои!!! Обзор последних событий…
Янв 02

Как только из Apple пришли новости о том, что с выходом прошивки 3.0 появится возможность организовать продажу дополнительного контента непосредственно из приложения (in-app purchase) я сразу решил, что задействую эту возможность в своей программе Flower Garden. Сама идея in-app purchase хорошо вписывается в идею цветочного магазина, где виртуальные садоводы могут купить дополнительные предметы для своего сада, поэтому вопрос стоял лишь во времени, которое потребуется на реализацию. По своему личному опыту я знал, что лишь малая часть пользователей, которые однажды купили приложения, тратят деньги и на дополнительный контент. Мое приложение Flower Garden очень хорошо приняли как игроки, так и новостные сайты, однако бестселлером игра никогда не была, а значит и покупки по системе in-app purchase с самого начала предполагались небольшими.

Ситуация поменялась когда Apple позволили встраивать in-app purchase в бесплатные приложения, а Flower Garden как раз был бесплатен, поэтому аудитория пользователей удвоилась.

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

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

Для тех из вас, кто знаком с приложением Flower Garden, я предлагаю ознакомится со списком дополнительного контента,  который я придумал:

  • Дополнительный сад с 12-ю горшочками.flowershop11
  • Удобрение, которое ускоряет рост растений. Удобрение является потребляемым, а дозировка применения фиксирована. После израсходования удобрение можно купить снова.

Кроме того для бесплатной версии Flower Garden можно приобрести контент, который доведет функционал приложения до платного аналога:

  • Дополнительные горшочки в главном саду.
  • Дополнительные семена.
  • Бонусные семена.

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

В этом и других постах, я расскажу о своем опыте применения in-app purchases,  дам некоторые подсказки, расскажу о хитростях, поделюсь мыслями о том, как это может помочь в борьбе с пиратством, и поведаю, сколько же продаж делается посредством  in-app purchases.

Показ ассортимента.

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

Однако, я считаю, что процесс реализации всего этого должен быть немного проще, потому что последовательность тех действий, которые нужно сделать достаточно сложна. Для тех, кто хочет сделать настоящий продвинутый магазин это подходит, но в 99% случаях разработчики просто хотят что-нибудь продать и на этом все. Заставлять нас пройти все эти шаги излишне. Упрощение всего этого было бы неплохим дополнением к SDK.

Получение каталога.

Первый шаг к реализации in-app purchases - это получение списка контента, который вы хотите продавать в своем магазине. Хорошо то,  что этот список можно держать где-нибудь у себя на сервере, потому что у вас есть возможность изменить ассортимент, не прибегая к обновлению всего приложения.  На каталог Flower Garden вы можете взглянуть здесь.

Получение информации о продукте.

Вторым шагом вы должны предоставить информацию о продаваемом контенте,  которая берется из App Store. Для этого нужно создать набор ID для продуктов.

Вот код, который я использовал в Flower Garden для запроса ID:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
NSArray* products = m_appData->m_shopCatalog.m_products;
NSMutableSet* productIds = [[NSMutableSet alloc] initWithCapacity:32];
for (int i=0; i<[products count]; ++i)
{
ShopProduct* product = [products objectAtIndex:i];
if (!product.m_alreadyIncluded)
[productIds addObject:product.m_id];
}

SKProductsRequest* request = [[SKProductsRequest alloc] initWithProductIdentifiers:productIds];
request.delegate = self;
#ifdef WORK_WITHOUT_APP_STORE
[self productsRequest:request didReceiveResponse:nil];
#else
[request start];
#endif
[productIds release];

В этом коде есть пара интересных мест.

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

Следующий интересный момент - это #ifdef. Симулятор не может обратиться к StoreKit. Симулятор вылетает с окном, в котором объясняется, почему это происходит, но факт в том, что это происходит. Все это означает, что работу вести придется непосредственно на iPhone, а отладка кода на устройстве это далеко не весело. Думаю, этот факт повлиял и на количество времени, которое я потратил на реализацию проекта. #ifdef - это моя попытка по максимуму использовать симулятор при отладке.  Надеюсь, в следующих версиях SDK это исправят.

Показ наименований.

Через некоторое время после посылки запроса на получение информации о продукте мы поучаем ответ из App Store. Ответ включает в себя подробную информацию по каждому из наименований, которые были запрошены, название и цену. Эта информация берется из in-app purchases, которые вы создаете в iTunes Connect. Это значит, что вам нужно держать в актуальном состоянии информацию и в каталоге (на сервере) и в iTunes Connect.

Отображение продукта.

flowershop2Через некоторое время после отправки запроса на информацию по продуктам мы получаем ответ - при условии рабочего соединения с Интернет и благоприятного расположения духа у App Store (к чести серверов Apple, стоит отметить их надежность). В ответе будут присутствовать дополнительные данные по каждому из запрошенных продуктов, включая локализованный вариант названия, описание и цену. Вся эта информация берется из созданных ранее в iTunes Connect in-app purchases. Соответственно, для всех групп данных обязательна синхронизация (каталог магазина плюс in-app purchases в iTunes Connect).

Обратите внимание: ситуация существенно осложняется тем, что до сих пор все делалось асинхронно (и такая же асинхронность ждет нас и на множестве оставшихся этапов). Что же предпринять на текущий момент? Отправить пользователя к другим частям программы? Заблокировать и сделать пользовательский интерфейс модальным? Я предпочел второй вариант - с учетом простоты кода и интерфейса для пользователя.

Теперь можно отображать продукты в магазине. В нашем случае я остановился на интефейсе, во многом аналогичном App Store для iPhone. Делая ставку на него, я руководствовался тем, что такой интерфейс уже хорошо знаком пользователям. Таким образом, цветочный магазин представляет собой таблицу со всеми доступными позициями. Щелчок на ячейке вызывает окно с подробной информацией и описанием каждого продукта.

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

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

Текст оригинальной статьи на английском языке [здесь]

Уважаемые читатели, данный материал был переведен и подготовлен к публикации проектом LookApp.ru, при публикации на другом сайте ссылка на LookApp.ru обязательна.

1 звезда2 звезд3 звезд4 звезд5 звезд (12 голосов, средний: 4.92 из 5)
Загрузка ... Загрузка ...


One Response to “Уроки iPhone SDK: (Часть 1) Все о In-App Purchases: Показ наименований магазина”

  1. 1. akuba Says:

    а когда же будет продолжение?

Оставьте комментарий