Rc Revenuecat Api Quick Reference

RevenueCat/ai-toolkit/revenuecat-play-billing/skills/rc-revenuecat-api-quick-reference

作者 RevenueCatccfc038185ec457b2ac9077f3bbf1ba947a44dbbApache-2.0; see LICENSE收錄於 2026年10月9日更新於 2026年10月9日

Use this skill as a quick reference for the RevenueCat Android SDK 10.x and REST API. Covers SDK init, common Purchases calls, CustomerInfo / Offerings access patterns, and the most used REST endpoints.

AI 產生的概覽

RevenueCat Android SDK 10.x 與 REST API 速查表,涵蓋初始化、購買、權益與錯誤處理。

功能
提供 RevenueCat Android SDK 10.x 的速查表格與簡短程式碼片段,包括 Purchases.configure 選項、awaitPurchase、awaitOfferings、awaitCustomerInfo 等協程呼叫,以及 Offerings、Package、StoreProduct 與 EntitlementInfo 的欄位結構。也列出購買錯誤碼、監聽器註冊與常見的權益判斷片段。它會引導讀者區分用戶端 SDK 與伺服器端 REST 的使用情境,並指向相關技能以取得更詳細的說明。
適用情境
當你在撰寫 Android 應用程式碼或伺服器端邏輯時,需要快速查找某個 RevenueCat API 的簽章、欄位或錯誤碼,可以使用它。它的定位是索引而非教學,因此購買流程、SDK 設定、錯誤處理或訂閱狀態的逐步指引應參考它所引用的專項技能。
執行需求
不需要指令碼或執行階段相依項目,僅為純說明性參考文件。使用者需熟悉 Kotlin 與 RevenueCat Android SDK;REST 端點細節需查閱外部 RevenueCat 文件。

RevenueCat API Quick Reference

Phase 0: Intent

Use this skill when you need a fast lookup of a RevenueCat API surface while writing Android code or server logic. Typical questions you answer from here:

  • Which builder option controls a given Purchases.configure behavior?
  • What is the return type and signature of awaitPurchase, awaitOfferings, awaitCustomerInfo, awaitRestore, awaitLogIn, awaitLogOut?
  • How do I read offering, package, product, entitlement fields?
  • Which PurchasesErrorCode should I branch on?
  • Which listener callback do I register for customer info updates?

Do not use this skill as a deep tutorial. Reach for the feature-specific skills (purchase flow, configuring the SDK, error handling, subscription states) when you need step-by-step guidance or design rationale.

Phase 1: Locate

Decide SDK surface vs REST surface before you search the tables.

Route to the SDK (client side, Android app code):

  • Code runs inside the Android app, in an Activity, ViewModel, or background worker bundled with your app.
  • You need to launch a purchase, restore purchases, read cached CustomerInfo, fetch Offerings, identify or log out a user, or listen for updates.
  • You want entitlement gating in the UI.

Route to the REST API (server side):

  • Code runs on your backend, in a webhook handler, in an admin tool, or in a scheduled job.
  • You need to grant or revoke a promotional entitlement, override a subscription, look up a subscriber from another service, refund, or deliver events to another system.
  • You are integrating with a system that cannot embed the SDK.

The tables in this skill cover the Android SDK 10.x surface from appendix A verbatim. For REST endpoint paths, authentication, and payloads, see the full appendix on revenuecat.com together with the backend and webhooks skills, and treat this file as the SDK index.

Phase 2: Reference Tables

SDK Initialization

kotlin
// Minimum setupPurchases.configure(    PurchasesConfiguration.Builder(context, "api_key").build())
// Full optionsPurchases.configure(    PurchasesConfiguration.Builder(context, "api_key")        .appUserID("user_id")                    // null for anonymous        .showInAppMessagesAutomatically(true)    // default: true        .purchasesAreCompletedBy(PurchasesAreCompletedBy.REVENUECAT) // default        .entitlementVerificationMode(EntitlementVerificationMode.INFORMATIONAL)        .diagnosticsEnabled(false)               // default: false        .pendingTransactionsForPrepaidPlansEnabled(false) // default: false        .build())
Purchases.logLevel = LogLevel.DEBUG // before configure()

Core Operations (Coroutine)

kotlin
// Fetch offeringsval offerings: Offerings = Purchases.sharedInstance.awaitOfferings()
// Fetch specific productsval products: List<StoreProduct> = Purchases.sharedInstance.awaitGetProducts(    listOf("product_id"),    type = ProductType.INAPP // or SUBS, or null for all)
kotlin
// Purchaseval result: PurchaseResult = Purchases.sharedInstance.awaitPurchase(    PurchaseParams.Builder(activity, packageOrStoreProductOrSubscriptionOption).build())
// Purchase upgrade/downgradeval result = Purchases.sharedInstance.awaitPurchase(    PurchaseParams.Builder(activity, newPackage)        .oldProductId("old_product_id")        .googleReplacementMode(GoogleReplacementMode.WITH_TIME_PRORATION)        .build())
kotlin
// Get customer infoval customerInfo: CustomerInfo = Purchases.sharedInstance.awaitCustomerInfo()val fresh: CustomerInfo = Purchases.sharedInstance.awaitCustomerInfo(    fetchPolicy = CacheFetchPolicy.FETCH_CURRENT)
// Restoreval customerInfo: CustomerInfo = Purchases.sharedInstance.awaitRestore()
// Log in / log outval loginResult: LogInResult = Purchases.sharedInstance.awaitLogIn("user_id")// loginResult.customerInfo, loginResult.created (Boolean)val customerInfo: CustomerInfo = Purchases.sharedInstance.awaitLogOut()

