Из руководства StoreKit:
Если пользователь пытается приобрести нерасходуемый продукт или возобновляемую подписку, которую он уже приобрел, ваше приложение получает обычную транзакцию для этого элемента, а не транзакцию восстановления. Однако с пользователя не взимается дополнительная плата за этот продукт. Ваше приложение должно обрабатывать эти транзакции так же, как и исходные транзакции.
Это представляет собой огромную проблему в приложении, над которым я работаю. Мы лицензировали большой объем контента от издателя для продажи через покупку в приложении. Они требуют, чтобы каждый раз, когда мы продаем часть этого контента (т. Е. Пользователь платит нам), наш сервер вызывал API на своих серверах, чтобы сообщить о транзакции. Это делается для целей бухгалтерского учета и в конечном итоге используется для определения того, сколько мы платим им в конце месяца в соответствии с нашим соглашением с ними.
Я прочитал несколько предложений по SO и в других местах о том, как довольно часто вызывать restoreCompletedTransactions и поддерживать локальное понимание на устройстве того, что пользователь уже купил, поэтому им нельзя разрешить купить это снова. Мне кажется, что это должно быть реализовано на стороне сервера. Однако квитанции, которые мы получаем от серверов Apple, точно такие же для покупки и повторной покупки, как и обещано в руководстве StoreKit.
Если обратным вызовам платежей из StoreKit нельзя доверять как действующему механизму учета в такой ситуации («вам заплатили» или «вам не заплатили»), какие еще доступны аналитические данные о трафике транзакций в реальном времени? Я не думаю, что издатель, с которым мы работаем, будет счастлив, если мы скажем им, что нам нужно подождать 45 дней после окончания месяца, чтобы получить РЕАЛЬНУЮ заплаченную сумму в долларах из iTunes Connect.