2011-03-16 5 views
24

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

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

  • всякий раз, когда пользователь покупает подписку, отправить квитанцию ​​на сервер для проверки его
    • если квитанция действительна, сохраните его на база данных
  • при загрузке приложения, попросите сервер, если квитанция для этого UDID существует (это выяснить, если пользователь имеет действующую подписку)
    • если да, то проверить, если Пункт РЭБ был добавлен в хранилище в диапазоне дат с момента подписки начальной до истечения даты
      • , если таковые имеются, уведомлять пользователя о тех пунктов, в некотором роде, и помечать их как свободно загружаемое

Правильны ли эти шаги? И если да, то почему документ Apple, говорят:

В большинстве случаев клиентское приложение IOS не нужно менять. Фактически, ваше клиентское приложение теперь упрощается, так как вы можете использовать тот же код для восстановления автоматически возобновляемых подписки, как и для восстановления неиспользованных продуктов. Это описано в разделе «Восстановление транзакций». Ваше приложение получает отдельную транзакцию за каждый период времени, когда подписка была возобновлена; ваша заявка должна проверять каждую квитанцию ​​отдельно.

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

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

Update:

Я понял несколько вещей, так как я отправил этот вопрос. Не стесняйтесь исправить меня, если я ошибаюсь.

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

Кроме того, Sylvian has posted подробно о его внедрении автоматических возобновляемых подписки, поэтому, по крайней мере, я знаю, что мое мышление не было слишком большим недостатком.

Теперь единственная проблема заключается в следующем: Как узнать, что у пользователя есть действительная подписка? Я могу хранить эту информацию на своем сервере, да, но как мне связать пользователя с завершенной транзакцией? Должен ли я сохранять UDID устройства?

+1

Вы должны проверить deforums.apple.com, а не вопрос. Никто еще не знает ответа, но разработчики обсуждают его там, – honcheng

+0

@honcheng Я разместил здесь, потому что я не мог найти там ответа. – pt2ph8

+0

Я борюсь с точно такими же проблемами, прежде всего с идентификацией «того же пользователя - другого устройства». У вас было еще больше с этим? –

ответ

8

Я думаю, что нашел решение. Он не требует дополнительного имени пользователя/пароля и, похоже, работает.

Примечание: Если вы считаете, что это неуместно, объясните причину в комментариях. Благодарю.

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

Мой веб-сервис возвращает только срок действия подписки или срок ее действия, а также другую информацию, такую ​​как длина подписки. Для этого он просто запрашивает сервер iTunes, как обычно, и проверяет, отличен ли ответ на состояние. 21006 означает, что срок действия подписки истек.

+0

Как вы обрабатываете пользователей с несколькими устройствами? –

+0

@Kai У меня есть кнопка «restore», которая вызывает «restoreCompletedTransactions», как и многие другие приложения do. – pt2ph8

+0

Разве это не слишком накладные расходы для серверов Apple? Я нормальный сохранил бы дату истечения срока от процесса проверки до базы данных, но я не могу доверять apple, потому что в режиме песочницы ежемесячная подписка заканчивается через 5 минут !! Почему? Есть ли лучший способ проверить длину подписки. Я читал в документе Apple, что длина подписки должна быть рассчитана приложением (или сервером). – NicTesla

-1

Насколько я понял, сервер Apple свяжется с вами (или с клиентом с его iPhone) и скажет «посмотрите, у меня есть действительная покупка для вас». Внутри приложения вы прочтете это сообщение и откройте соответствующий контент для использования. Следующим шагом будет рассказать серверу Apple, на который вы ответили на квитанцию, и сервер Apple не отобразит сообщение снова.

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

30

Вот как мы внедрили в App Purchase и, в частности, новые авто-возобновляемые продукты в моей компании.

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

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

Теперь нам нужно было выполнить некоторые задания CRON, которые выполняются каждый день: каждый день мы составляем список проходов, срок действия которых истекает, и мы спрашиваем Apple, если оригинальная квитанция остается действительной: волшебная вещь заключается в том, что в их ответьте, есть поле latest-receipt, который вставляет последние квитанции. Если это не то же самое, что у нас есть, мы понимаем, что подписка была обновлена ​​автоматически, мы сохраняем самую последнюю квитанцию ​​для следующей проверки cron, и мы обновляем учетную запись пользователя, чтобы продлить срок действия.

Надеюсь, это поможет.

+0

Спасибо. У меня есть вопрос: вы сказали, что обновили учетную запись пользователя в базе данных после того, как квитанция была проверена. Но что вы на самом деле имеете в виду с «учетной записью пользователя»? Это запись в вашей базе данных на основе устройства udid устройства? – pt2ph8

+0

Наши клиенты должны войти в систему, чтобы каждый веб-сервис знал о пользователе, вызывающем их. У нас есть запись в базе данных, в которой говорится, что у учетной записи есть подписка. – Sylvain

+0

Я видел, как много приложений делали это, не используя другой уровень управления пользователями, а только учетную запись iTunes. Как они это делают? – pt2ph8

-1

Если ваше приложение имеет какое-то управление пользователями, то есть вы используете имя пользователя/пароль для использования приложения, то вам необходимо поддерживать сервер для записи покупки/действительности текущего пользователя. Это применимо для обычной подписки и покупки без затрат. Но ... если вы используете новую автоматическую возобновляемую подписку, тогда невозможно поддерживать несколько пользователей в этом приложении, потому что: этот вид покупки не может быть выполнен несколько раз в течение периода подписки с использованием того же Apple ID из того же приложение, и я нашел, что это действительно раздражает и находит лучшее решение для этого случая, то есть, когда у меня есть несколько дочерних аккаунтов в приложении, но я хочу использовать тот же Apple-Id для покупки автоматической возобновляемой подписки для каждой учетной записи. И я думаю, что мне нужно использовать старую модель подписки. Любые новые мысли?

+0

Продолжается борьба с возобновляемой подпиской в ​​моем многопользовательском приложении. Обычная подписка работала нормально, но мы хотим использовать новые автообновляемые. Получение проблем при выборе другого productId (такого же типа и назначения) для каждого нового пользователя в приложении. :( – Tushar

+0

Вы получили автоматическое обновление для многопользовательского приложения? – Merkidemis

Смежные вопросы