Интеграция подписок на покупки в приложении iOS со сторонней системой

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

Есть ли способ интегрировать две системы подписки? Основная проблема заключается в том, что пользователи могут управлять подписками iOS через iTunes, и я не могу найти, можно ли получить информацию об этом и остановить подписку в существующей системе, если она остановлена ​​через iTunes.

Так можно ли получать уведомления об отписавшихся пользователях iTunes?


person Dmitry Khryukin    schedule 02.08.2013    source источник


Ответы (2)


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

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

Тем не менее, Apple может быть довольно капризной в своих решениях о том, что разрешено, а что нет в App Store. Я работал над приложениями, которые делали подобные вещи, но они были для довольно известных журнальных публикаций. Нет никакой гарантии, что они разрешат это для всех.

Обнаружение неподписанных подписок в App Store

Что касается подписок в App Store, когда пользователь приобретает подписку в вашем приложении, он получает квитанцию ​​в классе SKPaymentTransaction. Эта квитанция должна быть отправлена ​​на ваш внутренний сервер, чтобы убедиться, что она действительна, прежде чем вы предоставите пользователю доступ к чему-либо. См. Руководство по программированию покупок в приложении для более подробной информации.

Когда вы настраиваете тип подписки, вы указываете, как долго длится эта подписка. Таким образом, если вы регистрируете дату транзакции в SKPaymentTransaction при получении квитанции, вы можете точно определить, когда должна истечь эта подписка, добавив продолжительность подписки к дате транзакции.

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

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

Дополнительные сведения см. в подписках с автоматическим продлением. документация.

Тестирование автоматического продления подписки

Стоит отметить, что когда вы тестируете автоматически продлеваемые подписки в среде песочницы App Store, длина различных типов подписок значительно сокращается, чтобы упростить тестирование. Например, подписка на 1 неделю длится всего 3 минуты в среде песочницы. Вы можете увидеть полный список раз в Руководство разработчика по iTunes Connect.

person James Holderness    schedule 04.08.2013
comment
Благодарю. на самом деле это то, о чем я думал, но не мог формализовать. Кроме того: я нашел отличный пример такой интеграции — nytimes.com и связанное с ним приложение для iOS. - person Dmitry Khryukin; 05.08.2013

Таким образом, вы хотите, чтобы люди, купившие услугу на веб-сайте, могли использовать приложение точно так же, как если бы они приобрели его в разделе «Покупки приложений», а в разделе «Покупки приложений» люди могли присоединиться к услуге так же, как люди, которые присоединились через сайт? Насколько я знаю, Apple не позволяет вам платить через другие сервисы, как вы сказали, но допустим, кто-то покупает услугу из приложения. Что должно произойти, так это то, что деньги будут переведены в компанию. Затем после оплаты вы должны включить некоторый код, выполняющий то, что делает сайт после того, как новый человек оплатил услугу, поэтому создайте его учетную запись как платную учетную запись. Затем приложение также должно иметь экран входа в систему, где зарегистрированные пользователи (независимо от того, откуда они зарегистрировались) смогут войти в приложение и использовать сервис. Теперь проблема действительно в том, что если подписка будет остановлена ​​​​через iTunes, вы никогда не узнаете, хотя способ обойти это — проверить сервер этой компании, который должен отслеживать доход, поступающий с одного аккаунта. Затем, если этот пользователь прекратил платить (или прекратил подписку), вы сможете остановить службу из приложения. И перепроверять сервер на оплату следует после того, как пройдёт срок действия подписки, допустим еженедельная подписка должна проверяться каждую неделю. (Извините, я бы сделал этот комментарий, но у меня недостаточно репутации для этого)

person isklikas    schedule 04.08.2013
comment
как я могу автоматически проверять платежи, которые осуществляются через систему Apple? - person Dmitry Khryukin; 04.08.2013
comment
@DmitryKhryukin Ну, это довольно просто, сразу после покупки в приложении вы, очевидно, можете запустить какой-то код. Там вы либо создадите учетную запись, как я предложил, либо/и отредактируете переменную BOOL, которая по умолчанию имеет значение FALSE, которая будет находиться в plist, и приложение будет читать из этого plist. Затем вы сделаете это, чтобы изменить этот BOOL на TRUE, чтобы приложение могло выполнять автоматическую проверку. Если вы имели в виду проверить, активна ли подписка, я не имел в виду серверы Apple, я имел в виду сервер компании, который будет (и должен) регистрировать транзакции для каждой учетной записи. - person isklikas; 04.08.2013
comment
@DmitryKhryukin теперь, если вы обнаружите на сервере компании, что клиент не оплатил по истечении срока его подписки, то вы знаете, что его подписка закончилась. У вас также должна быть проверка NSDate, которая будет проверять дату события и измерять интервал от даты истечения срока действия. Если это отрицательное или нулевое значение, то вам следует проверить сервер компании для этой учетной записи, установить BOOL на FALSE, и только если недавно произошла транзакция, которая делает подписку действительной до более позднего дня, снова установите BOOL TRUE и подтвердите учетную запись как купил снова. - person isklikas; 04.08.2013
comment
@DmitryKhryukin как человек с респ. Из 350 заявленных невозможно сказать, когда истекает срок действия подписки. вы должны смотреть, что на вашем сервере и приложение должно попросить пользователя продлить подписку. также нет способа проверить, есть ли у текущего устройства активные подписки, кроме как зарегистрировать его на своем сервере и каждый раз спрашивать ваш сервер. все с этими подписками просто расстраивает. Зачем? Поскольку у Apple почти нет API для этого, покупки в приложении — это просто средство транзакции. - person isklikas; 04.08.2013