Android SDKのインストールと設定

Adapty SDKは、モバイルアプリへのシームレスな統合を実現する2つの主要モジュールで構成されています:

  • Core Adapty: AdaptyをアプリでGAするために必要な基本SDKです。
  • AdaptyUI: このモジュールは、旧ビルダーのペイウォールに加え、フローもレンダリングします。AdaptyUIはコアモジュールと同時に自動的に有効化されます。
Tip

Adapty SDK がモバイルアプリにどのように組み込まれるか、実際の例を見てみませんか?ペイウォールの表示、購入処理など基本的な機能を含むフルセットアップを確認できるサンプルアプリをご覧ください。

要件

最小SDKバージョン要件: minSdkVersion 21

Info

SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。クイックスタートガイドでは、必要なすべての手順を説明しています。

依存関係

Adapty SDK は以下の Google Play Billing Library バージョンに対応しています:

Adapty SDK バージョンBilling Library バージョン
4.0.2 以降v8
4.0.0〜4.0.1デフォルトは v7、他の依存関係により v8 に上がる場合あり
3.x ライン上の 3.17.3 以降v8
3.15.0〜3.17.2デフォルトは v7、他の依存関係により v8 に上がる場合あり
Note

特定の Billing Library バージョンに対応しているからといって、Google がそのバージョンで導入したすべての機能を Adapty がサポートしているわけではありません。新しい Google Play の課金機能を採用する前に、Play ストアのプロダクト をご確認ください。

Adapty SDK のインストール

依存関係のセットアップ方法を選択してください:

  • 標準 Gradle: モジュールレベルbuild.gradle に依存関係を追加する
  • プロジェクトで .gradle.kts ファイルを使用している場合は、モジュールレベルの build.gradle.kts に依存関係を追加する
  • バージョンカタログを使用している場合は、libs.versions.toml ファイルに依存関係を追加し、build.gradle.kts で参照する

Release

常に最新バージョンのSDKをインストールすることをお勧めします。最新の安定性修正と改善が含まれています。

依存関係が解決されない場合は、Gradle スクリプトに mavenCentral() が含まれていることを確認してください。

追加方法の手順

プロジェクトの settings.gradledependencyResolutionManagement がない場合は、トップレベルの build.gradle のリポジトリの末尾に以下を追加してください:

allprojects {
    repositories {
        ...
        mavenCentral()
    }
}

それ以外の場合は、settings.gradledependencyResolutionManagement セクションの repositories に以下を追加してください:

dependencyResolutionManagement {
    ...
    repositories {
        ...
        mavenCentral()
    }
}

Adapty SDK の Adapty モジュールを有効化する

基本的なセットアップ

アプリのコードで Adapty SDK を有効化します。

Note

Adapty SDK はアプリで一度だけ有効化する必要があります。

Public SDK Key を取得するには:

  1. Adapty ダッシュボードを開き、App settings → General に移動します。
  2. Api keys セクションで、Public SDK Key(Secret Key ではない)をコピーします。
  3. コード内の "YOUR_PUBLIC_SDK_KEY" を置き換えます。

または、Adapty CLI を使ってプログラムから取得することもできます:

npm install -g adapty
adapty auth login
adapty apps list

あるいは、直接実行する場合:

npx adapty auth login
adapty apps list
  • Adapty の初期化には必ず Public SDK key を使用してください。Secret keyサーバーサイド API 専用です。
  • SDK keys はアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。
Important

他のAdapty SDKメソッドを呼び出す前に、Adapty.activateの完了を待ってください。完全なシーケンスについては、Android SDKの呼び出し順序をご覧ください。

次に、アプリでペイウォールを設定します:

Adapty SDK の AdaptyUI モジュールを有効化する

フロー & ペイウォールビルダーを使用する場合、AdaptyUI モジュールが必要です。コアモジュールを有効化すると自動的に有効化されるため、追加の操作は不要です。

Proguard を設定する

本番環境でアプリを公開する前に、Proguard の設定に -keep class com.adapty.** { *; } を追加してください。

オプションの設定

ログ記録

ログシステムの設定

Adapty はエラーやその他の重要な情報をログに記録し、何が起きているかを把握できるようにします。以下のログレベルが利用可能です:

