Android アプリ内課金とペイウォールの概要

0:02:00

RevenueCatのAndroid SDKコードラボへようこそ!

このコードラボでは、以下のことを行います:

RevenueCat SDKをプロジェクトに統合 Androidアプリケーションにアプリ内課金を実装 課金ユーザーと非課金ユーザーを区別する方法を学習 サーバードリブンUIアプローチに基づいたペイウォール画面を構築

このコードラボを終える頃には、Androidアプリにアプリ内課金を正常に実装し、RevenueCatのAndroid SDKを使用して動的なペイウォールを表示できるようになります。

overview

RevenueCat SDKのインポート

0:05:00

まず最初に、アプリ内課金を実装する前に、RevenueCat SDKを既存または新規プロジェクトにインポートする必要があります。開始するには、build.gradle.ktsファイルに以下の依存関係を追加します:

GitHubで最新リリースバージョンを確認できます。

Release

gradle
implementation("com.revenuecat.purchases:purchases:9.20.2")

ペイウォールの実装も予定している場合は、代わりに以下の依存関係を含めるだけで済みます:

gradle
implementation("com.revenuecat.purchases:purchases-ui:9.20.2")

Getting Your API Key

Before you can initialize the SDK, you'll need your RevenueCat API key. Here's where to find it:

  1. Go to the RevenueCat dashboard
  2. Navigate to your project
  3. Click on API keys in the left sidebar
  4. Copy your Google Play Store API key (it should start with goog_)
Finding your API key in the RevenueCat dashboard
Important: Keep your API keys secure and never commit them to public repositories. Consider using environment variables or a secure configuration management system for production apps.

Initialize the SDK

次に、以下のコードを使用してApplicationクラスでPurchases SDKを初期化します:

kotlin
/**
 * RevenueCat Purchases SDKを初期化します。
 *
 * `appUserID`はnilなので、Purchases SDKによって匿名IDが自動的に生成されます。
 * ユーザーの識別についてはこちらをご覧ください:https://docs.revenuecat.com/docs/user-ids
 *
 * `purchasesAreCompletedBy`はREVENUECATに設定されているため、Purchasesが自動的にトランザクションの完了を処理します。
 * トランザクションの完了についてはこちらをご覧ください:https://www.revenuecat.com/docs/migrating-to-revenuecat/sdk-or-not/finishing-transactions
 */
val builder = PurchasesConfiguration.Builder(this, "REVENUECAT_API_KEY")
Purchases.configure(
  builder
    .purchasesAreCompletedBy(PurchasesAreCompletedBy.REVENUECAT)
    .appUserID(null)
    .diagnosticsEnabled(true)
    .build(),
)

素晴らしい!これで実装の50%が完了しました。

Entitlementの検証

0:03:00

次に、ユーザーのEntitlementの検証に移りましょう。

前述の通り、Entitlementはユーザーが購入後にロック解除するアクセスレベルや機能を表します。これは、広告バナーを表示するかどうか、またはプレミアムアクセスを付与するかどうかを決定するのに役立ちます。

以下のコードスニペットを使用して、ユーザーがアクティブなEntitlementを持っているかどうかを簡単に確認できます:

kotlin
val ENTITLEMENT_IDENTIFIER = ".." // RevenueCatダッシュボードから特定のEntitlement識別子を取得
val customerInfo = Purchases.sharedInstance.awaitCustomerInfo()
val isEntitled = customerInfo?.entitlements[ENTITLEMENT_IDENTIFIER]?.isActive == true

ユーザーが特定のEntitlementを持っているかどうかを確認したら、アプリのビジネスモデルに基づいてどのように進めるかを決定できます。

例えば、アプリが広告サポートの場合、AdMobバナーを表示または非表示にすることを選択できます。または、ペイウォールや購入ダイアログを表示して、ユーザーが高度な機能やコンテンツをロック解除できるようにすることもできます。

そのロジックを実装する方法の例を以下に示します:

kotlin
@Composable
fun ContentScreen(isEntitled: Boolean) {
    if (isEntitled) {
      // ユーザーがこのEntitlementへのアクセスを付与されている場合、バナーを表示する必要はありません
    } else {
      // ここでバナーUIを表示するか、ペイウォールを表示
      ..
    }
}

アプリ内課金の実装

0:04:00

次に、広告なし体験を提供するためのアプリ内課金を実装しましょう。開始するには、まずRevenueCatダッシュボードから関連する商品情報を取得する必要があります。この商品データは、ユーザーに購入オプションを提示するために使用されます。

以下の例に示すように、Purchases.sharedInstance.awaitGetProducts()を呼び出すことで利用可能な商品を取得できます:

kotlin
// RevenueCatサーバーから商品情報を取得
val products = Purchases.sharedInstance.awaitGetProducts(
  productIds = listOf("paywall_tester.subs"),
)

