Isacknowedgedandroid всегда ложный для расходного продуктаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Isacknowedgedandroid всегда ложный для расходного продукта

Сообщение Anonymous »

Описание
В первый раз, когда я реализую покупку в приложении, так что у меня может быть немного меньше знаний обо всем жизненном цикле IAP. У меня есть только продукты в приложении для покупки виртуальных монет, которые пользователь может купить столько раз, сколько ему нравится, следовательно, следовательно, будет правдой для моего дела.
Моя реализация, если IAP можно суммировать до трех изменений: < /p>
  • точка записи приложения, в котором есть мой навигатор и т. Д. .tsx загружается в любом случае, т. Е. Auth или Uth-Auth Users, где я добавил покупку uppadatedlistener , и это также, где происходит FinishingTransaction .
  • buycoins.tsx < /Code> Экран - это то, где я получаю продуцирование , а также requestPurchase при нажатии кнопки покупки.
Для всех трех Точки выше - это код:
app.tsx

Код: Выделить всё

  useEffect(() => {
const initIAP = async () => {
try {
await initConnection();
if (Platform.OS == 'android') {
await flushFailedPurchasesCachedAsPendingAndroid();
} else {
// TODO: Add code to handle iOS purchases
// await clearTransactionIOS();
}
} catch (error) {
console.log('Error initializing IAP: ', error);
}
};

initIAP();

return () => {
endConnection();
};
}, []);
home.tsx

Код: Выделить всё

  const {
currentPurchase,
finishTransaction,
getProducts,
} = useIAP();

useEffect(() => {
const subscriptionListener = purchaseUpdatedListener(
async (_purchase: Purchase) => {

if (currentPurchase) {
//TODO: Send the receipt to the server
await finishTransaction({
purchase: currentPurchase,
isConsumable: true,
});
console.log(
'currentPurchase @ subscriptionListener: ',
currentPurchase.transactionReceipt,
);
}
},
);

return () => {
subscriptionListener.remove();
};
}, []);
buycoins.tsx

Код: Выделить всё

  const handleGetProducts = async () => {
try {
if (constants.productSkus) {
await getProducts({ skus: constants.productSkus });
}
} catch (error) {
errorLog({ message: 'handleGetProducts', error });
}
};

const handleProductPurchase = async (sku: Sku) => {
try {
let purchaseParams: RequestPurchase = {
sku,
andDangerouslyFinishTransactionAutomaticallyIOS: false,
};

if (Platform.OS === 'android') {
purchaseParams = { skus: [sku] };
}

await requestPurchase(purchaseParams);
} catch (error) {
console.log('err: ', error);
setIsLoading(false);
}
};
ожидаемое поведение
Когда я покупаю, он успешно проходит через /code> я получаю: < /p>

Код: Выделить всё

{"orderId":"ABC123","packageName":"com.MYAPP.TEST","productId":"passtest","purchaseTime":1234,"purchaseState":0,"purchaseToken":"safkhbvkhvbkfhbvfehbv","quantity":1,"acknowledged":false}
«Признанный»: false должен быть истинным, поскольку это расходной продукт, и как только пользователь покупает любой продукт, он должен вернуть True, потому что я позвонил его после того, как ожидал окончания. ..
скриншоты
n/a
среда: < /strong> < /p>

React-Cniate-IAP: 12.16.0 < /li>
React-Native : 0.75.4 < /li>
Платформы (iOS, Android, эмулятор, симулятор, устройство): эмулятор Android и физическое устройство < /li>
< /ul>
< hr />
[Необязательно] Дополнительный контекст < /strong> < /p>
Я иногда получаю ошибку в Finishing Transaction [Ошибка: Покупка не удалась с кодом: 8] < /code>

Подробнее здесь: https://stackoverflow.com/questions/793 ... le-product
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»