В первый раз, когда я реализую покупку в приложении, так что у меня может быть немного меньше знаний обо всем жизненном цикле IAP. У меня есть только продукты в приложении для покупки виртуальных монет, которые пользователь может купить столько раз, сколько ему нравится, следовательно, следовательно, будет правдой для моего дела.
Моя реализация, если IAP можно суммировать до трех изменений: < /p>
- точка записи приложения, в котором есть мой навигатор и т. Д. .tsx загружается в любом случае, т. Е. Auth или Uth-Auth Users, где я добавил покупку uppadatedlistener , и это также, где происходит FinishingTransaction .
Код: Выделить всё
App.tsx - 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();
};
}, []);
Код: Выделить всё
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();
};
}, []);
Код: Выделить всё
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}
скриншоты
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
Мобильная версия