2011-02-01 2 views
2

у меня есть некоторые сомнения по поводу сделки квитанций поверок:iPhone в приложении покупки: проверка получение

  • почему внешний сервер необходимо? Почему я не могу просто связаться с http://buy.itunes.apple.com прямо с iPhone?
  • Что делать, если этот внешний сервер выключен или квитанция недействительна? Как сообщить об этом в очередь оплаты? finishTransaction все равно покажет «предупреждение о платеже», потому что транзакция была действительно успешной, и я предполагаю, что это смутит пользователей.

Извините, если я неправильно понял поток покупок в приложении или мои вопросы недостаточно ясны. Благодарю.

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

+0

Вы звонили в Apple? Это то, что вы должны проверить с ними. Кроме того, вы можете отправить свое приложение, как вы думаете, оно должно быть. Оставьте заметки о просмотре, а затем группа обзора вернется к вам с результатами обзора. Напишите подробное объяснение своего вопроса в примечаниях к обзору. – Moshe

+0

@Moshe: Я думал, что это может быть общей проблемой. Что другие, кто уже реализовал покупку в приложении, когда квитанция недействительна? – pt2ph8

+0

Я не знаю. Я никогда не делал покупки в приложении. Я просто предлагал, что бы я сделал. Я снял этот вопрос. Возможно, я скоро приготовлю покупки в приложении, и я хочу знать, что вы получаете. Кроме того, требуется ли для тестовой учетной записи использовать кредитную карту или просто адрес электронной почты? Удачи! – Moshe

ответ

8

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

  1. Пользователь инициирует в приложении покупки
  2. После завершения приложение запрашивает сервер для проверки
  3. Вы подтвердите получение с Apple: если это действительно, вы можете выполнять любые действия, связанные с покупкой (разблокировка/доставки контента, зарегистрировать подписку ...)
  4. приложение удаляет транзакцию из очереди (finishTransaction)

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

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 

будет называться позже.

Но Если вы обнаружили, что квитанция недействительна, вы должны завершить связанную транзакцию. Если нет, у вас могут быть дополнительные транзакции, живущие вечно в очереди транзакций. Это означает, что каждый раз, когда ваше приложение запускается, paymentQueue:updatedTransaction: будет вызываться один раз за транзакцию ...

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

+0

Спасибо за разъяснения! – pt2ph8

+0

- (void) paymentQueue: (SKPaymentQueue *) queue updatedTransactions: транзакции (NSArray *) на самом деле вызываются, но transaction.transactionState - это «SKPaymentTransactionStateFailed», а transaction.error.code - SKErrorPaymentCancelled. – Nick

1

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

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