2016-02-16 2 views
0

Я потратил около 24 часов на внедрение системы Store Store IAP от Apple. Через 3 часа я получил «покупку», но последние 21 час я потратил впустую на выполнение всех сообщений о получении. Теперь я изо всех сил пытаюсь заставить openSSL работать (некоторая ошибка компилятора биткода), и я дошел до отказа.Проверьте, была ли приобретена покупка в приложении.

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

поток будет выглядеть так:

  • установить NSUserDefault к «истинной» после покупки
  • на каждом запуске приложения, если есть подключение к Интернету, проверьте еще раз
  • , если устройство не является подключено к Интернету, то NSUserDefault остается на «истинный»
  • если пользователь закаленный с NSUserDefault, он будет перезаписан, как только приложение подключается к Интернету снова
  • Если пользователь находит свой путь вокруг него, он заслуживает того, чтобы сохранить этот пункт, ни один пользователь на свете не может платить мне достаточно, чтобы провести еще один час на этом

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

Прошу прощения за довольно неформальный способ публикации прямо сейчас, но это первый раз, когда я думаю, что Google лучше работал с Android, чем Apple, с iOS. Есть трещины для буквально каждого приложения, так или иначе, система Google далека от пуленепробиваемой, но в конце концов, какая разница, если взломщик занимает 10 минут или 2 часа, чтобы манипулировать приложением?

Мне потребовалось 1 час, чтобы получать платежи за приложения, работающие в моих приложениях для Android, но то, что Apple требует здесь, смешно. Их «инструкции» вообще не помогают, это похоже на то, что они хотят сделать секрет, как это реализовать, и вы должны угадать.

+0

Не уверен, что я понимаю проблему openSSL с помощью битового кода?Вы не должны выполнять проверку валидации непосредственно из своего приложения на серверы Apple. Вы должны пройти через свои собственные серверы. И в любом случае SSL/TLS уже встроен в сетевой стек iOS, вам определенно не нужно связывать openSSL. – jcaron

ответ

2

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

В методе paymentQueue:updatedTransactions: проверьте transactionState каждой транзакции. Если это SKPaymentTransactionStatePurchased или SKPaymentTransactionStateRestored, то покупка (предположительно) действительна. Затем вы можете сохранить статус в NSUserDefaults или в базе данных.

Не забудьте осуществить восстановление покупок.

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

+0

Большое спасибо. Я не буду пытаться это сделать до следующей недели, но он выглядит довольно приличным, и его количество добавляется в NSLogs, которые я использую везде в этих методах. Я, должно быть, серьезно неверно истолковал Руководство по программированию. Проведите замечательную неделю! – user2875404

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