Closed ahettlin closed 9 years ago
The load function populates self.list with your in app purchases defined in iTunes connect for your app. You'll need to get this setup or have fake data passed into your callback On Jan 8, 2014 2:30 PM, "ahettlin" notifications@github.com wrote:
I assume this happens possibly because my app is still very young and I haven't signed my application with my developer license, but it would be nice if this didn't crash my app because of an unhandled exception. Here's the logs with relevant stack trace:
2014-01-08 20:58:25.066 XXX[52022:70b] InAppPurchase[objc]: About to do IAP 2014-01-08 20:58:25.075 XXX[52022:70b] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid product identifier: (null)' * First throw call stack: ( 0 CoreFoundation 0x000f05e4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x01e088b6 objc_exception_throw + 44 2 CoreFoundation 0x000f03bb +[NSException raise:format:] + 139 3 StoreKit 0x019ae74f -[SKPaymentQueue addPayment:] + 659 4 XXX 0x00033098 -[InAppPurchase purchase:] + 440
— Reply to this email directly or view it on GitHubhttps://github.com/j3k0/PhoneGap-InAppPurchase-iOS/issues/22 .
The load
needs to complete and asynchronously return a valid set of products or this error occurs. This means that even if you call load
you can't just go calling purchase
immediately after or the same error occurs.
You can test this on a device by setting it to Airplane Mode then trying to purchase a product. Currently trying to work out the best way around this but probably going to go for setting a ready
flag in my code when the products are returned and blocking access to buying until then.
@jameshoward the ready flag is the way to go.
In my apps, I hide the "purchase buttons" by default unless the ready flag is set. Additionally, I use an event / notification system to unhide those buttons (dynamically) when the "ready" callback is called.
You can also do the opposite, alert the user "AppStore cannot be contacted, try again later" when he tries to purchase before IAP got ready.
@jameshoward For what its worth, I currently use a hybrid of what @j3k0 is talking about. I hide the purchase & restore buttons until everything is loaded and ready and I show a loading spinner indicating activity. I also have that set to timeout after a while and show an error message so the user doesn't think the app has hung.
I'm having a similar problem but only with live app. It works fine in test builds. http://stackoverflow.com/q/23290142/235273
Not exactly same. But the exception is kind of similar.
2 CoreFoundation 0x2f0f6f10 +[NSException raise:format:] + 100
3 StoreKit 0x318a3f9e -[SKPaymentQueue addPayment:] + 598
Issue solved: product hasn't been submitted to Apple.. see stackoverflow.
I assume this happens possibly because my app is still very young and I haven't signed my application with my developer license, but it would be nice if this didn't crash my app because of an unhandled exception. Here's the logs with relevant stack trace:
2014-01-08 20:58:25.066 XXX[52022:70b] InAppPurchase[objc]: About to do IAP 2014-01-08 20:58:25.075 XXX[52022:70b] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid product identifier: (null)' * First throw call stack: ( 0 CoreFoundation 0x000f05e4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x01e088b6 objc_exception_throw + 44 2 CoreFoundation 0x000f03bb +[NSException raise:format:] + 139 3 StoreKit 0x019ae74f -[SKPaymentQueue addPayment:] + 659 4 XXX 0x00033098 -[InAppPurchase purchase:] + 440