Apple In-App Покупка и Обновление получения - PullRequest
1 голос
/ 02 марта 2020

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

Однако есть 2 основных момента, которые, хотя я читаю документы Apple и другие ответы в Интернете, я все еще не понимаю:

1. Когда пользователь восстанавливает свою покупку, обновляется ли квитанция?

Я провел несколько тестов в песочнице и увидел, что при восстановлении квитанция обновляется, и когда я проверяю квитанцию ​​через Проверка сервера iTunes возвращает JSON, включая последние транзакции. Это очень полезно, потому что даже если я закрываю / открываю приложение, квитанция приложения обновляется, и я всегда могу проверить ее, не обновляя ее. Однако в производстве это не сработало. Квитанция приложения не была обновлена ​​после восстановления покупок, и моих пользователей попросили непрерывно восстанавливать покупки. Кто-нибудь может ответить на этот вопрос?

2. Вызывает ли запрос на получение refre sh уведомление о запросе пароля Apple ID в процессе производства?

С предыдущего момента я думал, что все в порядке, я заставлю подтверждение refre sh после восстановления пользователем их покупки. Однако при разработке / песочнице меня просят вставлять пароль пользователя в песочнице каждый раз, когда я пытаюсь обновить sh квитанцию ​​(хотя я мог восстановить покупки без запроса пароля, прежде чем запросить ссылку sh). Я много читал об этом, и кто-то говорит, что это может не произойти в производстве. Есть ли у кого-нибудь разъяснения по этому поводу?

Примечание: я знаю, что при восстановлении / покупке я получаю транзакцию с квитанцией, однако мне нужно использовать квитанцию ​​приложения для проверки транзакций (и это также, что Apple говорит делать).

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 18 марта 2020

1. Обновление квитанции

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

Используйте его с умом, вызывая этот API, который может привести к отображению приглашений для входа в App Store.

2 , Когда пользователя просят войти в систему?

К сожалению, я видел это изменение, поэтому я не могу дать однозначный ответ. Чаще всего вызов для восстановления покупок не должен вызывать вход. Явное использование SKReceiptRefreshRequest будет.

Если пользователь не вошел в магазин, вызов любого API-интерфейса Магазина, например, попытка покупки или восстановление покупок может вызвать вход в поток.

Что говорит Apple

Из документов

При обновлении квитанции не создается новый сделки; он запрашивает последнюю копию квитанции в App Store. Refre sh квитанция только один раз; Обновление несколько раз подряд дает один и тот же результат. Восстановление завершенных транзакций создает новую транзакцию для каждой ранее завершенной транзакции, по существу, воспроизводя историю для вашего наблюдателя в очереди транзакций. Ваше приложение поддерживает свое собственное состояние, чтобы отслеживать, почему оно восстанавливает завершенные транзакции и как их обрабатывать. Многократное восстановление создает несколько восстановленных транзакций для каждой завершенной транзакции.

Моя рекомендация

  1. Сохраните значение ha sh последнего чека, который вы использовали на устройстве. Вы можете использовать это ha sh для проверки последней квитанции, чтобы вы знали, если что-то изменилось. Всякий раз, когда ваше приложение возобновляет работу, вы всегда можете проверить, отличается ли текущая квитанция ha sh от последнего кэшированного значения.
  2. Попробуйте отправить квитанцию ​​как можно скорее. Обычно, когда приложение запускается.
  3. Если пользователь пытается вручную восстановить покупки, я бы начал с вызова restoreCompletedTransactions. Это может вызвать вход в App Store, но часто менее вероятно. В большинстве случаев этого достаточно, поскольку квитанция на устройстве часто обновляется.
  4. Если пользователь пытается выполнить другую покупку с восстановлением, ИЛИ в случае сбоя вызова перейдите на SKReceiptRefreshRequest, чтобы гарантировать бесплатную доставку. sh квитанция.
  5. При использовании SKReceiptRefreshRequest, я бы порекомендовал обернуть это за UIAlertController. Я обычно показываю что-то, что указывает на сбой, и у меня есть кнопка «Повторить», которая использует запрос. Это вызовет новый вход в магазин.

Используйте restoreCompletedTransactions, чтобы воспроизвести все завершенные транзакции, о которых известно устройству.

0 голосов
/ 06 апреля 2020

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

1. Когда пользователь восстанавливает свою покупку, обновляется ли чек?

ДА , это немедленно, как для Песочницы, НО проблема в том, что квитанция НЕ включает покупки без расходных материалов . Другими словами, это означает, что квитанция будет включать в себя приобретенные подписки, но вы не найдете покупки непродовольственных товаров. Однако, когда пользователь восстанавливает или совершает покупку, вы получаете взамен транзакции, и вы можете извлечь непотребляемые продукты и сохранить эту информацию где-нибудь, например, UserDefaults или Keychain, чтобы вы могли использовать их, когда пользователь открывает ваше приложение. В остальном, лучший подход - всегда проверять и проверять квитанцию ​​при открытии приложения.

2. Вызывает ли запрос на подтверждение refre sh предупреждение о пароле Apple ID в процессе производства?

ДА . Конечно, это происходит в первый раз.

Спасибо Даниил и ru c за ответы, которые все еще могут быть полезны.

0 голосов
/ 19 марта 2020
  1. Когда пользователь восстанавливает свою покупку, обновляется ли чек?

Да, так и должно быть. Но это также звучит так, как будто вы проводите проверку на стороне сервера? В этом случае вы можете отправить любую квитанцию ​​от пользователя конечной точке /verifyReceipt, чтобы получить последний статус. Вам не нужно отправлять последнюю квитанцию, так как /verifyReceipt также обновит sh it.

Запускает ли запрос на получение refre sh уведомление, запрашивающее пароль Apple ID в процессе производства?

Нет четкой документации Apple по этому вопросу, но, безусловно, будет, если нет файл квитанции присутствует в приложении (редко в производстве). Но если вы выполняете проверку на стороне сервера (см. # 1), то вы можете отправить любую имеющуюся квитанцию, не нужно ее повторно подтверждать sh. Таким образом, вы обновляете квитанцию ​​только в том случае, если ничего не присутствует, что инициирует вход. Имейте в виду, что файл квитанции отсутствует на устройстве после установки в песочнице - только после покупки. Это сильно отличается от производства, в котором файл квитанции генерируется после установки.

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

В идеальном мире вы храните сервер квитанций и обновляете его там, но вы упомянули побочный проект так, что это звучит как излишнее. Тем не менее, готовое решение, которое правильно реализует все это и будет масштабироваться вместе с вами - например, RevenueCat - является еще одной альтернативой (отказ от ответственности: я там работаю).

...