// アプリ内課金を進行
val purchaseResult = Purchases.sharedInstance.awaitPurchase(
  purchaseParams = PurchaseParams.Builder(
    activity = context as Activity,
    storeProduct = products.first(),
  ).build()
)

paywall_tester.subs:weeklypaywall_tester.subs:monthlypaywall_tester.subs:yearlyなど、複数の商品バリエーションを提供している場合、productIdsフィールドの値としてベース商品識別子paywall_tester.subsを使用することで商品の取得を簡素化できます。これにより、RevenueCatはすべての関連商品バリエーションをリストとして取得し、ペイウォールUIで動的に提示できます。

商品データを取得したら、Purchases.sharedInstance.awaitPurchase(product)を呼び出すことでアプリ内課金フローを開始できます。これにより自動的にGoogle Play購入ダイアログがトリガーされ、ユーザーはアプリ内でトランザクションを完了できます。

このように、わずか数行のコードで完全に機能するアプリ内課金フローを統合できました—レシート、ストアAPI、または購入検証を手動で処理する複雑さに対処する必要はありません。

ペイウォールの実装

0:07:00

次は、Jetpack Composeを使用してAndroidプロジェクトにペイウォールを実装する時間です。

ビジネスロジック

まず、RevenueCatダッシュボードから現在のOfferingを取得する必要があります。Offeringは、月額、年額、または生涯プランなど、ユーザーに提示される利用可能な購入オプションを定義します。これは、以下の例に示すように、Purchases.sharedInstance.awaitOfferings()メソッドを使用して簡単に行えます。

kotlin
internal class DetailsRepositoryImpl @Inject constructor(
  @Dispatcher(CatArticlesDispatchers.IO) private val ioDispatcher: CoroutineDispatcher,
) : DetailsRepository {

  override fun fetchOffering(): Flow<ApiResponse<Offering>> = flow {
    try {
      val offerings = Purchases.sharedInstance.awaitOfferings()
      offerings.current?.let { currentOffering ->
        val response = ApiResponse.of { currentOffering }
        emit(response)
      }
    } catch (e: PurchasesException) {
      ApiResponse.exception(e)
    }
  }.flowOn(ioDispatcher)
}

RevenueCat Android SDKにはKotlinコルーチンのネイティブサポートがあり、コルーチンベースのアーキテクチャを使用するプロジェクトにシームレスにフィットします。現在のOfferingはFlowとしても公開されており、変更をリアクティブに観察し、UIを適宜更新できます。

Jetpack ComposeでのペイウォールUI

この時点で、すべての準備が整っているはずです。com.revenuecat.purchases:purchases-ui SDKを既に追加している場合は、Jetpack Composeを使用してペイウォールUIを簡単に構築できます。

RevenueCatのUIライブラリは、PaywallDialogなどの組み込みコンポーネントを提供しており、ペイウォール画面やダイアログを素早く表示できます。これらのコンポーネントは完全にカスタマイズ可能で、アプリのデザインに合わせて外観と動作を調整するためのさまざまな設定オプションを提供しています。

Jetpack Composeを使用してペイウォールを実装およびカスタマイズするのがいかに簡単かを示す例を以下に示します:

kotlin
val offering by viewModel.offering.collectAsState()

PaywallDialog(
   PaywallDialogOptions.Builder()
       .setDismissRequest {  }
       .setOffering(offering)
       .setFontProvider(..)
       .setListener(object : PaywallListener {
           override fun onPurchaseStarted(rcPackage: Package) {
               super.onPurchaseStarted(rcPackage)
           }

           override fun onPurchaseCompleted(customerInfo: CustomerInfo, storeTransaction: StoreTransaction) {
               super.onPurchaseCompleted(customerInfo, storeTransaction)

               customer = customerInfo
           }

           override fun onPurchaseError(error: PurchasesError) {
               super.onPurchaseError(error)
           }

           override fun onPurchaseCancelled() {
               super.onPurchaseCancelled()
           }
       })
       .build()
)

設定完了!🥳 これで、ユーザーが必要なEntitlementを持っていない場合に、ペイウォールエディターで設定したのとまったく同じデザインでペイウォールを表示できるようになります。

コードラボ:RevenueCat Google Play連携(ペイウォールの作成)で既に見たように、ペイウォールシステムはサーバードリブンUIに基づいて構築されています。これは、アプリの更新をプッシュしたり、レビュープロセスを経たり、ユーザーが新しいバージョンをインストールするのを待つことなく、ダッシュボードから直接ペイウォールのコンテンツとデザインを動的に更新できることを意味します。

まとめ

このコードラボでは、RevenueCatのAndroid SDKを統合し、アプリ内課金を実装し、Jetpack Composeでペイウォールを構築する方法を学びました。さあ、アプリをリリースしてもっとお金を稼ぎましょう!💰

以下のリソースを通じて、Jetpack ComposeでのAndroidプロジェクトでのRevenueCat SDKの使用についてさらに学ぶこともできます: