expo: [SDK45] [Expo In App Purchases] [Android] Error: When Using purchaseItemAsync methods
Summary
After updating the expo sdk from 44 to 45, I am getting the following error in the purchase process. I am not sure if it is directly related to the SDK, but I am having trouble because the error code does not bring up any research. Could you please advise?
My codes
export const purchaseProducts = async (productId: string) => {
try {
await purchaseItemAsync(productId);
} catch (error) {
console.log(error);
}
};
My error code is here.
[Error: Encountered an exception while calling native method: Exception occurred while executing exported method purchaseItemAsync on module ExpoInAppPurchases: Attempt to invoke interface method 'java.lang.String expo.modules.core.arguments.ReadableArguments.getString(java.lang.String)' on a null object reference]
Managed or bare workflow? If you have ios/
or android/
directories in your project, the answer is bare!
bare
What platform(s) does this occur on?
Android
Environment
expo-env-info 1.0.3 environment info:
System:
OS: macOS 12.2.1
Shell: 5.8 - /bin/zsh
Binaries:
Node: 16.13.0 - ~/.nodebrew/current/bin/node
Yarn: 1.22.17 - ~/.nodebrew/current/bin/yarn
npm: 8.1.0 - ~/.nodebrew/current/bin/npm
Watchman: 2022.03.21.00 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.11.3 - /Users/ken/.rbenv/shims/pod
SDKs:
iOS SDK:
Platforms: DriverKit 21.4, iOS 15.5, macOS 12.3, tvOS 15.4, watchOS 8.5
Android SDK:
API Levels: 27, 28, 29, 30, 31, 32
Build Tools: 28.0.3, 29.0.2, 29.0.3, 30.0.2, 31.0.0, 33.0.0
System Images: android-30 | Google Play Intel x86 Atom
IDEs:
Android Studio: 4.1 AI-201.8743.12.41.6953283
Xcode: 13.4/13F17a - /usr/bin/xcodebuild
npmPackages:
babel-preset-expo: ~9.1.0 => 9.1.0
expo: ^45.0.0 => 45.0.3
react: 17.0.2 => 17.0.2
react-dom: 17.0.2 => 17.0.2
react-native: 0.68.2 => 0.68.2
react-native-web: 0.17.7 => 0.17.7
react-navigation: ^4.4.4 => 4.4.4
npmGlobalPackages:
eas-cli: 0.52.0
expo-cli: 5.4.6
Expo Workflow: bare
Reproducible demo
Not sure how this can be replicated.
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Reactions: 7
- Comments: 16 (9 by maintainers)
Commits related to this issue
- [expo-in-app-purchases][android] Fix null error in `purchaseItemAsync` when details argument is not passed (#18272) # Why https://github.com/expo/expo/issues/17654 The `details` argument of [pu... — committed to expo/expo by gaishimo 2 years ago
- [expo-in-app-purchases][android] Fix null error in `purchaseItemAsync` when details argument is not passed (#18272) # Why https://github.com/expo/expo/issues/17654 The `details` argument of [pu... — committed to preciofishbone/expo by gaishimo 2 years ago
- [expo-in-app-purchases][android] Fix null error in `purchaseItemAsync` when details argument is not passed (#18272) # Why https://github.com/expo/expo/issues/17654 The `details` argument of [pu... — committed to preciofishbone/expo by gaishimo 2 years ago
- [expo-in-app-purchases][android] Fix null error in `purchaseItemAsync` when details argument is not passed (#18272) # Why https://github.com/expo/expo/issues/17654 The `details` argument of [pu... — committed to Qeepsake/expo-in-app-purchases by gaishimo 2 years ago
In 13.1.0, you can avoid this error by passing
details
argument forcibly.The docs posted by @gaishimo indicate that these ids are up to the implementor to provide. Empty strings would technically work (as @lottemarines posted), but to avoid future regret that might arise from passing garbage into those parameters we decided to run the user id from our system through md5 and use that. If you don’t have a user id from your own system maybe empty strings is the way to go (until this issue is fixed).
The following explanation of obfuscatedAccountid and obfuscatedProfileId is helpful. https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder?hl=ja#setObfuscatedAccountId(java.lang.String)
This is a mechanism to prevent fraud, but I don’t think this setting should be mandatory because it is unnecessary for apps that only offer non-consumable charges 🤔
expo-in-app-purchases@14.0.0 was published on 2022-10-25 and includes https://github.com/expo/expo/pull/18272, which should resolve this issue.
Perhaps I found the reason. It is because the
details
argument for Android in expo-in-app-purchase v13.https://docs.expo.dev/versions/latest/sdk/in-app-purchases/#inapppurchasespurchaseitemasyncitemid-details
I have the same problem on android. The Expo SDK version is 45. (expo-in-app-purchase: 13.0.0)
Passing empty string is working as it should be.
struggling with the same thing, expo/react-native docs does not seem to mention how we can get it for Android users