react-native-iap 14.4.11 → 14.4.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +159 -10
  2. package/ios/HybridRnIap.swift +115 -2
  3. package/lib/module/hooks/useIAP.js +24 -3
  4. package/lib/module/hooks/useIAP.js.map +1 -1
  5. package/lib/module/index.js +275 -2
  6. package/lib/module/index.js.map +1 -1
  7. package/lib/module/types.js +18 -0
  8. package/lib/module/types.js.map +1 -1
  9. package/lib/typescript/plugin/src/withIAP.d.ts +27 -0
  10. package/lib/typescript/plugin/src/withIAP.d.ts.map +1 -1
  11. package/lib/typescript/src/hooks/useIAP.d.ts +6 -1
  12. package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
  13. package/lib/typescript/src/index.d.ts +133 -0
  14. package/lib/typescript/src/index.d.ts.map +1 -1
  15. package/lib/typescript/src/specs/RnIap.nitro.d.ts +72 -2
  16. package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
  17. package/lib/typescript/src/types.d.ts +116 -13
  18. package/lib/typescript/src/types.d.ts.map +1 -1
  19. package/nitrogen/generated/android/NitroIapOnLoad.cpp +2 -0
  20. package/nitrogen/generated/android/c++/JAlternativeBillingModeAndroid.hpp +62 -0
  21. package/nitrogen/generated/android/c++/JExternalPurchaseLinkResultIOS.hpp +58 -0
  22. package/nitrogen/generated/android/c++/JExternalPurchaseNoticeAction.hpp +59 -0
  23. package/nitrogen/generated/android/c++/JExternalPurchaseNoticeResultIOS.hpp +60 -0
  24. package/nitrogen/generated/android/c++/JFunc_void_UserChoiceBillingDetails.hpp +78 -0
  25. package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +132 -3
  26. package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +9 -1
  27. package/nitrogen/generated/android/c++/JInitConnectionConfig.hpp +55 -0
  28. package/nitrogen/generated/android/c++/JPurchaseAndroid.hpp +4 -0
  29. package/nitrogen/generated/android/c++/JPurchaseIOS.hpp +4 -0
  30. package/nitrogen/generated/android/c++/JUserChoiceBillingDetails.hpp +75 -0
  31. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AlternativeBillingModeAndroid.kt +22 -0
  32. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseLinkResultIOS.kt +32 -0
  33. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseNoticeAction.kt +21 -0
  34. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseNoticeResultIOS.kt +32 -0
  35. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_UserChoiceBillingDetails.kt +81 -0
  36. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +43 -1
  37. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/InitConnectionConfig.kt +29 -0
  38. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseAndroid.kt +3 -0
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseIOS.kt +3 -0
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/UserChoiceBillingDetails.kt +32 -0
  41. package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.cpp +24 -0
  42. package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.hpp +156 -0
  43. package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Umbrella.hpp +18 -0
  44. package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +81 -3
  45. package/nitrogen/generated/ios/swift/AlternativeBillingModeAndroid.swift +44 -0
  46. package/nitrogen/generated/ios/swift/ExternalPurchaseLinkResultIOS.swift +65 -0
  47. package/nitrogen/generated/ios/swift/ExternalPurchaseNoticeAction.swift +40 -0
  48. package/nitrogen/generated/ios/swift/ExternalPurchaseNoticeResultIOS.swift +65 -0
  49. package/nitrogen/generated/ios/swift/Func_void_ExternalPurchaseLinkResultIOS.swift +47 -0
  50. package/nitrogen/generated/ios/swift/Func_void_ExternalPurchaseNoticeResultIOS.swift +47 -0
  51. package/nitrogen/generated/ios/swift/Func_void_UserChoiceBillingDetails.swift +47 -0
  52. package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +9 -1
  53. package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +168 -2
  54. package/nitrogen/generated/ios/swift/InitConnectionConfig.swift +47 -0
  55. package/nitrogen/generated/ios/swift/PurchaseAndroid.swift +31 -1
  56. package/nitrogen/generated/ios/swift/PurchaseIOS.swift +31 -1
  57. package/nitrogen/generated/ios/swift/UserChoiceBillingDetails.swift +58 -0
  58. package/nitrogen/generated/shared/c++/AlternativeBillingModeAndroid.hpp +80 -0
  59. package/nitrogen/generated/shared/c++/ExternalPurchaseLinkResultIOS.hpp +72 -0
  60. package/nitrogen/generated/shared/c++/ExternalPurchaseNoticeAction.hpp +76 -0
  61. package/nitrogen/generated/shared/c++/ExternalPurchaseNoticeResultIOS.hpp +74 -0
  62. package/nitrogen/generated/shared/c++/HybridRnIapSpec.cpp +8 -0
  63. package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +22 -2
  64. package/nitrogen/generated/shared/c++/InitConnectionConfig.hpp +69 -0
  65. package/nitrogen/generated/shared/c++/PurchaseAndroid.hpp +5 -1
  66. package/nitrogen/generated/shared/c++/PurchaseIOS.hpp +5 -1
  67. package/nitrogen/generated/shared/c++/UserChoiceBillingDetails.hpp +72 -0
  68. package/openiap-versions.json +3 -3
  69. package/package.json +1 -1
  70. package/plugin/build/withIAP.d.ts +27 -0
  71. package/plugin/build/withIAP.js +91 -1
  72. package/plugin/src/withIAP.ts +162 -0
  73. package/src/hooks/useIAP.ts +47 -1
  74. package/src/index.ts +313 -2
  75. package/src/specs/RnIap.nitro.ts +99 -1
  76. package/src/types.ts +124 -13
