застрял в песочнице

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

Спасибо,

Нава


person Nava Carmon    schedule 23.01.2010    source источник
comment
Вы нашли решение для этого?   -  person Roozbeh Zabihollahi    schedule 12.12.2013


Ответы (3)


Я знаю, что это старая тема, но у меня были проблемы с поиском решения, и я прошел через несколько утомительных проб и ошибок, пока не нашел решение, поэтому я подумал, что поделюсь им здесь, так как я не смог найти его где-либо еще.

Во-первых, убедитесь, что после каждой транзакции, которую вы вызываете:

    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

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

Чтобы исправить это, я добавил:

SKPaymentQueue *queue = [SKPaymentQueue defaultQueue];
for (SKPaymentTransaction *transaction in queue.transactions) {
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

ДО того, как я добавил наблюдателя транзакций, то есть это:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

Также в

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

функции, я добавил эту строку кода:

[queue finishTransaction:transaction];

в случаях SKPaymentTransactionStateRestored и SKPaymentTransactionStateFailed оператора switch. Не добавляйте его к купленному состоянию, потому что, насколько я знаю, вам не разрешено называть его завершением.

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

РЕДАКТИРОВАТЬ: (11/12/15)

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

Чтобы это остановить, я добавил:

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

с помощью функции tearDown (вызываемой applicationDidEnterBackground :) моего контроллера основного представления, прежде чем я обнулял свой объект диспетчера покупок в приложении. Я думаю, что произошло то, что я несколько раз добавлял объект в качестве наблюдателя транзакции, и это вызывало странное поведение. Судя по всему, это, похоже, полностью устранило проблему, потому что я не смог снова воссоздать ошибку.

person DukeH    schedule 11.11.2014
comment
Этот вопрос очень старый, но я верю, что вы нашли ответ. Спасибо, в любом случае - person Nava Carmon; 09.01.2015

У меня такая же проблема. Вот что решило мою проблему:

  1. Настройки -> Сброс -> Сбросить все настройки
  2. Настройки -> iTunes и App Store -> Выйти
  3. Удалить приложение
  4. Перезапустите приложение из XCode

ОБНОВЛЕНИЕ: я понял, что проблема в том, что в моем коде не было этой строки:

[[SKPaymentQueue defaultQueue] finishTransaction:tran];

Это означает, что моя старая транзакция не была завершена, и iPhone пытался завершить старые транзакции, которые произошли раньше. Когда я добавил эту строку в свой код, старый запрос пароля пользователя больше не выполняется.

person Roozbeh Zabihollahi    schedule 17.12.2013

То есть вы имеете в виду, что даже если вы перейдете в приложение «Настройки» -> «Магазин» -> «Выйти», вы все равно получите имя пользователя из предыдущей тестовой учетной записи? Вы также пытались удалить приложение со своего устройства? Это устранило аналогичную проблему для меня.

person phi    schedule 13.08.2010