Я устанавливаю и связываю реакцию с собственным React Native IAP, а также загружаю приложение в магазин игр, после чего он создает идентификатор продукта подписки. Но когда я запрашиваю подписку, я получаю эту ошибку
Ошибка
Идентификатор продукта подписки
const items = Platform.select({
ios: [
'dev.products.gas',
'dev.products.premium',
'dev.products.gold_monthly',
'dev.products.gold_yearly',
],
android: ['dev.products.gas',
'dev.products.premium',
'dev.products.gold_monthly',
'dev.products.gold_yearly',],
});
import React, { useEffect } from 'react';
import { View, Text, Button, Platform } from 'react-native';
import { requestPurchase, useIAP } from 'react-native-iap';
const ParchesCode = () => {
const {
connected,
products,
promotedProductsIOS,
subscriptions,
purchaseHistories,
availablePurchases,
currentPurchase,
currentPurchaseError,
initConnectionError,
finishTransaction,
getProducts,
getSubscriptions,
getAvailablePurchases,
getPurchaseHistories,
} = useIAP();
const handlePurchase = async (sku) => {
await requestPurchase({ sku });
};
useEffect(() => {
// ... listen to currentPurchaseError, to check if any error happened
}, [currentPurchaseError]);
useEffect(() => {
// ... listen to currentPurchase, to check if the purchase went through
}, [currentPurchase]);
return (
<View style = {{ flex: 1, }}>
<Button
title = "Get the products"
onPress = {() => getSubscriptions(items)}
/>
{subscriptions.map((product) => (
<View key = {product.productId}>
<Text>{product.productId}</Text>
<Button
title = "Buy"
onPress = {() => handlePurchase(product.productId)}
/>
</View>
))}
<Text>{JSON.stringify(connected)}</Text>
<Text>{JSON.stringify(connected)}</Text>
</View>
);
};
export default ParchesCode;
Я не получаю подписки, когда вызываю функцию getSubscriptions(). Мне нужен результат после вызова этого, но я получаю такую ошибку -> Возможный отказ от необработанного обещания (id: 0): требуется скус
Вот с рабочим примером. проблема связана с изменением кода, но документация не обновляется.
Вот список продуктов. код только для iOS.
import {requestPurchase, useIAP, withIAPContext} from 'react-native-iap';
const myProducts = [
'product.example.1',
'product.example.2',
];
const InAppPurchaseScreen = ({navigation}) => {
useEffect(() => {
getProductsAndPurchases();
}, []);
const getProductsAndPurchases = async () => {
try {
await getProducts({skus: myProducts});
} catch (error) {
//console.info("Products error: ", error)
}
};
}
export default withIAPContext(InAppPurchaseScreen);
Не за что. то же самое я сделал это в 7 дней. :(
Можете ли вы дать мне код requestSubscription man? Я делаю это так: const handlePurchase = async (sku) => { try { const result = await requestSubscription({skus:[sku]}); console.info(результат) } catch (ошибка) { console.info(ошибка) } };
Const PurchaseItemSearch = async () => { setCheckingPayment (true); try { await requestPurchase({ артикул: 'product1.example.1', }); } catch (ошибка) { // console.info(ошибка) setCheckingPayment(false); setCancelPurchase (истина); } };
Я добавляю этот код, но получаю ту же ошибку. const PurchaseItemSearch = async () => { try { await requestPurchase({ sku: 'com.mylocal.mounthly', }); } поймать (ошибка) { console.info (ошибка) }; }. [Ошибка: для покупки Android требуется артикул]
Попробуйте с SKUS собственностью. или может быть какая-то проблема с вашей подпиской.
Для Android вот рабочий пример react-native-iap с последней версией.
import { initConnection, getSubscriptions, requestSubscription } from 'react-native-iap';
const products = ['example_799_1m', 'example_1100_3m'];
useEffect(() => {
initConnection()
.catch(() => {
console.info('error connecting to store...');
})
.then(() => {
getSubscriptions({skus: products})
.catch(() => {
console.info('error finding products');
})
.then(res => {
console.info('products with offerToken', res);
// store/handle response
});
});
}, []);
const handleRequestSubscription = () => {
requestSubscription({
sku: productId,
...(offerToken && {
subscriptionOffers: [
{
sku: productId, // as a string
offerToken: offerToken, // as a string
},
],
}),
})
.catch(err => {
console.info('error buying product', err);
})
.then(async res => {
console.info('request subscription ',JSON.stringify(res));
// handle/store response
});
}
Спасибо, чувак, я пытался с 2 дней