Как проверить, скачал ли пользователь уже не расходные материалы Покупка в приложении

В своем заявлении я указываю нерасходуемый товар.

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

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

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

  1. вы уже приобрели это приложение, но оно еще не было загружено. Нажмите «ОК», чтобы загрузить его сейчас. в этом представлении предупреждений есть только кнопка ОК. когда мы нажимаем ОК, элемент управления переходит к - (void) failedTransaction: (SKPaymentTransaction *) transaction

  2. вы уже приобрели его. Нажмите «ОК», чтобы загрузить его снова бесплатно. В этом окне предупреждения есть две кнопки: одна - «Отмена», а другая - «ОК». При нажатии кнопки OK элемент управления переходит к транзакции - (void) completeTransaction: (SKPaymentTransaction *), что нормально.

Идея, почему транзакция демонстрирует такое странное поведение.

Благодарность


person rocksvick    schedule 03.05.2012    source источник


Ответы (3)


Я не понимаю, почему вы думаете, что вам нужно делать что-то другое.

Как вы сказали, система определяет, что пользователь уже владеет продуктом, и выдает пользователю предупреждение «нажмите, чтобы загрузить». Если пользователь выбирает загрузку, вы получаете SKPaymentTransaction, состояние которого либо «куплено», либо «восстановлено» (я забыл, какое именно). Затем вы просто предоставляете товар как обычно. Таким образом, пользователь знает, что с него не взимают плату во второй раз, и он получает продукт.

Если вы говорите, что хотите автоматически определять, какими продуктами владеет пользователь, при этом пользователю не нужно ничего делать: вы можете сделать это, только отправив restoreCompletedTransactions в SKPaymentQueue. Когда вы это сделаете, пользователю, возможно, придется ввести свой пароль iTunes. Я предпочитаю просто иметь кнопку «восстановить покупки» в моем пользовательском интерфейсе, чтобы пользователь знал, почему его просят ввести пароль.

person rob mayoff    schedule 03.05.2012
comment
я отредактировал свой вопрос. Теперь возникла другая проблема. Можете ли вы мне помочь? - person rocksvick; 03.05.2012
comment
у тебя есть идеи? Почему такое разное поведение в разных случаях в среде песочницы? - person rocksvick; 04.05.2012
comment
Я понятия не имею. Я не видел этой проблемы. - person rob mayoff; 04.05.2012
comment
когда я нажимаю кнопку "Купить", я хочу отменить транзакцию по истечении тайм-аута ... так что вы можете сказать мне, как отменить транзакцию - person rocksvick; 04.05.2012

Кажется, есть много проблем со стабильностью песочницы, см. Эту ветку https://devforums.apple.com/thread/164500?tstart=0 на форуме разработчиков Apple (требуется вход в систему). Я тестировал покупку в приложении с расходным материалом и никогда не видел случая 2, я получаю только случай 1 (как упоминалось на форуме). Так что вы можете считать, что вам повезло, что время от времени вы даже получаете 2) :(

person Katlu    schedule 30.08.2012

Столкнувшись с обеими проблемами, у меня есть следующие мысли о них

1] Многие разработчики, в том числе и я, решили первую проблему перезагрузкой устройства.

2] Для второй проблемы, поскольку «купленные» или «восстановленные» обратные вызовы вызываются при нажатии «ОК», поэтому продукт будет доступен сам по себе.

Надеюсь, это поможет !

person Eklavyaa    schedule 12.01.2014