ДА, я прочитал всю документацию @developer.android.com и все понял, за одним исключением — для чего это было введено.
Поскольку все ответы на заказы из Google Play подписываются недоступным для всех закрытым ключом и проверяются парным открытым ключом (в моем случае на внешнем сервере, поэтому он также недоступен для третьего лица), просто (почти) нет способа подделка.
Все эти одноразовые номера — просто лишний способ обезопасить покупки. Более того, в документах ничего не сказано о ситуации, когда:
- Я покупаю товар;
- Создайте одноразовый номер и отправьте его в Google Play;
- Произойдет сбой, так что все мои известные одноразовые номера будут потеряны;
- Перезапустите мое приложение и получите обратный вызов от Google Play;
- ...И отклонить этот вызов из-за того, что он не распознал одноразовый номер!
В описанной выше ситуации пользователь платит за товар и не получает его, что позорно. Конечно, я могу сохранить одноразовые номера в каком-то файле и перечитать его, когда мое приложение вернется, но это нарушает все принципы для одноразовых номеров.
ИМХО кто-то только что сказал: «Эй, процесс верификации слишком прост, давайте добавим что-то еще со случайностью, это будет намного круче!». Так кто-то сделал.
Или вы не могли бы открыть мне глаза на какой-то другой вариант использования, который я пропустил? В противном случае я удаляю всю часть nonces из своего кода.