レベル説明
AdaptyLogLevel.NONE何もログに記録されません。デフォルト値
AdaptyLogLevel.ERRORエラーのみがログに記録されます
AdaptyLogLevel.WARNエラーと、致命的なエラーではないものの注意が必要なSDKからのメッセージがログに記録されます。
AdaptyLogLevel.INFOエラー、警告、および各種情報メッセージがログに記録されます。
AdaptyLogLevel.VERBOSE関数呼び出しやAPIクエリなど、デバッグ時に役立つ可能性のある追加情報がすべてログに記録されます。

Adapty を設定する前に、アプリでログレベルを設定できます。

ログシステムのメッセージをリダイレクトする

何らかの理由で Adapty からのメッセージを自分のシステムに送信したり、ファイルに保存したい場合は、デフォルトの動作を上書きできます。

データポリシー

Adapty は、明示的に送信しない限りユーザーの個人データを保存しません。ただし、ストアや国のガイドラインに準拠するために、追加のデータセキュリティポリシーを実装することもできます。

IPアドレスの収集と共有を無効にする

Adapty モジュールを有効化する際に、ipAddressCollectionDisabledtrue に設定することで、ユーザーの IP アドレスの収集と共有を無効にできます。デフォルト値は false です。

このパラメータを使用すると、ユーザーのプライバシーを保護したり、地域のデータ保護規制(GDPRやCCPAなど)に準拠したり、IPアドレスベースの機能がアプリに不要な場合に不必要なデータ収集を減らすことができます。

広告 ID(Ad ID)の収集と共有を無効にする

Adapty モジュールを有効にする際、adIdCollectionDisabledtrue に設定すると、ユーザーの広告 ID の収集を無効にできます。デフォルト値は false です。

このパラメータは、Play Storeポリシーへの準拠、広告ID権限プロンプトの表示回避、またはアプリが広告IDを使用したアトリビューションや分析を必要としない場合に使用してください。

Adapty アトリビューションを有効にする

Adapty SDK バージョン 4.1 以降、Adapty アトリビューションはデフォルトで無効になっています。Adapty モジュールを有効化する際に、adaptyAttributionEnabledtrue に設定すると、SDK がインストールを登録してインストールの詳細をアプリに配信できます。

SDK バージョン 4.1 未満では、Adapty アトリビューションは自動的に有効になるため、コードの変更は不要です。

AdaptyUI のメディアキャッシュ設定

デフォルトでは、AdaptyUI はパフォーマンスの向上とネットワーク使用量の削減のために、メディア(画像や動画など)をキャッシュします。カスタム設定を指定することで、キャッシュの設定をカスタマイズできます。

AdaptyUI.configureMediaCache を使用して、デフォルトのキャッシュサイズと有効期間を上書きできます。この設定はオプションです。このメソッドを呼び出さない場合は、デフォルト値(ディスクサイズ 100MB、有効期間 7 日間)が使用されます。

パラメーター:

パラメーター必須/任意説明
diskStorageSizeLimit任意ディスク上のキャッシュの合計サイズ(バイト単位)。デフォルトは 100 MB です。
diskCacheValidityTime任意キャッシュされたファイルが有効とみなされる期間。デフォルトは 7 日間です。
Tip

ランタイムで AdaptyUI.clearMediaCache(strategy) を使用してメディアキャッシュをクリアできます。strategy には CLEAR_ALL または CLEAR_EXPIRED_ONLY を指定できます。

難読化されたアカウントIDの設定

Google Playでは、ユーザーのプライバシーとセキュリティを強化するために、特定のユースケースで難読化されたアカウントIDが必要です。これらのIDはGoogle Playが購入を識別するのに役立ちながら、ユーザー情報を匿名に保ちます。特に不正防止や分析において重要です。

アプリが機密性の高いユーザーデータを扱う場合、または特定のプライバシー規制への準拠が求められる場合は、これらのIDを設定する必要があります。難読化されたIDを使用することで、Google Playは実際のユーザー識別子を公開することなく購入を追跡できます。

カスタムプロセスでAdaptyを実行する

デフォルトでは、Adaptyはアプリのメインプロセスでのみ動作します。 アプリが複数のプロセスを使用している場合、Adaptyの初期化は1回だけ行ってください。複数回初期化すると、予期しない動作が発生する可能性があります。

別のプロセスでAdaptyを実行する必要がある場合は、設定で指定してください:

この値を設定せずに別のプロセスで Adapty を有効化しようとすると、SDK は警告をログに記録して有効化をスキップします。

