Open zelalsu opened 2 months ago
import React, {useState, useEffect} from 'react'; import { StyleSheet, Text, View, SafeAreaView, ImageBackground, Platform, } from 'react-native'; import {useDispatch} from 'react-redux'; import {SwiperFlatList} from 'react-native-swiper-flatlist'; import { requestSubscription, getSubscriptions, initConnection, endConnection, purchaseUpdatedListener, purchaseErrorListener, finishTransaction, } from 'react-native-iap'; import OptionCard from '../Components/Options/OptionCard'; import COLORS from '../constants/colors'; import {setPackages} from '../store/slices/package'; import {useGetByPackageQuery} from '../store/api/package'; import startApplePayTransaction from '../utils/paymentHelper'; import saveToDatabaseAndNavigate from '../utils/saveDataBaseAndNavigate'; import {ITUNES_SHARED_SECRET} from '@env';
const itemSkus = Platform.select({ android: ['global_package', 'national_package'], ios: ['global_package_ios', 'national_package_ios'], });
const PackageChosenScreen = ({navigation}) => { const [selectedValue, setSelectedValue] = useState(null); const [subscriptions, setSubscriptions] = useState([]); const dispatch = useDispatch(); const {data: responsePackage} = useGetByPackageQuery();
useEffect(() => { async function initIAP() { try { console.log('Initializing IAP connection...'); await initConnection(); console.log('IAP connection initialized');
const products = await getSubscriptions({skus: itemSkus}); console.log('Fetched products:', products); if (responsePackage) { const playConsolePackages = responsePackage?.data || []; const combinedPackages = playConsolePackages.map(playPackage => { const iapProduct = products.find( product => product.productId === playPackage.productId_PlayStore, ); return iapProduct ? {...playPackage, ...iapProduct} : playPackage; }); setSubscriptions(combinedPackages); dispatch(setPackages(combinedPackages)); console.log('Combined packages:', combinedPackages); } else { console.log('No responsePackage data available'); } } catch (error) { console.error('Error initializing IAP: ', error); } } const purchaseUpdateSubscription = purchaseUpdatedListener( async purchase => { const receipt = purchase.transactionReceipt; if (receipt) { try { if (Platform.OS === 'ios') { const isTestEnvironment = __DEV__; const appleReceiptResponse = await validateReceiptIos( { 'receipt-data': receipt, password: ITUNES_SHARED_SECRET, }, isTestEnvironment, ); if (appleReceiptResponse && appleReceiptResponse.status === 0) { await finishTransaction({purchase, isConsumable: false}); } } else { await finishTransaction({purchase, isConsumable: false}); } } catch (error) { console.error( 'An error occurred while completing transaction', error, ); } } }, ); const purchaseErrorSubscription = purchaseErrorListener(error => console.error('Purchase error', error.message), ); initIAP(); return () => { endConnection(); purchaseUpdateSubscription.remove(); purchaseErrorSubscription.remove(); };
}, [responsePackage, ITUNES_SHARED_SECRET]);
async function saveOptionToDB(value) { try { if (value.productId === 'free_package') { console.log('Ücretsiz paket seçildi. Firebase kaydediliyor...'); await saveToDatabaseAndNavigate(dispatch, navigation, value); return; }
if (Platform.OS === 'ios') { console.log('Apple Pay ile ödeme işlemi başlatılıyor...'); await startApplePayTransaction(dispatch, navigation, value); } else { const offerToken = value.subscriptionOfferDetails[0]?.offerToken; const sku = value.productId; const subscriptionOffers = [{sku, offerToken}]; if (!offerToken || !sku) { console.log( 'Geçersiz offerToken veya sku değeri. offerToken:', offerToken, 'sku:', sku, ); return; } console.log('Satın alma işlemi başlatılıyor...'); const purchase = await requestSubscription({subscriptionOffers}); console.log('Satın alma işlemi başarılı:', purchase); await saveToDatabaseAndNavigate(dispatch, navigation, value); } } catch (error) { console.error('Hata oluştu:', error); }
}
function renderData({item}) { return ( <OptionCard navigation={navigation} selectedValue={selectedValue} name={item.title} item={item} id={item.productId} onPress={() => { setSelectedValue(item); saveOptionToDB(item); }} /> ); }
return (
); };
const styles = StyleSheet.create({ safeArea: { flex: 1, backgroundColor: '#fff', }, containerStyle: { flex: 1, justifyContent: 'center', }, container: { flex: 1, }, chosenPackageStyle: { color: COLORS.PRIMARY_GRAY, fontSize: 25, alignSelf: 'center', fontWeight: 'bold', }, chosenStyle: { marginTop: 20, }, });
export default PackageChosenScreen;
did you add information about subscription items in app store connect?
import React, {useState, useEffect} from 'react'; import { StyleSheet, Text, View, SafeAreaView, ImageBackground, Platform, } from 'react-native'; import {useDispatch} from 'react-redux'; import {SwiperFlatList} from 'react-native-swiper-flatlist'; import { requestSubscription, getSubscriptions, initConnection, endConnection, purchaseUpdatedListener, purchaseErrorListener, finishTransaction, } from 'react-native-iap'; import OptionCard from '../Components/Options/OptionCard'; import COLORS from '../constants/colors'; import {setPackages} from '../store/slices/package'; import {useGetByPackageQuery} from '../store/api/package'; import startApplePayTransaction from '../utils/paymentHelper'; import saveToDatabaseAndNavigate from '../utils/saveDataBaseAndNavigate'; import {ITUNES_SHARED_SECRET} from '@env';
const itemSkus = Platform.select({ android: ['global_package', 'national_package'], ios: ['global_package_ios', 'national_package_ios'], });
const PackageChosenScreen = ({navigation}) => { const [selectedValue, setSelectedValue] = useState(null); const [subscriptions, setSubscriptions] = useState([]); const dispatch = useDispatch(); const {data: responsePackage} = useGetByPackageQuery();
useEffect(() => { async function initIAP() { try { console.log('Initializing IAP connection...'); await initConnection(); console.log('IAP connection initialized');
}, [responsePackage, ITUNES_SHARED_SECRET]);
async function saveOptionToDB(value) { try { if (value.productId === 'free_package') { console.log('Ücretsiz paket seçildi. Firebase kaydediliyor...'); await saveToDatabaseAndNavigate(dispatch, navigation, value); return; }
}
function renderData({item}) { return ( <OptionCard navigation={navigation} selectedValue={selectedValue} name={item.title} item={item} id={item.productId} onPress={() => { setSelectedValue(item); saveOptionToDB(item); }} /> ); }
return (
); };
const styles = StyleSheet.create({ safeArea: { flex: 1, backgroundColor: '#fff', }, containerStyle: { flex: 1, justifyContent: 'center', }, container: { flex: 1, }, chosenPackageStyle: { color: COLORS.PRIMARY_GRAY, fontSize: 25, alignSelf: 'center', fontWeight: 'bold', }, chosenStyle: { marginTop: 20, }, });
export default PackageChosenScreen;