IOS + ANDROID - Premium process & Translations

Job ID: 39538549

Budget: €250 – €750 EUR

Before start :

I expect the payment to be made only after the task is fully completed and after I have verified that the app works correctly on the stores. All current functionalities must operate perfectly on the delivered version. Please ensure that everything is fully functional. I also kindly ask that deadlines be strictly respected; otherwise, I will have to consider alternative solutions

I have an issue on both Android and iOS when I subscribe to the Premium offer:

To subscribe to the Premium offer, there are three ways to do it:

By tapping the purple banner on the homepage.

By going to the “Italy” offer, clicking the “Participate” button, then having the Play Store or iOS prompt me to subscribe.

By tapping the “Get Premium” button located at the bottom of the screen on the offer.

Then, three actions must occur:

A “Premium” banner appears on my profile.

The purple banner on the homepage disappears.

The “Get Premium” button on the offer disappears.

And if I tap “Participate,” my profile is added to the draw participants.



ANDROID :

GOOGLE PAYMENT:
Once the user pays on the Play Store, a refund is issued after 5 days. Additionally, the user cannot participate in the raffle immediately after paying, so I’m not sure whether they appear in the list of participants.

Probably it's this, but please let's double check :

You must acknowledge the purchase immediately after processing it to prevent it from expiring:

In the Application (Client-Side)

val billingClient = BillingClient.newBuilder(context)
.setListener { billingResult, purchases ->
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
purchases?.forEach { purchase ->
if (!purchase.isAcknowledged) {
val acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.purchaseToken)
.build()
billingClient.acknowledgePurchase(acknowledgePurchaseParams) { result ->
if (result.responseCode == BillingClient.BillingResponseCode.OK) {
// Grant premium access here
}
}
}
}
}
}
.enablePendingPurchases()
.build()

For consumable purchases, use consumeAsync(), which automatically acknowledges the purchase and makes it available for repurchase.

Backend Option (Recommended)

Receive the Real-Time Developer Notification (RTDN) SUBSCRIPTION_PURCHASED.

Validate via the Google API (purchases.subscriptionsv2.get).

Respond with the acknowledgment via the server-side API acknowledge().

Summary — Price/Risk Comparison

Current Behavior Problem Solution
Unacknowledged purchase → refunded ~5 days Customers lose their subscription despite payment Acknowledge immediately
Unconsumed consumable purchase Refunded after 3–5 days Use consumeAsync()
Properly acknowledged purchase Works correctly, no refund



Next Steps

Integrate the acknowledgePurchase() code into your PurchasesUpdatedListener.

Test in the production environment: purchase a subscription and verify it remains active beyond 5 days.

Monitor refunds via the Google Play Console (Order Management) to confirm the issue is resolved.
Related categories: iPhone Node.js Flutter GraphQL AWS Amplify