Я разработал игру с внутриигровой валютой. Когда я тестирую игру (в настоящее время она работает на Alpha и закрывается внутри в Google Play) и пытается купить мои монеты, нажав кнопку только один раз, я получаю «Успешная покупка» несколько раз. В результате вместо покупки 100 монет я получаю иногда 200, иногда 500 монет, иногда 300 и т. Д. В электронном письме с подтверждением, которое я получаю из Google Play, произошла только одна транзакция. Вот код события покупки успешно:
public function _customEvent_100gold():Void
{
if((_adding100gold == false))
{
_adding100gold = true;
_byinggold = true;
_secondsbeforeclose = 0;
Engine.engine.setGameAttribute("gold", ((Engine.engine.getGameAttribute("gold") : Float) + 100));
trace("adding 100 gold");
_coinicon.setX((actor.getX() + (((((actor.getWidth()) - getFont(660).font.getTextWidth(("" + (Engine.engine.getGameAttribute("gold") : Float)), getFont(660).letterSpacing)/Engine.SCALE) / 2) + 20) - 45)));
purchasesUse("100gold");
purchasesGoogleConsume("100gold");
playSound(getSound(795));
saveGame("mySave", function(success:Bool):Void
{
runLater(1000 * 0.6, function(timeTask:TimedTask):Void
{
_pressedonce = false;
_adding100gold = false;
}, actor);
_coinicon.growTo(145/100, 145/100, 0.3, Easing.elasticOut);
runLater(1000 * 0.3, function(timeTask:TimedTask):Void
{
_secondsbeforeclose = 0;
_100gold.growTo(100/100, 100/100, 0.3, Easing.elasticOut);
_coinicon.growTo(100/100, 100/100, 0.6, Easing.elasticOut);
runLater(1000 * 0.3, function(timeTask:TimedTask):Void
{
_byinggold = false;
}, actor);
}, actor);
});
}
}
Так что, насколько я понимаю, мой логический «add100gold» должен препятствовать запуску этого кода более одного раза, только через 0,6 секунды после успешной покупки. Из моего журнала отладки я вижу, что этот код выполняется несколько раз почти одновременно. Странно то, что у меня есть другой продукт в приложении, который всегда посылает мне сообщение «Покупка не удалась», и я также получаю его на своем тестовом устройстве несколько раз подряд. Что также показывает, что он запускает сбойные события также несколько раз, а не один раз, как следует. Так как это исправить?
обновление: Я создал совершенно новую учетную запись Google и создал новый идентификатор продукта для своих 1000 монет в игре. Поэтому, когда я тестировал на своем устройстве, когда я нажимал кнопку, я купил 1000 монет, когда я нажал второй раз, я прошел через процесс покупки, но получил не 1000, а 2000 монет. Когда я нажал кнопку 3 раза, я получил 3000 монет. Кажется, проблема не в коде, а где-то между моим устройством и Google Play. Я могу что-нибудь проверить? Как будто я уже проверил способ оплаты и открытый ключ. Что еще?