gplay-iap-setup

In-app products, subscriptions, base plans, and offers setup for Google Play monetization, including bulk-localizing subscription display names, descriptions, and benefits across all locales. Use when configuring in-app purchases or subscription products.

By tamtom · 354 installs

npx skills add tamtom/gplay-cli-skills --skill gplay-iap-setup

Source repository · Upstream listing

In App Purchase Setup for Google Play Use this skill when you need to set up monetization for your Android app. Two APIs: Legacy vs New Monetization Google Play has two APIs for one time products: Legacy ( gplay iap ) New Monetization ( gplay onetimeproducts ) API inappproducts monetization.onetimeproducts Price format priceMicros / currency units / nanos / currencyCode Structure Flat prices map purchaseOptions with regionalPricingAndAvailabilityConfigs States active / inactive DRAFT → ACTIVE (requires explicit activation) Regional pricing auto convert prices flag regions version required Prefer the new monetization API ( gplay onetimeproducts ) for new products. It supports purchase options, better regional pricing control, and is the actively developed API. Use the legacy API ( gplay iap ) only for managing existing legacy products. Never mix the two APIs for the same product. A product created via gplay iap create cannot be managed via gplay onetimeproducts and vice versa. Critical: Product IDs Are Permanent Google Play permanently reserves product IDs after deletion. If you create premium unlock and later delete it, the ID premium unlock can never be reused — not even with a different API. Choose product IDs carefully. This means: Do NOT create a "test" product with a good ID and then delete it Do NOT create via the legacy API and then try to recreate via the new API If you burn an ID, you must choose a new one (e.g., premium unlock v2 ) One Time Products (New Monetization API) List products Create product regions version is required — the create command uses PATCH with allowMissing=true internally: product.json (new monetization format) Activate the purchase option New products start in DRAFT state. You must activate before users can purchase: Update product Get product Delete product Batch operations Legacy In App Products (IAP) Use only for managing existing legacy products. List products Create product iap create has no sku flag — the SKU/productId lives in the JSON body: product.json (legacy format) Update / Batch / Delete Subscriptions List subscriptions Create subscription subscription.json Subscriptions use the units / nanos / currencyCode price format: Bulk localize subscriptions across locales Subscription listings are an array of per locale objects (not an object keyed by locale). Each entry uses languageCode , title , benefits (array, max 4), and description . One subscriptions update call sets every locale atomically — use update mask listings so base plans and pricing are left untouched. 1. Discover the locales your app already ships (cover at least these): 2. Build a listings only JSON file ( subscription listings.json ): 3. Apply to one subscription: 4. Loop over every subscription in the app: Verify with gplay subscriptions get package com.example.app product id premium monthly pretty and confirm every languageCode appears in the listings array. Constraints: title max 55 chars, description max 80 chars, benefits max 4 items. When the user gives a single display name, reuse it for all locales; when they give per locale translations, use each locale's own text. Base Plans Base plans define the billing period and price for subscriptions. Activate base plan Deactivate base plan Migrate prices Subscription Offers Offers provide discounts, free trials, or introductory pricing. List offers Create offer offer.json (Free trial) offer.json (Introductory price) Activate/Deactivate offer OTP Purchase Option Offers Manage offers on one time product purchase options: Regional Pricing Convert prices price request.json (ConvertRegionPricesRequest) The body is a single base price as Money — units is the whole currency amount as a string, nanos is the fractional part (990000000 = .99): The response returns converted prices for all supported regions plus a regionVersion you can pass as regions version to subscriptions, base plans, offers, and one time product commands. Common Monetization Patterns Pattern 1: New One Time Product (recommended) Pattern 2: Subscription with Free Trial Pattern 3: Multi Tier Subscription Testing Use test purchases In your app code, use test product IDs: android.test.purchased android.test.canceled android.test.refunded android.test.item unavailable License testing Add test accounts in Play Console: Settings → License Testing → Add license testers Best Practices 1. Use clear product IDs e.g., premium monthly , not prod 001 . IDs are permanent and cannot be reused after deletion. 2. Prefer the new monetization API Use gplay onetimeproducts for new products, not gplay iap . 3. Localize descriptions Provide listings for all supported languages. 4. Set up regional pricing Use PPP pricing (see gplay ppp pricing skill) instead of same price everywhere. 5. Activate after creation New OTP products start in DRAFT. Use gplay purchase options batch update states to activate. 6. Discover commands Run gplay help to see all command groups. Purchase option management is under gplay purchase options , not under gplay onetimeproducts . 7. Test thoroughly Use test accounts and test product IDs. 8. Monitor conversions Track which products/offers perform best. 9. Update prices carefully Price changes affect existing subscribers. Billing Periods P1W 1 week P1M 1 month P3M 3 months P6M 6 months P1Y 1 year