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 从公开仓库中收录这些内容。

举报或申请下架