ローカルアクセスレベルを有効にする

デフォルトでは、Android でのローカルアクセスレベルは無効になっています。有効にするには、withLocalAccessLevelAllowedtrue に設定してください:

トラブルシューティング

Android バックアップルール(Auto Backup の設定)

一部の SDK(Adapty を含む)は、独自の Android Auto Backup 設定をバンドルしています。バックアップルールを定義する SDK を複数使用している場合、Android マニフェストのマージ処理が android:fullBackupContentandroid:dataExtractionRules、または android:allowBackup に関するエラーで失敗することがあります。

典型的なエラー例: Manifest merger failed: Attribute application@dataExtractionRules value=(@xml/sample_data_extraction_rules) is also present at [com.other.sdk:library:1.0.0] value=(@xml/other_sdk_data_extraction_rules)

これを解決するには、以下の対応が必要です。

  • マニフェストマージャーに、バックアップ関連の属性にはアプリの値を使用するよう指示する。

  • AdaptyやほかのSDKのバックアップルールを、単一のXMLファイル(Android 12以降の場合はファイルのペア)にまとめる。

1. マニフェストに tools 名前空間を追加する

まだ追加していない場合は、ルートの <manifest> タグに tools 名前空間を追加します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">

    ...
</manifest>

2. <application> でバックアップ属性を上書きする

アプリの AndroidManifest.xml<application> タグを更新し、アプリが最終的な値を提供し、マニフェストマージャーにライブラリの値を置き換えるよう指示します:

<application
android:name=".App"
android:allowBackup="true"
android:fullBackupContent="@xml/sample_backup_rules"
android:dataExtractionRules="@xml/sample_data_extraction_rules"
tools:replace="android:fullBackupContent,android:dataExtractionRules">

    ...
</application>

いずれかの SDK が android:allowBackup も設定している場合は、tools:replace に追加してください:

tools:replace="android:allowBackup,android:fullBackupContent,android:dataExtractionRules"

3. マージされたバックアップルールファイルを作成する

app/src/main/res/xml/ 配下に、Adapty のルールと他の SDK のルールを組み合わせた XML ファイルを作成します。Android は OS バージョンによって異なるバックアップルール形式を使用するため、両方のファイルを作成することで、アプリがサポートするすべての Android バージョンとの互換性が確保されます。

Note

以下の例では、サードパーティ SDK のサンプルとして AppsFlyer を使用しています。実際にアプリで使用している他の SDK のルールに置き換えるか、追記してください。

Android 12 以降の場合(新しいデータ抽出ルール形式を使用):

<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
    <cloud-backup>

        <exclude domain="sharedpref" path="appsflyer-data"/>
        <exclude domain="sharedpref" path="appsflyer-purchase-data"/>
        <exclude domain="database" path="afpurchases.db"/>

        <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
    </cloud-backup>

    <device-transfer>

        <exclude domain="sharedpref" path="appsflyer-data"/>
        <exclude domain="sharedpref" path="appsflyer-purchase-data"/>
        <exclude domain="database" path="afpurchases.db"/>
        <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
    </device-transfer>
</data-extraction-rules>

Android 11以下の場合(レガシーのフルバックアップコンテンツ形式を使用):

<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>

    <exclude domain="sharedpref" path="appsflyer-data"/>


    <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>



</full-backup-content>

この設定により:

  • Adaptyのバックアップ除外設定(AdaptySDKPrefs.xml)が保持されます。

  • 他のSDKの除外設定(例:appsflyer-data)も適用されます。

  • マニフェストマージャーはアプリの設定を使用し、バックアップ属性の競合によるエラーが発生しなくなります。

別のアプリから戻った後に購入が失敗する

購入フローを開始する Activity が非デフォルトの launchMode を使用している場合、ユーザーが Google Play、銀行アプリ、またはブラウザから戻ったときに Android が Activity を誤って再生成または再利用することがあります。これにより、購入結果が失われたり、キャンセルとして扱われたりする可能性があります。

購入が正しく機能するようにするには、購入フローを開始する Activity に standard または singleTop の起動モードのみを使用し、それ以外のモードは避けてください。

AndroidManifest.xml で、購入フローを開始する Activity が standard または singleTop に設定されていることを確認してください:

<activity
    android:name=".MainActivity"
    android:launchMode="standard" />