#ios #swift #in-app-purchase #icloud
#iOS #swift #покупка в приложении #icloud
Вопрос:
Вот странный для вас 🙂
У меня есть приложение для iOS, в котором в качестве покупки в приложении используется непотребляемый продукт, который пользователи могут купить. Если хотите, это своего рода пожизненная подписка.
Дело в том, что у меня была ошибка в моем коде, которая позволяла пользователям «подписываться» на мое приложение, нажав на кнопку восстановления покупок.
Сейчас я исправил ошибку, но у меня проблема. Примерно 50 пользователей сейчас подписаны, но никогда не платили за эту услугу.
Есть ли способ узнать, действительно ли пользователь заплатил за это как-то? Я хотел бы отказаться от подписки, если они не заплатили.
Система работает таким образом:
Пользователь нажимает на покупку, Apple заботится о покупке за меня, и при обработке очереди платежей, если покупка прошла успешно, я подписываю пользователя, добавляя его идентификатор iCloud в свою базу данных. Итак, единственная часть данных, которая у меня есть, — это их идентификатор iCloud и ничего больше. Я не знаю, какой идентификатор iCloud является «оплаченным», а какой — «мошенническим» 🙂
Ответ №1:
Вы можете получить квитанцию с устройства пользователя и проверить с помощью конечной точки Apple, чтобы узнать, есть ли у пользователя действительная покупка. В идеале вы должны взять квитанцию из приложения и отправить ее на свой сервер для выполнения проверки в вашем бэкэнде.
Проверьте эту документацию, чтобы получить квитанцию с устройства — https://developer.apple.com/documentation/storekit/in-app_purchase/validating_receipts_with_the_app_store
Проверьте эту документацию, чтобы позвонить и подтвердить получение с помощью конечной точки Apple — https://developer.apple.com/documentation/appstorereceipts/verifyreceipt
Комментарии:
1. Большое спасибо за ваш ответ! Я действительно попробовал это в среде изолированной среды со странными результатами. Я попробовал это со своей учетной записью (которая является платным пользователем в песочнице), и код для получения квитанции на телефоне не нашел квитанции. Затем я попытался получить квитанцию с серверов Apple, и она получила квитанцию. Но затем при попытке с неоплачиваемым вновь созданным пользователем он также обнаружил квитанцию для него. Можете ли вы немного объяснить, как это работает? Я ничего не могу найти в Интернете для этого.
2. Попробуйте совершить покупку в приложении, а затем проверьте, существует ли квитанция. Я никогда не сталкивался с такой ситуацией, действительно звучит странно. Что касается квитанции для пользователя-неплательщика — по моему опыту, у всех пользователей есть квитанция в кодировке base64. Но если вы передадите эту квитанцию в
verifyReceipt
API, он вернет все покупки. Вот почему я упомянул, что вам следует обратиться к конечной точке Apple с квитанцией base64. Вы не можете определить, совершил ли пользователь покупку, просто проверив, есть ли у пользователя квитанция в кодировке base64 на телефоне.3. Вот так, вот так! Я не проверял это в Apple, я предполагал, что если есть квитанция, то есть покупка. Документы Apple действительно неэффективны. Спасибо, добрый сэр!