Использование стандартной покупки в приложении

Я заканчиваю работу над приложением для iOS, которое позволяет пользователям просматривать, покупать и загружать элементы из большой мультимедийной библиотеки, размещенной в Интернете в приложении rails. Сейчас в библиотеке есть сотни предметов, которые можно купить, и, скорее всего, в будущем она значительно расширится.

Сначала я намеревался создать отдельный элемент для покупки в приложении (в iTunes Connect) для каждого элемента в библиотеке. Однако я решил, что будет сложно создавать все эти сотни предметов для покупок в приложении. Более того, я хочу иметь возможность вносить дополнения и изменения в приобретаемые объекты через мою CMS, не внося также изменений в iTunesConnect.

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

Одна вещь, которая заставляет меня нервничать в этом подходе, заключается в том, что пользователь может успешно совершить покупку в приложении с помощью Apple, но затем каким-то образом не сможет успешно подключиться к приложению rails. В этом случае покупка не будет записана, и контент не будет загружен, даже если пользователь совершил платеж. Кроме того, встроенные методы восстановления покупок Apple не работают, потому что покупаемый товар является универсальным. Только мое приложение rails запомнит, какие товары купил пользователь.

Итак, я собираюсь добавить к этому процессу много проверок ошибок и восстановления состояния. Чтобы убедиться, что он сможет восстановиться в случае возникновения проблем.

Я просто хотел рассказать об этом на случай, если у кого-то есть мнение или совет.

Спасибо!

Чарли

ОБНОВЛЕНИЕ

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

Было настоящей головной болью добавлять в iTC все, что есть в приложениях для покупок. интерфейс iTC ужасен. У меня было много проблем. Но в конце концов все они туда попали, и теперь все работает более-менее гладко.

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


person CharlieMezak    schedule 28.03.2011    source источник
comment
Хотя это кажется очень разумным способом обойти неуклюжий процесс создания идентификаторов продуктов, которые в настоящее время есть у Apple, мне было бы интересно узнать, одобрено ли Apple ваше приложение, в котором используется этот подход? Тот факт, что кажется, что они должны одобрить содержание каждого идентификатора продукта в приложении перед запуском, заставляет меня подозревать, что они могут не одобрить ...   -  person delany    schedule 18.05.2011
comment
Было ли ваше приложение одобрено с использованием универсального элемента для покупок в приложении?   -  person noodl_es    schedule 18.08.2011


Ответы (2)


После того, как от Apple вернется успешное сообщение в приложении ...

1. Лучше сохранить ProductID в словаре и удалить ProductID из словаря после успешного обновления сервера.

2. Игнорируйте любые события, пока транзакция не будет завершена.

3. Лучше отслеживать транзакции, то есть хранить информацию о транзакции (ProductID, пользователь, получатель транзакции) на стороне сервера.

3. По желанию вы можете предоставлять услуги с веб-сайта, чтобы пользователь мог написать вам, если он потерял свои деньги во время покупки приложения.

person Chandan Shetty SP    schedule 28.03.2011
comment
Спасибо за ответ. На самом деле сохранение productID не поможет, потому что я использую обычную покупку в приложении. Однако я храню метаданные о туре, который был приобретен на устройстве, до тех пор, пока транзакция не будет успешно записана на моем сервере. Таким образом, единственный способ, при котором что-то действительно может пойти не так, - это сбой моего кода для завершения серверной транзакции или если пользователь совершает покупку у Apple и каким-то образом стирает приложение со своего устройства до того, как транзакция сервера будет записана. Тем не менее, это заставляет меня нервничать! Как только они заплатили, я хочу быть уверенным, что они получат то, за что заплатили. - person CharlieMezak; 28.03.2011

Одна вещь, которую вы можете сделать, как только транзакция будет завершена, - это сохранить квитанцию ​​о покупке локально (в NSUserDefaults или другом методе сохранения, который вы используете), чтобы, если вы не можете «завершить покупку» (т.е. записать ее и загрузите свой контент с сервера) вы всегда можете возобновить его позже.

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

Кстати, вы не упомянули об этом, но на всякий случай: вы просто передаете квитанцию ​​о покупке от вашего клиента на сервер, верно? Это единственное, что вам нужно от транзакции, поскольку вы можете (и должны) затем проверьте квитанцию ​​в Apple и используйте ее для извлечения всей другой информации о покупке (например, идентификатора продукта и т. д.).

person André Morujão    schedule 28.03.2011
comment
Спасибо за Ваш ответ! Ваше первое предложение - это именно то, что я делаю. Меня беспокоит просто разрыв между покупкой в ​​приложении и записью ее на моем сервере, но, вероятно, это не будет очень распространенной проблемой. Ваше последнее предложение не сработает для моей системы, поскольку она у меня сейчас настроена. Это потому, что я использую общий продукт для покупок в приложении для всех покупок в приложении. В продукте, приобретенном у Apple, нет информации о том, какой продукт с моего сервера был фактически приобретен. - person CharlieMezak; 28.03.2011
comment
Хорошо, но хотя бы убедитесь, что цена, полученная из квитанции, соответствует цене, которую вы ожидали :) (в противном случае потенциально можно попытаться заплатить за что-то, используя квитанцию ​​для более дешевого продукта, то есть, если у вас есть несколько продуктов с несколькими ценами ). - person André Morujão; 28.03.2011
comment
Верно! Прямо сейчас есть универсальная цена на все предметы, но мне придется сделать что-то подобное, если у нас начнутся разные ценовые категории. - person CharlieMezak; 28.03.2011