[ioS] "Invalid Product ID"
azanli opened this issue · comments
Version of react-native-iap
2.1.0
Platforms you faced the error (IOS or Android or both?)
iOS
Expected behavior
RNIap.buyProduct('com.app.product.id')
should return an object.
Actual behavior
Screen displays "Invalid Product ID" and catches error:
{ [Error: Invalid product ID.]
line: 2060,
column: 26,
sourceURL: 'http://192.168.1.65:8081/index.bundle?platform=ios&dev=true&minify=false',
framesToPop: 1,
code: 'E_DEVELOPER_ERROR',
userInfo: null,
nativeStackIOS:
[ '0 O2Balloons 0x006c2c8f RCTJSErrorFromCodeMessageAndNSError + 104',
'1 O2Balloons 0x00669129 __41-[RCTModuleMethod processMethodSignature]_block_invoke_2.218 + 184',
'2 O2Balloons 0x005d5caf -[RNIapIos buyProduct:resolve:reject:] + 886',
'3 CoreFoundation 0x1b4c8354 <redacted> + 68',
'4 CoreFoundation 0x1b3ec2b9 <redacted> + 300',
'5 CoreFoundation 0x1b3efe87 <redacted> + 48',
'6 O2Balloons 0x0066ab9b -[RCTModuleMethod invokeWithBridge:module:arguments:] + 1806',
'7 O2Balloons 0x0070104d _ZN8facebook5reactL11invokeInnerEP9RCTBridgeP13RCTModuleDatajRKN5folly7dynamicE + 640',
'8 O2Balloons 0x00700bd1 _ZZN8facebook5react15RCTNativeModule6invokeEjON5folly7dynamicEiENK3$_0clEv + 176',
'9 O2Balloons 0x00700b1d ___ZN8facebook5react15RCTNativeModule6invokeEjON5folly7dynamicEi_block_invoke + 16',
'10 libdispatch.dylib 0x022d7467 _dispatch_call_block_and_release + 10',
'11 libdispatch.dylib 0x022e366f _dispatch_queue_serial_drain + 988',
'12 libdispatch.dylib 0x022daa39 _dispatch_queue_invoke + 872',
'13 libdispatch.dylib 0x022e3b31 _dispatch_queue_override_invoke + 342',
'14 libdispatch.dylib 0x022e576b _dispatch_root_queue_drain + 666',
'15 libdispatch.dylib 0x022e5471 _dispatch_worker_thread3 + 112',
'16 libsystem_pthread.dylib 0x1ad4687d _pthread_wqthread + 1040',
'17 libsystem_pthread.dylib 0x1ad4645c start_wqthread + 8' ],
domain: 'RCTErrorDomain' }
Tested environment (Emulator? Real Device?)
Emulator and real device.
Steps to reproduce the behavior
I followed every instruction in the documentation to the T and have scoured through pages of Google results as well as relevant resolved issues in this repo. My checklist to date:
- Completed an effective "Agreements, Tax, and Banking."
- Setup sandbox testing account in "Users and Roles."
- Signed into iOS device with sandbox account.
- Set up three In-App Purchases with the following status:
i. Ready to Submit
ii. Missing Metadata
iii. Waiting for Review - Enable "In-App Purchase" in Xcode "Capabilities" and in Apple Developer -> "App ID" setting.
- Delete app / Restart device / Quit "store" related processes in Activity Monitor / Xcode Development Provisioning Profile -> Clean -> Build
- Attempt
RNIap.buyProduct('com.app.product.id')
for each product all throwing the same error.
The only thing I haven't tried yet is fast forward time (I thought going to sleep last night might help! :) because it hasn't been a full 24 hours since I've created the sandbox account / initialized the in-app purchases / everything above basically. Please help, it seems as though many people were missing one of the steps above before it started working for them but I've tried them all and it still doesn't work. Am I missing something?
@friendly-robot Looks fine. Could you try 2.1.1
? There was some bug in 2.1.0
. Did you call getProducts
before buying?
@dooboolab Wow, upgrading really solved the issue. Thank you so much! I was starting to get really frustrated because everything seemed to be correct but it just wasn't working. I'm so happy now. Very awesome work on this library. And I love your name by the way! =D
Hi everyone, I have the same problem. I always get an empty array when calling getProducts
@hyochan @friendly-robot
me too
same here
Have you all checked above steps? I'll post this below again.
- Complete an effective "Agreements, Tax, and Banking."
- Setup sandbox testing account in "Users and Roles."
- Signed into iOS device with sandbox account.
- Set up In-App Purchases with the following status:
i. Ready to Submit
Enable "In-App Purchase" in Xcode "Capabilities" and in Apple Developer -> "App ID" setting. Delete app / Restart device / Quit "store" related processes in Activity Monitor / Xcode Development Provisioning Profile -> Clean -> Build
Xcode Development Provisioning Profile -> Clean -> Build
Please what does this step mean? is it Clean Build Folder
?
@djGrill To do it manually you can just go to your Project ios folder under your_app_name_here and delete build
What does this mean?
and in Apple Developer -> "App ID" setting.
And how can I do this exactly?
Quit "store" related processes in Activity Monitor / Xcode Development Provisioning Profile
and in Apple Developer -> "App ID" setting.
- Go to the Apple Developer Portal -> Identifiers -> Select your identifier
- Scroll down and check the "In-App Purchase" capability (which is currently disabled in my case because we haven't completed the tax and banking information step)
does this work on simulator?
cause I am getting empty array when I call getSubscriptions function.@hyochan
Signed into iOS device with sandbox account.
how to this?
@HappyCodingLover are you sure you submitted your purchase items to apple https://appstoreconnect.apple.com -> In-App Purchases and submitted items to the store? Besides you should have your first binary with the in app purchase capability in the store to the being reviewed at least to make your items available to your debug or release version.
Hi,
I have the following example and cannot make this works.... for getPorducts or getSubscriptions it return empty [] even if I checked everything that needs to be checked to enable in-app purchases.
Code example:
const testAction = useCallback(async (): Promise<void> => {
try {
RNIap.initConnection()
.then(async () => {
RNIap.clearProductsIOS();
RNIap.getProducts([
'prod_L4Wy7ChjBu4HpD',
'prod_L4WwpLJdMBs4Qk',
])
.then(resp => console.log('Products', resp))
.catch(error =>
console.log('error fetching the products', error),
);
RNIap.getSubscriptions([
'prod_L4Wy7ChjBu4HpD',
'prod_L4WwpLJdMBs4Qk',
])
.then(resp => console.log('Subscriptions', resp))
.catch(error =>
console.log(
'error fetching the subscriptions',
error,
),
);
})
.catch((error: any) =>
console.log('Connection Problems', error),
);
} catch (err) {
console.log({xxx: err});
}
}, []);