Skip to content
This repository was archived by the owner on Oct 17, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -86,18 +86,7 @@ fun AlternativeBillingScreen(navController: NavController) {
val purchaseAndroid = purchase as? PurchaseAndroid
if (purchaseAndroid != null) {
android.util.Log.d("AlternativeBilling", "Auto-finishing transaction for testing")
val purchaseInput = PurchaseInput(
id = purchaseAndroid.id,
ids = purchaseAndroid.ids,
isAutoRenewing = purchaseAndroid.isAutoRenewing ?: false,
platform = purchaseAndroid.platform,
productId = purchaseAndroid.productId,
purchaseState = purchaseAndroid.purchaseState,
purchaseToken = purchaseAndroid.purchaseToken,
quantity = purchaseAndroid.quantity ?: 1,
transactionDate = purchaseAndroid.transactionDate ?: 0.0
)
iapStore.finishTransaction(purchaseInput, true)
iapStore.finishTransaction(purchaseAndroid, true)
}
} catch (e: Exception) {
android.util.Log.e("AlternativeBilling", "Auto-finish failed: ${e.message}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,18 +218,7 @@ fun AvailablePurchasesScreen(
onFinish = { isConsumable ->
scope.launch {
try {
val purchaseInput = dev.hyo.openiap.PurchaseInput(
id = purchase.id,
ids = purchase.ids,
isAutoRenewing = purchase.isAutoRenewing,
platform = purchase.platform,
productId = purchase.productId,
purchaseState = purchase.purchaseState,
purchaseToken = purchase.purchaseToken,
quantity = purchase.quantity,
transactionDate = purchase.transactionDate
)
iapStore.finishTransaction(purchaseInput, isConsumable)
iapStore.finishTransaction(purchase, isConsumable)
iapStore.postStatusMessage(
message = "Transaction finished successfully",
status = PurchaseResultStatus.Success,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -787,18 +787,7 @@ fun SubscriptionFlowScreen(

// 4) Finish transaction
try {
val purchaseInput = dev.hyo.openiap.PurchaseInput(
id = purchase.id,
ids = purchase.ids,
isAutoRenewing = purchase.isAutoRenewing,
platform = purchase.platform,
productId = purchase.productId,
purchaseState = purchase.purchaseState,
purchaseToken = purchase.purchaseToken,
quantity = purchase.quantity,
transactionDate = purchase.transactionDate
)
iapStore.finishTransaction(purchaseInput, isConsumable)
iapStore.finishTransaction(purchase, isConsumable)
iapStore.getAvailablePurchases(null)
iapStore.postStatusMessage(
message = "Transaction finished successfully",
Expand Down
2 changes: 1 addition & 1 deletion openiap-versions.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"google": "1.2.10",
"gql": "1.0.10"
"gql": "1.0.11"
}
71 changes: 32 additions & 39 deletions openiap/src/main/java/dev/hyo/openiap/Types.kt
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,13 @@ public interface ProductCommon {
}

public interface PurchaseCommon {
/**
* The current plan identifier. This is:
* - On Android: the basePlanId (e.g., "premium", "premium-year")
* - On iOS: the productId (e.g., "com.example.premium_monthly", "com.example.premium_yearly")
* This provides a unified way to identify which specific plan/tier the user is subscribed to.
*/
val currentPlanId: String?
val id: String
val ids: List<String>?
val isAutoRenewing: Boolean
Expand All @@ -386,12 +393,24 @@ public interface PurchaseCommon {

public data class ActiveSubscription(
val autoRenewingAndroid: Boolean? = null,
val basePlanIdAndroid: String? = null,
/**
* The current plan identifier. This is:
* - On Android: the basePlanId (e.g., "premium", "premium-year")
* - On iOS: the productId (e.g., "com.example.premium_monthly", "com.example.premium_yearly")
* This provides a unified way to identify which specific plan/tier the user is subscribed to.
*/
val currentPlanId: String? = null,
val daysUntilExpirationIOS: Double? = null,
val environmentIOS: String? = null,
val expirationDateIOS: Double? = null,
val isActive: Boolean,
val productId: String,
val purchaseToken: String? = null,
/**
* Required for subscription upgrade/downgrade on Android
*/
val purchaseTokenAndroid: String? = null,
val transactionDate: Double,
val transactionId: String,
val willExpireSoon: Boolean? = null
Expand All @@ -401,12 +420,15 @@ public data class ActiveSubscription(
fun fromJson(json: Map<String, Any?>): ActiveSubscription {
return ActiveSubscription(
autoRenewingAndroid = json["autoRenewingAndroid"] as Boolean?,
basePlanIdAndroid = json["basePlanIdAndroid"] as String?,
currentPlanId = json["currentPlanId"] as String?,
daysUntilExpirationIOS = (json["daysUntilExpirationIOS"] as Number?)?.toDouble(),
environmentIOS = json["environmentIOS"] as String?,
expirationDateIOS = (json["expirationDateIOS"] as Number?)?.toDouble(),
isActive = json["isActive"] as Boolean,
productId = json["productId"] as String,
purchaseToken = json["purchaseToken"] as String?,
purchaseTokenAndroid = json["purchaseTokenAndroid"] as String?,
transactionDate = (json["transactionDate"] as Number).toDouble(),
transactionId = json["transactionId"] as String,
willExpireSoon = json["willExpireSoon"] as Boolean?,
Expand All @@ -417,12 +439,15 @@ public data class ActiveSubscription(
fun toJson(): Map<String, Any?> = mapOf(
"__typename" to "ActiveSubscription",
"autoRenewingAndroid" to autoRenewingAndroid,
"basePlanIdAndroid" to basePlanIdAndroid,
"currentPlanId" to currentPlanId,
"daysUntilExpirationIOS" to daysUntilExpirationIOS,
"environmentIOS" to environmentIOS,
"expirationDateIOS" to expirationDateIOS,
"isActive" to isActive,
"productId" to productId,
"purchaseToken" to purchaseToken,
"purchaseTokenAndroid" to purchaseTokenAndroid,
"transactionDate" to transactionDate,
"transactionId" to transactionId,
"willExpireSoon" to willExpireSoon,
Expand Down Expand Up @@ -956,6 +981,7 @@ public data class ProductSubscriptionIOS(

public data class PurchaseAndroid(
val autoRenewingAndroid: Boolean? = null,
override val currentPlanId: String? = null,
val dataAndroid: String? = null,
val developerPayloadAndroid: String? = null,
override val id: String,
Expand All @@ -979,6 +1005,7 @@ public data class PurchaseAndroid(
fun fromJson(json: Map<String, Any?>): PurchaseAndroid {
return PurchaseAndroid(
autoRenewingAndroid = json["autoRenewingAndroid"] as Boolean?,
currentPlanId = json["currentPlanId"] as String?,
dataAndroid = json["dataAndroid"] as String?,
developerPayloadAndroid = json["developerPayloadAndroid"] as String?,
id = json["id"] as String,
Expand All @@ -1003,6 +1030,7 @@ public data class PurchaseAndroid(
override fun toJson(): Map<String, Any?> = mapOf(
"__typename" to "PurchaseAndroid",
"autoRenewingAndroid" to autoRenewingAndroid,
"currentPlanId" to currentPlanId,
"dataAndroid" to dataAndroid,
"developerPayloadAndroid" to developerPayloadAndroid,
"id" to id,
Expand Down Expand Up @@ -1053,6 +1081,7 @@ public data class PurchaseIOS(
val countryCodeIOS: String? = null,
val currencyCodeIOS: String? = null,
val currencySymbolIOS: String? = null,
override val currentPlanId: String? = null,
val environmentIOS: String? = null,
val expirationDateIOS: Double? = null,
override val id: String,
Expand Down Expand Up @@ -1089,6 +1118,7 @@ public data class PurchaseIOS(
countryCodeIOS = json["countryCodeIOS"] as String?,
currencyCodeIOS = json["currencyCodeIOS"] as String?,
currencySymbolIOS = json["currencySymbolIOS"] as String?,
currentPlanId = json["currentPlanId"] as String?,
environmentIOS = json["environmentIOS"] as String?,
expirationDateIOS = (json["expirationDateIOS"] as Number?)?.toDouble(),
id = json["id"] as String,
Expand Down Expand Up @@ -1126,6 +1156,7 @@ public data class PurchaseIOS(
"countryCodeIOS" to countryCodeIOS,
"currencyCodeIOS" to currencyCodeIOS,
"currencySymbolIOS" to currencySymbolIOS,
"currentPlanId" to currentPlanId,
"environmentIOS" to environmentIOS,
"expirationDateIOS" to expirationDateIOS,
"id" to id,
Expand Down Expand Up @@ -1582,45 +1613,7 @@ public data class ProductRequest(
)
}

public data class PurchaseInput(
val id: String,
val ids: List<String>? = null,
val isAutoRenewing: Boolean,
val platform: IapPlatform,
val productId: String,
val purchaseState: PurchaseState,
val purchaseToken: String? = null,
val quantity: Int,
val transactionDate: Double
) {
companion object {
fun fromJson(json: Map<String, Any?>): PurchaseInput {
return PurchaseInput(
id = json["id"] as String,
ids = (json["ids"] as List<*>?)?.map { it as String },
isAutoRenewing = json["isAutoRenewing"] as Boolean,
platform = IapPlatform.fromJson(json["platform"] as String),
productId = json["productId"] as String,
purchaseState = PurchaseState.fromJson(json["purchaseState"] as String),
purchaseToken = json["purchaseToken"] as String?,
quantity = (json["quantity"] as Number).toInt(),
transactionDate = (json["transactionDate"] as Number).toDouble(),
)
}
}

fun toJson(): Map<String, Any?> = mapOf(
"id" to id,
"ids" to ids?.map { it },
"isAutoRenewing" to isAutoRenewing,
"platform" to platform.toJson(),
"productId" to productId,
"purchaseState" to purchaseState.toJson(),
"purchaseToken" to purchaseToken,
"quantity" to quantity,
"transactionDate" to transactionDate,
)
}
public typealias PurchaseInput = Purchase

public data class PurchaseOptions(
/**
Expand Down
12 changes: 1 addition & 11 deletions openiap/src/main/java/dev/hyo/openiap/utils/BillingConverters.kt
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,4 @@ fun ProductSubscriptionAndroid.toProduct(): Product = ProductAndroid(
type = type
)

fun Purchase.toPurchaseInput(): PurchaseInput = PurchaseInput(
id = id,
ids = ids,
isAutoRenewing = isAutoRenewing,
platform = platform,
productId = productId,
purchaseState = purchaseState,
purchaseToken = purchaseToken,
quantity = quantity,
transactionDate = transactionDate
)
fun Purchase.toPurchaseInput(): PurchaseInput = this
1 change: 1 addition & 0 deletions scripts/generate-types.sh
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ product_props = {
}

purchase_props = {
"currentPlanId",
"id",
"ids",
"isAutoRenewing",
Expand Down
Loading