I had also asked this question on the RevenueCat forum, but I felt the need to ask it here as well. https://community.revenuecat.com/general-questions-7/purchases-getproducts-returns-empty-array-3899
I can make purchases on the iOS side without any issues, but as indicated in the logs on Android, the list is coming up empty.
Configure
if (Platform.OS === 'ios') {
try {
Purchases.configure({
apiKey: REVENUE_CAT_IOS_API_KEY,
appUserID: user?.uid,
})
} catch (error) {
console.error('error configuring revenuecat for iOS', error)
await analytics().logEvent('error_configuring_revenuecat_for_ios')
}
} else if (Platform.OS === 'android') {
try {
Purchases.configure({
apiKey: REVENUE_CAT_ANDROID_API_KEY,
appUserID: user?.uid,
})
} catch (error) {
console.error('error configuring revenuecat for Android', error)
await analytics().logEvent('error_configuring_revenuecat_for_android')
}
}
This is where I am trying to fetch the products.
const purchaseStoryToken = async () => {
try {
useSetLoading(true)
const products = await Purchases.getProducts(['dk_story_token'])
console.log('fetched products', products)
const storyTokenProduct = products?.[0]
console.log('storyTokenProduct', storyTokenProduct)
await Purchases.purchaseStoreProduct(storyTokenProduct)
} catch (e) {
analytics().logEvent('error_purchasing_product')
console.log('error in purchaseStoryToken', e)
throw e
} finally {
useSetLoading(false)
}
}
LOG fetched products []
LOG storyTokenProduct undefined
LOG error in purchaseStoryToken [TypeError: Cannot read property 'identifier' of undefined]
I created APK and tested it on a real device as well as on the simulator. The result is the same.
I might have overlooked something, please allow me to know if more information is needed.
Questions: 1- Where should the 'dk_story_token' inside the 'Purchases.getProducts(['dk_story_token'])' code exactly come from? Where can I retrieve this information, within the Google Play Console or in Revenue Car's dashboard? Where did this string come from?
As seen in the first screenshot I provided, the 'dk_story_token' is present in the Apple Developer Console for in-app purchases, which is why I can make purchases on iOS. However, I cannot do the same on Android.
Shouldn't it be present and functional in the 'In-app Products' section that I created on Android? Why is this array coming up empty?
I have been using "getOfferings" and "getCustomerInfo" instead of "getProducts" and it is working.
import Purchases from "react-native-purchases";
// ... getPlatformKey
const apiKey = getPlatformKey();
Purchases.configure({ apiKey });
async function getPackages() {
try {
const offerings = await Purchases.getOfferings();
const packages = offerings?.current?.availablePackages || [];
// ... rest and catch
}
}
async function getActivePlans() {
try {
const results = await Purchases.getCustomerInfo();
const customerInfo = results?.customerInfo || results;
const activePlans = customerInfo.entitlements.active || {};
// ... rest and catch
}
}
async function purchasePkg(pkg) {
// pkg of packages form getPackages
try {
const results = await Purchases.purchasePackage(pkg);
// ... rest and catch
}
}