Offerings Structure

kotlin
val offerings: Offeringsofferings.current          // current Offeringofferings.all              // Map<String, Offering>offerings["my_offering"]   // by identifierofferings.getCurrentOfferingForPlacement("placement_id") // targeting
kotlin
val offering: Offeringoffering.identifieroffering.monthly           // Package? (shortcut)offering.annual            // Package?offering.weekly            // Package?offering.availablePackages // List<Package>offering.metadata          // Map<String, Any>
kotlin
val pkg: Packagepkg.identifier             // "$rc_monthly", "$rc_annual", custompkg.packageType            // PackageType enumpkg.product                // StoreProductpkg.webCheckoutURL         // URL? (RevenueCat web billing)
kotlin
val product: StoreProductproduct.productIdproduct.titleproduct.descriptionproduct.price.formatted    // "$4.99"product.price.amountMicrosproduct.price.currencyCodeproduct.period             // Period? (null for INAPP); use period.iso8601 for "P1M", "P1Y", etc.product.subscriptionOptions // List<SubscriptionOption>? (null for INAPP)product.defaultOption       // SubscriptionOption? best available offer

Entitlements

kotlin
val customerInfo: CustomerInfocustomerInfo.entitlements.active         // Map<String, EntitlementInfo> (active only)customerInfo.entitlements.all            // Map<String, EntitlementInfo> (all)customerInfo.entitlements["pro_access"]  // EntitlementInfo?customerInfo.activeSubscriptions         // Set<String> of "productId:basePlanId"customerInfo.nonSubscriptionTransactions // List<Transaction>customerInfo.managementURL               // Uri? to Play Store management
kotlin
val entitlement: EntitlementInfoentitlement.isActive                     // Boolean, the main access gateentitlement.willRenew                    // false if canceledentitlement.expirationDate               // Date? (null for lifetime)entitlement.periodType                   // NORMAL, TRIAL, INTRO, PREPAIDentitlement.billingIssueDetectedAt       // Date? (non-null = grace/hold)entitlement.unsubscribeDetectedAt        // Date? (non-null = canceled)entitlement.store                        // PLAY_STORE, APP_STORE, etc.entitlement.productIdentifier            // subscription product IDentitlement.productPlanIdentifier        // base plan ID (Google only)entitlement.verification                 // VerificationResult

Error Handling

kotlin
// Purchase errorstry {    Purchases.sharedInstance.awaitPurchase(params)} catch (e: PurchasesTransactionException) {    e.userCancelled     // Boolean    e.error.code        // PurchasesErrorCode    e.error.message     // description string}
// Other errorstry {    Purchases.sharedInstance.awaitOfferings()} catch (e: PurchasesException) {    e.error.code        // PurchasesErrorCode}
kotlin
// Key error codesPurchasesErrorCode.PurchaseCancelledErrorPurchasesErrorCode.ProductAlreadyPurchasedErrorPurchasesErrorCode.PaymentPendingErrorPurchasesErrorCode.NetworkErrorPurchasesErrorCode.StoreProblemErrorPurchasesErrorCode.IneligibleErrorPurchasesErrorCode.ConfigurationError

Listeners

kotlin
// CustomerInfo updatesPurchases.sharedInstance.updatedCustomerInfoListener =    UpdatedCustomerInfoListener { customerInfo -> }
// Show in-app messages manuallyPurchases.sharedInstance.showInAppMessagesIfNeeded(activity)

Phase 3: Typical Snippets

Gate a feature on an entitlement.

kotlin
val info = Purchases.sharedInstance.awaitCustomerInfo()val hasPro = info.entitlements["pro_access"]?.isActive == trueif (hasPro) unlockFeature() else showPaywall()

Buy the monthly package from the current offering.

kotlin
val current = Purchases.sharedInstance.awaitOfferings().current ?: returnval monthly = current.monthly ?: returnval result = Purchases.sharedInstance.awaitPurchase(    PurchaseParams.Builder(activity, monthly).build())

Handle cancel vs real failure.

kotlin
try {    Purchases.sharedInstance.awaitPurchase(params)} catch (e: PurchasesTransactionException) {    if (e.userCancelled) return    when (e.error.code) {        PurchasesErrorCode.PaymentPendingError -> showPendingUi()        PurchasesErrorCode.NetworkError -> showRetry()        else -> showGenericError(e.error.message)    }}

Force a fresh CustomerInfo fetch after a server side grant.

kotlin
val fresh = Purchases.sharedInstance.awaitCustomerInfo(    fetchPolicy = CacheFetchPolicy.FETCH_CURRENT)

Log in an identified user and detect first login.

kotlin
val login = Purchases.sharedInstance.awaitLogIn("user_123")val isNewAlias = login.createdval info = login.customerInfo

React to background entitlement changes.

kotlin
Purchases.sharedInstance.updatedCustomerInfoListener =    UpdatedCustomerInfoListener { info ->        val active = info.entitlements["pro_access"]?.isActive == true        uiState.update { it.copy(hasPro = active) }    }

References

  • Full chapter

  • Related skills in this repo: rc-configuring-the-sdk, rc-purchase-flow, rc-error-handling, rc-subscription-states, rc-backend, rc-webhooks.

來源與署名

來源:RevenueCat/ai-toolkit位於revenuecat-play-billing/skills/rc-revenuecat-api-quick-reference提交ccfc038

授權條款: Apache-2.0; see LICENSE

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架