@@ -26,8 +26,10 @@ import dev.hyo.openiap.RequestPurchaseResultPurchase
26
26
  import dev.hyo.openiap.RequestPurchaseResultPurchases
27
27
  import dev.hyo.openiap.RequestSubscriptionAndroidProps
28
28
  import dev.hyo.openiap.RequestSubscriptionPropsByPlatforms
29
+ import dev.hyo.openiap.InitConnectionConfig as OpenIapInitConnectionConfig
29
30
  import dev.hyo.openiap.listener.OpenIapPurchaseErrorListener
30
31
  import dev.hyo.openiap.listener.OpenIapPurchaseUpdateListener
32
+ import dev.hyo.openiap.listener.OpenIapUserChoiceBillingListener
31
33
  import kotlinx.coroutines.Dispatchers
32
34
  import kotlinx.coroutines.withContext
33
35
  import kotlinx.coroutines.CompletableDeferred
@@ -50,15 +52,16 @@ class HybridRnIap : HybridRnIapSpec() {
50
52
  private val purchaseUpdatedListeners = mutableListOf<(NitroPurchase) -> Unit>()
51
53
  private val purchaseErrorListeners = mutableListOf<(NitroPurchaseResult) -> Unit>()
52
54
  private val promotedProductListenersIOS = mutableListOf<(NitroProduct) -> Unit>()
55
+ private val userChoiceBillingListenersAndroid = mutableListOf<(UserChoiceBillingDetails) -> Unit>()
53
56
  private var listenersAttached = false
54
57
  private var isInitialized = false
55
58
  private var initDeferred: CompletableDeferred<Boolean>? = null
56
59
  private val initLock = Any()
57
60
 
58
61
  // Connection methods
59
- override fun initConnection(): Promise<Boolean> {
62
+ override fun initConnection(config: InitConnectionConfig?): Promise<Boolean> {
60
63
  return Promise.async {
61
- RnIapLog.payload("initConnection", null)
64
+ RnIapLog.payload("initConnection", config)
62
65
  // Fast-path: if already initialized, return immediately
63
66
  if (isInitialized) {
64
67
  RnIapLog.result("initConnection", true)
@@ -114,16 +117,39 @@ class HybridRnIap : HybridRnIapSpec() {
114
117
  )
115
118
  }.onFailure { RnIapLog.failure("purchaseErrorListener", it) }
116
119
  })
120
+ openIap.addUserChoiceBillingListener(OpenIapUserChoiceBillingListener { details ->
121
+ runCatching {
122
+ RnIapLog.result(
123
+ "userChoiceBillingListener",
124
+ mapOf("products" to details.products, "token" to details.externalTransactionToken)
125
+ )
126
+ val nitroDetails = UserChoiceBillingDetails(
127
+ externalTransactionToken = details.externalTransactionToken,
128
+ products = details.products.toTypedArray()
129
+ )
130
+ sendUserChoiceBilling(nitroDetails)
131
+ }.onFailure { RnIapLog.failure("userChoiceBillingListener", it) }
132
+ })
117
133
  RnIapLog.result("listeners.attach", "attached")
118
134
  }
119
135
 
120
136
  // We created it above; reuse the shared instance
121
137
  val deferred = initDeferred!!
122
138
  try {
139
+ // Convert Nitro config to OpenIAP config
140
+ val openIapConfig = config?.let {
141
+ OpenIapInitConnectionConfig(
142
+ alternativeBillingModeAndroid = when (it.alternativeBillingModeAndroid) {
143
+ com.margelo.nitro.iap.AlternativeBillingModeAndroid.USER_CHOICE -> dev.hyo.openiap.AlternativeBillingModeAndroid.UserChoice
144
+ com.margelo.nitro.iap.AlternativeBillingModeAndroid.ALTERNATIVE_ONLY -> dev.hyo.openiap.AlternativeBillingModeAndroid.AlternativeOnly
145
+ else -> null
146
+ }
147
+ )
148
+ }
123
149
  val ok = try {
124
- RnIapLog.payload("initConnection.native", null)
150
+ RnIapLog.payload("initConnection.native", openIapConfig)
125
151
  withContext(Dispatchers.Main) {
126
- openIap.initConnection()
152
+ openIap.initConnection(openIapConfig)
127
153
  }
128
154
  } catch (err: Throwable) {
129
155
  val error = OpenIAPError.InitConnection
@@ -189,7 +215,7 @@ class HybridRnIap : HybridRnIapSpec() {
189
215
  throw Exception(toErrorJson(OpenIAPError.EmptySkuList))
190
216
  }
191
217
 
192
- initConnection().await()
218
+ initConnection(null).await()
193
219
 
194
220
  val queryType = parseProductQueryType(type)
195
221
  val skusList = skus.toList()
@@ -262,7 +288,7 @@ class HybridRnIap : HybridRnIapSpec() {
262
288
  }
263
289
 
264
290
  try {
265
- initConnection().await()
291
+ initConnection(null).await()
266
292
  withContext(Dispatchers.Main) { runCatching { openIap.setActivity(context.currentActivity) } }
267
293
 
268
294
  val missingSkus = androidRequest.skus.filterNot { productTypeBySku.containsKey(it) }
@@ -377,7 +403,7 @@ class HybridRnIap : HybridRnIapSpec() {
377
403
  override fun getAvailablePurchases(options: NitroAvailablePurchasesOptions?): Promise<Array<NitroPurchase>> {
378
404
  return Promise.async {
379
405
  val androidOptions = options?.android
380
- initConnection().await()
406
+ initConnection(null).await()
381
407
 
382
408
  RnIapLog.payload(
383
409
  "getAvailablePurchases",
@@ -444,7 +470,7 @@ class HybridRnIap : HybridRnIapSpec() {
444
470
 
445
471
  // Ensure connection; if it fails, return an error result instead of throwing
446
472
  try {
447
- initConnection().await()
473
+ initConnection(null).await()
448
474
  } catch (e: Exception) {
449
475
  val err = OpenIAPError.InitConnection
450
476
  return@async Variant_Boolean_NitroPurchaseResult.Second(
@@ -494,7 +520,7 @@ class HybridRnIap : HybridRnIapSpec() {
494
520
  override fun getStorefront(): Promise<String> {
495
521
  return Promise.async {
496
522
  try {
497
- initConnection().await()
523
+ initConnection(null).await()
498
524
  RnIapLog.payload("getStorefront", null)
499
525
  val value = openIap.getStorefront()
500
526
  RnIapLog.result("getStorefront", value)
@@ -825,7 +851,7 @@ class HybridRnIap : HybridRnIapSpec() {
825
851
  override fun deepLinkToSubscriptionsAndroid(options: NitroDeepLinkOptionsAndroid): Promise<Unit> {
826
852
  return Promise.async {
827
853
  try {
828
- initConnection().await()
854
+ initConnection(null).await()
829
855
  OpenIapDeepLinkOptions(
830
856
  skuAndroid = options.skuAndroid,
831
857
  packageNameAndroid = options.packageNameAndroid
@@ -1023,9 +1049,132 @@ class HybridRnIap : HybridRnIapSpec() {
1023
1049
  }
1024
1050
  }
1025
1051
 
1052
+ // -------------------------------------------------------------------------
1053
+ // Alternative Billing (Android)
1054
+ // -------------------------------------------------------------------------
1055
+
1056
+ override fun checkAlternativeBillingAvailabilityAndroid(): Promise<Boolean> {
1057
+ return Promise.async {
1058
+ RnIapLog.payload("checkAlternativeBillingAvailabilityAndroid", null)
1059
+ try {
1060
+ val isAvailable = withContext(Dispatchers.Main) {
1061
+ openIap.checkAlternativeBillingAvailability()
1062
+ }
1063
+ RnIapLog.result("checkAlternativeBillingAvailabilityAndroid", isAvailable)
1064
+ isAvailable
1065
+ } catch (err: Throwable) {
1066
+ RnIapLog.failure("checkAlternativeBillingAvailabilityAndroid", err)
1067
+ val errorType = parseOpenIapError(err)
1068
+ throw Exception(toErrorJson(errorType, debugMessage = err.message))
1069
+ }
1070
+ }
1071
+ }
1072
+
1073
+ override fun showAlternativeBillingDialogAndroid(): Promise<Boolean> {
1074
+ return Promise.async {
1075
+ RnIapLog.payload("showAlternativeBillingDialogAndroid", null)
1076
+ try {
1077
+ val activity = context.currentActivity
1078
+ ?: throw Exception(toErrorJson(OpenIAPError.DeveloperError, debugMessage = "Activity not available"))
1079
+
1080
+ val userAccepted = withContext(Dispatchers.Main) {
1081
+ openIap.setActivity(activity)
1082
+ openIap.showAlternativeBillingInformationDialog(activity)
1083
+ }
1084
+ RnIapLog.result("showAlternativeBillingDialogAndroid", userAccepted)
1085
+ userAccepted
1086
+ } catch (err: Throwable) {
1087
+ RnIapLog.failure("showAlternativeBillingDialogAndroid", err)
1088
+ val errorType = parseOpenIapError(err)
1089
+ throw Exception(toErrorJson(errorType, debugMessage = err.message))
1090
+ }
1091
+ }
1092
+ }
1093
+
1094
+ override fun createAlternativeBillingTokenAndroid(sku: String?): Promise<String?> {
1095
+ return Promise.async {
1096
+ RnIapLog.payload("createAlternativeBillingTokenAndroid", mapOf("sku" to sku))
1097
+ try {
1098
+ // Note: OpenIapModule.createAlternativeBillingReportingToken() doesn't accept sku parameter
1099
+ // The sku parameter is ignored for now - may be used in future versions
1100
+ val token = withContext(Dispatchers.Main) {
1101
+ openIap.createAlternativeBillingReportingToken()
1102
+ }
1103
+ RnIapLog.result("createAlternativeBillingTokenAndroid", token)
1104
+ token
1105
+ } catch (err: Throwable) {
1106
+ RnIapLog.failure("createAlternativeBillingTokenAndroid", err)
1107
+ val errorType = parseOpenIapError(err)
1108
+ throw Exception(toErrorJson(errorType, debugMessage = err.message))
1109
+ }
1110
+ }
1111
+ }
1112
+
1113
+ // User Choice Billing listener
1114
+ override fun addUserChoiceBillingListenerAndroid(listener: (UserChoiceBillingDetails) -> Unit) {
1115
+ synchronized(userChoiceBillingListenersAndroid) {
1116
+ userChoiceBillingListenersAndroid.add(listener)
1117
+ }
1118
+ }
1119
+
1120
+ override fun removeUserChoiceBillingListenerAndroid(listener: (UserChoiceBillingDetails) -> Unit) {
1121
+ synchronized(userChoiceBillingListenersAndroid) {
1122
+ userChoiceBillingListenersAndroid.remove(listener)
1123
+ }
1124
+ }
1125
+
1126
+ private fun sendUserChoiceBilling(details: UserChoiceBillingDetails) {
1127
+ synchronized(userChoiceBillingListenersAndroid) {
1128
+ userChoiceBillingListenersAndroid.forEach { it(details) }
1129
+ }
1130
+ }
1131
+
1132
+ // -------------------------------------------------------------------------
1133
+ // External Purchase (iOS) - Not supported on Android
1134
+ // -------------------------------------------------------------------------
1135
+
1136
+ override fun canPresentExternalPurchaseNoticeIOS(): Promise<Boolean> {
1137
+ return Promise.async {
1138
+ throw Exception(toErrorJson(OpenIAPError.NotSupported))
1139
+ }
1140
+ }
1141
+
1142
+ override fun presentExternalPurchaseNoticeSheetIOS(): Promise<ExternalPurchaseNoticeResultIOS> {
1143
+ return Promise.async {
1144
+ throw Exception(toErrorJson(OpenIAPError.NotSupported))
1145
+ }
1146
+ }
1147
+
1148
+ override fun presentExternalPurchaseLinkIOS(url: String): Promise<ExternalPurchaseLinkResultIOS> {
1149
+ return Promise.async {
1150
+ throw Exception(toErrorJson(OpenIAPError.NotSupported))
1151
+ }
1152
+ }
1153
+
1026
1154
  // ---------------------------------------------------------------------
1027
1155
  // OpenIAP error helpers: unify error codes/messages from library
1028
1156
  // ---------------------------------------------------------------------
1157
+ private fun parseOpenIapError(err: Throwable): OpenIAPError {
1158
+ // Try to extract OpenIAPError from the exception chain
1159
+ var cause: Throwable? = err
1160
+ while (cause != null) {
1161
+ val message = cause.message ?: ""
1162
+ // Check if message contains OpenIAP error patterns
1163
+ when {
1164
+ message.contains("not prepared", ignoreCase = true) ||
1165
+ message.contains("not initialized", ignoreCase = true) -> return OpenIAPError.NotPrepared
1166
+ message.contains("developer error", ignoreCase = true) ||
1167
+ message.contains("activity not available", ignoreCase = true) -> return OpenIAPError.DeveloperError
1168
+ message.contains("network", ignoreCase = true) -> return OpenIAPError.NetworkError
1169
+ message.contains("service unavailable", ignoreCase = true) ||
1170
+ message.contains("billing unavailable", ignoreCase = true) -> return OpenIAPError.ServiceUnavailable
1171
+ }
1172
+ cause = cause.cause
1173
+ }
1174
+ // Default to ServiceUnavailable if we can't determine the error type
1175
+ return OpenIAPError.ServiceUnavailable
1176
+ }
1177
+
1029
1178
  private fun toErrorJson(
1030
1179
  error: OpenIAPError,
1031
1180
  productId: String? = null,
@@ -38,9 +38,9 @@ class HybridRnIap: HybridRnIapSpec {
38
38
 
39
39
 
40
40
 
41
- func initConnection() throws -> Promise<Bool> {
41
+ func initConnection(config: InitConnectionConfig?) throws -> Promise<Bool> {
42
42
  return Promise.async {
43
- RnIapLog.payload("initConnection", nil)
43
+ RnIapLog.payload("initConnection", config?.alternativeBillingModeAndroid)
44
44
  self.attachListenersIfNeeded()
45
45
 
46
46
  if self.isInitialized || self.isInitializing {
@@ -51,6 +51,8 @@ class HybridRnIap: HybridRnIapSpec {
51
51
  self.isInitializing = true
52
52
 
53
53
  do {
54
+ // Note: iOS doesn't support alternative billing config parameter
55
+ // Config is ignored on iOS platform
54
56
  let ok = try await OpenIapModule.shared.initConnection()
55
57
  RnIapLog.result("initConnection", ok)
56
58
  self.isInitialized = ok
@@ -928,4 +930,115 @@ class HybridRnIap: HybridRnIapSpec {
928
930
  throw PurchaseError.make(code: .featureNotSupported)
929
931
  }
930
932
  }
933
+
934
+ // MARK: - Alternative Billing (Android) - Not supported on iOS
935
+
936
+ func checkAlternativeBillingAvailabilityAndroid() throws -> Promise<Bool> {
937
+ return Promise.async {
938
+ throw PurchaseError.make(code: .featureNotSupported)
939
+ }
940
+ }
941
+
942
+ func showAlternativeBillingDialogAndroid() throws -> Promise<Bool> {
943
+ return Promise.async {
944
+ throw PurchaseError.make(code: .featureNotSupported)
945
+ }
946
+ }
947
+
948
+ func createAlternativeBillingTokenAndroid(sku: String?) throws -> Promise<String?> {
949
+ return Promise.async {
950
+ throw PurchaseError.make(code: .featureNotSupported)
951
+ }
952
+ }
953
+
954
+ func addUserChoiceBillingListenerAndroid(listener: @escaping (UserChoiceBillingDetails) -> Void) throws {
955
+ // No-op on iOS
956
+ }
957
+
958
+ func removeUserChoiceBillingListenerAndroid(listener: @escaping (UserChoiceBillingDetails) -> Void) throws {
959
+ // No-op on iOS
960
+ }
961
+
962
+ // MARK: - External Purchase (iOS 16.0+)
963
+
964
+ func canPresentExternalPurchaseNoticeIOS() throws -> Promise<Bool> {
965
+ return Promise.async {
966
+ RnIapLog.payload("canPresentExternalPurchaseNoticeIOS", nil)
967
+
968
+ if #available(iOS 16.0, *) {
969
+ try self.ensureConnection()
970
+ do {
971
+ let canPresent = try await OpenIapModule.shared.canPresentExternalPurchaseNoticeIOS()
972
+ RnIapLog.result("canPresentExternalPurchaseNoticeIOS", canPresent)
973
+ return canPresent
974
+ } catch {
975
+ RnIapLog.failure("canPresentExternalPurchaseNoticeIOS", error: error)
976
+ throw PurchaseError.make(code: .serviceError, message: error.localizedDescription)
977
+ }
978
+ } else {
979
+ let err = PurchaseError.make(code: .featureNotSupported, message: "External purchase notice requires iOS 16.0 or later")
980
+ RnIapLog.failure("canPresentExternalPurchaseNoticeIOS", error: err)
981
+ throw err
982
+ }
983
+ }
984
+ }
985
+
986
+ func presentExternalPurchaseNoticeSheetIOS() throws -> Promise<ExternalPurchaseNoticeResultIOS> {
987
+ return Promise.async {
988
+ RnIapLog.payload("presentExternalPurchaseNoticeSheetIOS", nil)
989
+
990
+ if #available(iOS 16.0, *) {
991
+ try self.ensureConnection()
992
+ do {
993
+ let result = try await OpenIapModule.shared.presentExternalPurchaseNoticeSheetIOS()
994
+
995
+ // Convert OpenIAP action to Nitro action via raw value
996
+ let actionString = result.result.rawValue
997
+ guard let nitroAction = ExternalPurchaseNoticeAction(fromString: actionString) else {
998
+ throw PurchaseError.make(code: .serviceError, message: "Invalid action: \(actionString)")
999
+ }
1000
+
1001
+ let nitroResult = ExternalPurchaseNoticeResultIOS(
1002
+ error: result.error,
1003
+ result: nitroAction
1004
+ )
1005
+ RnIapLog.result("presentExternalPurchaseNoticeSheetIOS", result)
1006
+ return nitroResult
1007
+ } catch {
1008
+ RnIapLog.failure("presentExternalPurchaseNoticeSheetIOS", error: error)
1009
+ throw PurchaseError.make(code: .serviceError, message: error.localizedDescription)
1010
+ }
1011
+ } else {
1012
+ let err = PurchaseError.make(code: .featureNotSupported, message: "External purchase notice requires iOS 16.0 or later")
1013
+ RnIapLog.failure("presentExternalPurchaseNoticeSheetIOS", error: err)
1014
+ throw err
1015
+ }
1016
+ }
1017
+ }
1018
+
1019
+ func presentExternalPurchaseLinkIOS(url: String) throws -> Promise<ExternalPurchaseLinkResultIOS> {
1020
+ return Promise.async {
1021
+ RnIapLog.payload("presentExternalPurchaseLinkIOS", ["url": url])
1022
+
1023
+ if #available(iOS 16.0, *) {
1024
+ try self.ensureConnection()
1025
+ do {
1026
+ let result = try await OpenIapModule.shared.presentExternalPurchaseLinkIOS(url)
1027
+ let nitroResult = ExternalPurchaseLinkResultIOS(
1028
+ error: result.error,
1029
+ success: result.success
1030
+ )
1031
+ RnIapLog.result("presentExternalPurchaseLinkIOS", result)
1032
+ return nitroResult
1033
+ } catch {
1034
+ RnIapLog.failure("presentExternalPurchaseLinkIOS", error: error)
1035
+ throw PurchaseError.make(code: .serviceError, message: error.localizedDescription)
1036
+ }
1037
+ } else {
1038
+ let err = PurchaseError.make(code: .featureNotSupported, message: "External purchase link requires iOS 16.0 or later")
1039
+ RnIapLog.failure("presentExternalPurchaseLinkIOS", error: err)
1040
+ throw err
1041
+ }
1042
+ }
1043
+ }
931
1044
  }
@@ -6,7 +6,7 @@ import { Platform } from 'react-native';
6
6
  import { RnIapConsole } from "../utils/debug.js";
7
7
 
8
8
  // Internal modules
9
- import { initConnection, purchaseErrorListener, purchaseUpdatedListener, promotedProductListenerIOS, getAvailablePurchases, finishTransaction as finishTransactionInternal, requestPurchase as requestPurchaseInternal, fetchProducts, validateReceipt as validateReceiptInternal, getActiveSubscriptions, hasActiveSubscriptions, restorePurchases as restorePurchasesTopLevel, getPromotedProductIOS, requestPurchaseOnPromotedProductIOS } from "../index.js";
9
+ import { initConnection, purchaseErrorListener, purchaseUpdatedListener, promotedProductListenerIOS, getAvailablePurchases, finishTransaction as finishTransactionInternal, requestPurchase as requestPurchaseInternal, fetchProducts, validateReceipt as validateReceiptInternal, getActiveSubscriptions, hasActiveSubscriptions, restorePurchases as restorePurchasesTopLevel, getPromotedProductIOS, requestPurchaseOnPromotedProductIOS, checkAlternativeBillingAvailabilityAndroid, showAlternativeBillingDialogAndroid, createAlternativeBillingTokenAndroid, userChoiceBillingListenerAndroid } from "../index.js";
10
10
 
11
11
  // Types
12
12
  import { ErrorCode } from "../types.js";
@@ -174,7 +174,21 @@ export function useIAP(options) {
174
174
  }
175
175
  });
176
176
  }
177
- const result = await initConnection();
177
+
178
+ // Add user choice billing listener for Android (if provided)
179
+ if (Platform.OS === 'android' && optionsRef.current?.onUserChoiceBillingAndroid) {
180
+ subscriptionsRef.current.userChoiceBillingAndroid = userChoiceBillingListenerAndroid(details => {
181
+ if (optionsRef.current?.onUserChoiceBillingAndroid) {
182
+ optionsRef.current.onUserChoiceBillingAndroid(details);
183
+ }
184
+ });
185
+ }
186
+
187
+ // Initialize connection with config
188
+ const config = Platform.OS === 'android' && optionsRef.current?.alternativeBillingModeAndroid ? {
189
+ alternativeBillingModeAndroid: optionsRef.current.alternativeBillingModeAndroid
190
+ } : undefined;
191
+ const result = await initConnection(config);
178
192
  setConnected(result);
179
193
  if (!result) {
180
194
  // Clean up some listeners but leave purchaseError for potential retries
@@ -190,6 +204,7 @@ export function useIAP(options) {
190
204
  currentSubscriptions.purchaseUpdate?.remove();
191
205
  currentSubscriptions.purchaseError?.remove();
192
206
  currentSubscriptions.promotedProductIOS?.remove();
207
+ currentSubscriptions.userChoiceBillingAndroid?.remove();
193
208
  // Keep connection alive across screens to avoid race conditions
194
209
  setConnected(false);
195
210
  };
@@ -217,7 +232,13 @@ export function useIAP(options) {
217
232
  getPromotedProductIOS,
218
233
  requestPurchaseOnPromotedProductIOS,
219
234
  getActiveSubscriptions: getActiveSubscriptionsInternal,
220
- hasActiveSubscriptions: hasActiveSubscriptionsInternal
235
+ hasActiveSubscriptions: hasActiveSubscriptionsInternal,
236
+ // Alternative billing (Android only)
237
+ ...(Platform.OS === 'android' ? {
238
+ checkAlternativeBillingAvailabilityAndroid,
239
+ showAlternativeBillingDialogAndroid,
240
+ createAlternativeBillingTokenAndroid
241
+ } : {})
221
242
  };
222
243
  }
223
244
  //# sourceMappingURL=useIAP.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useState","useRef","Platform","RnIapConsole","initConnection","purchaseErrorListener","purchaseUpdatedListener","promotedProductListenerIOS","getAvailablePurchases","finishTransaction","finishTransactionInternal","requestPurchase","requestPurchaseInternal","fetchProducts","validateReceipt","validateReceiptInternal","getActiveSubscriptions","hasActiveSubscriptions","restorePurchases","restorePurchasesTopLevel","getPromotedProductIOS","requestPurchaseOnPromotedProductIOS","ErrorCode","normalizeErrorCodeFromNative","useIAP","options","connected","setConnected","products","setProducts","subscriptions","setSubscriptions","availablePurchases","setAvailablePurchases","promotedProductIOS","setPromotedProductIOS","activeSubscriptions","setActiveSubscriptions","optionsRef","connectedRef","mergeWithDuplicateCheck","existingItems","newItems","getKey","merged","forEach","newItem","isDuplicate","some","existingItem","push","current","subscriptionsRef","subscriptionsRefState","fetchProductsInternal","params","warn","requestType","type","debug","skus","result","items","prevSubscriptions","subscription","id","newProducts","filter","item","newSubscriptions","prevProducts","product","error","getAvailablePurchasesInternal","_skus","alsoPublishToEventListenerIOS","onlyIncludeActiveItemsIOS","getActiveSubscriptionsInternal","subscriptionIds","hasActiveSubscriptionsInternal","args","err","requestObj","sku","androidOptions","initIapWithSubscriptions","purchaseUpdate","purchase","e","onPurchaseSuccess","purchaseError","mappedError","code","message","productId","undefined","InitConnection","onPurchaseError","OS","onPromotedProductIOS","remove","currentSubscriptions"],"sourceRoot":"../../../src","sources":["hooks/useIAP.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useState","useRef","Platform","RnIapConsole","initConnection","purchaseErrorListener","purchaseUpdatedListener","promotedProductListenerIOS","getAvailablePurchases","finishTransaction","finishTransactionInternal","requestPurchase","requestPurchaseInternal","fetchProducts","validateReceipt","validateReceiptInternal","getActiveSubscriptions","hasActiveSubscriptions","restorePurchases","restorePurchasesTopLevel","getPromotedProductIOS","requestPurchaseOnPromotedProductIOS","checkAlternativeBillingAvailabilityAndroid","showAlternativeBillingDialogAndroid","createAlternativeBillingTokenAndroid","userChoiceBillingListenerAndroid","ErrorCode","normalizeErrorCodeFromNative","useIAP","options","connected","setConnected","products","setProducts","subscriptions","setSubscriptions","availablePurchases","setAvailablePurchases","promotedProductIOS","setPromotedProductIOS","activeSubscriptions","setActiveSubscriptions","optionsRef","connectedRef","mergeWithDuplicateCheck","existingItems","newItems","getKey","merged","forEach","newItem","isDuplicate","some","existingItem","push","current","subscriptionsRef","subscriptionsRefState","fetchProductsInternal","params","warn","requestType","type","debug","skus","result","items","prevSubscriptions","subscription","id","newProducts","filter","item","newSubscriptions","prevProducts","product","error","getAvailablePurchasesInternal","_skus","alsoPublishToEventListenerIOS","onlyIncludeActiveItemsIOS","getActiveSubscriptionsInternal","subscriptionIds","hasActiveSubscriptionsInternal","args","err","requestObj","sku","androidOptions","initIapWithSubscriptions","purchaseUpdate","purchase","e","onPurchaseSuccess","purchaseError","mappedError","code","message","productId","undefined","InitConnection","onPurchaseError","OS","onPromotedProductIOS","onUserChoiceBillingAndroid","userChoiceBillingAndroid","details","config","alternativeBillingModeAndroid","remove","currentSubscriptions"],"sourceRoot":"../../../src","sources":["hooks/useIAP.ts"],"mappings":"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","ignoreList":[]}