iOS Обработка локальной SKPaymentTransaction при использовании внутреннего сервера - PullRequest
0 голосов
/ 26 февраля 2019

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

Вот как работает мое приложение:

  1. Пользователь устанавливает приложение
  2. Пользователь создает аккаунт в потоке регистрации
  3. Пользователю предлагается выбрать план и оплатить в потоке регистрации
  4. Квитанция об оплате загружена на мой сервер, и я активирую его аккаунт в своембаза данных.
  5. Мой сервер регулярно опрашивает конечную точку /verifyReceipt, чтобы обновить учетную запись пользователя или отключить ее, в зависимости от того, какая последняя информация от Apple.(или используйте новое уведомление об обновлении статуса от Apple, оба служат одной и той же цели для получения последней информации о подписке на моем сервере)

Через месяц после возобновления подписки я знаю, что транзакция появится на SKPaymentQueue на устройстве пользователя.По этой причине во многих руководствах / документах рекомендуется, чтобы AppDelegate реализовывал протокол SKPaymentTransactionObserver, чтобы вы могли обрабатывать транзакции в любое время.

Но я не использовал AppDelegate.Я использовал контроллер представления при регистрации, когда пользователь выбирает свои планы по реализации SKPaymentTransactionObserver.

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

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

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

1 Ответ

0 голосов
/ 27 февраля 2019

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

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

Как @ Paulw11 сказал. Не полагайтесь на уведомления о состоянии .На момент написания они не предоставляют достаточно информации для обновления статуса пользователя, а именно любого рода идентификатора пользователя.Обновление квитанций от бэкэнда - путь.Если новая квитанция отправлена ​​на SKPaymentQueue (скажем, при продлении), вы можете обрабатывать ее как любое другое обновление квитанции для пользователя на вашем сервере.

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

Для восстановлениялогика, вам не нужно использовать метод восстановления StoreKit , если вы реализовали свои собственные функции восстановления через систему на основе учетной записи.Если это тот путь, по которому вы хотите идти, вам непременно следует прослушать SKPaymentQueue в AppDelegate, чтобы избежать как можно большего числа крайних случаев, когда вы можете потерять отслеживание чьей-либо подписки.Хорошая кнопка «Восстановить покупки» - отличный способ исправить несколько некорректный код покупки в приложении :)

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

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

...