iOS SDKのインストールと設定
Adapty SDK は、モバイルアプリへのシームレスな統合を実現する 2 つの主要モジュールで構成されています。
- Core Adapty: Adapty をアプリで正常に動作させるために必要な必須 SDK です。
- AdaptyUI: Adapty ペイウォールビルダーを使用する場合に必要なオプションモジュールです。ペイウォールビルダーは、クロスプラットフォームのペイウォールを簡単に作成できる、ノーコードのビジュアルエディターです。
Adapty SDK がモバイルアプリにどのように統合されているか、実際の例を確認したいですか?ペイウォールの表示、購入処理などの基本的な機能を含む完全なセットアップを示すサンプルアプリをご覧ください。
完全な実装の手順については、以下の動画もご覧ください。
必要要件
Adapty iOS SDK は iOS 15.0 以降が必要です。
Xcode 26.4 以降でビルドする場合は、Adapty SDK 3.15.7 以上が必要です。
SDKのインストールは、Adaptyセットアップのステップ5です。アプリ内で課金が機能するようにするには、アプリをストアに接続し、Adapty ダッシュボードでプロダクト、ペイウォール、プレースメントを作成する必要があります。クイックスタートガイドでは、必要なすべての手順を説明しています。
Adapty SDK のインストール
Adapty SDK は Swift Package Manager を使ってインストールします。Xcode で File -> Add Package Dependency… を選択してください。パッケージ依存関係の追加手順は Xcode のバージョンによって異なる場合があるため、必要に応じて Xcode のドキュメントを参照してください。
- リポジトリURLを入力します:
https://github.com/adaptyteam/AdaptySDK-iOS.git - バージョンを選択し(最新の安定バージョンを推奨)、Add Package をクリックします。
- Choose Package Products ウィンドウで、必要なモジュールを選択します:
- Adapty(コアモジュール)
- AdaptyUI(オプション - ペイウォールビルダーを使用する場合のみ)
注意:
- SDK 3.x で キッズモード を有効にするには、Adapty の代わりに Adapty_KidsMode を選択してください。SDK 4.0 以降では通常のモジュールを選択し、キッズモードは
KidsModeパッケージトレイトで有効化します。 - リストにある他のパッケージは選択しないでください – それらは必要ありません。
- Add Package をクリックしてインストールを完了します。
- インストールの確認: プロジェクトナビゲーターの Package Dependencies の下に「Adapty」(および選択した場合は「AdaptyUI」)が表示されていることを確認します。
Adapty iOS SDK 4.0 はプレリリース版です。Swift Package Manager は Up to Next Major Version(from:)ルールではベータバージョンを解決しないため、正確なバージョンを指定する必要があります。Xcode では Dependency Rule を Exact Version に設定し、4.0.0-beta.2 と入力してください。Package.swift では .exact("4.0.0-beta.2") を使用してください。詳しくは Adapty iOS SDK を v4 へ移行する を参照してください。
Adapty SDK の Adapty モジュールを有効化する
アプリのコードで Adapty SDK を有効化します。
Adapty SDK はアプリ内で一度だけ有効化すれば十分です。
Public SDK Key を取得するには:
- Adapty ダッシュボードを開き、App settings → General に移動します。
- Api keys セクションで、Public SDK Key(Secret Key ではない)をコピーします。
- コード内の
"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 はアプリごとに固有です。複数のアプリがある場合は、正しいキーを選択してください。
activate が解決するまで、他の Adapty SDK メソッドを呼び出さないでください。完全な順序については、iOS SDK の呼び出し順序を参照してください。
次に、アプリにペイウォールを設定します:
- Adapty ペイウォールビルダーを使用する場合は、まず以下の AdaptyUI モジュールのアクティベートを行い、その後ペイウォールビルダークイックスタートに従ってください。
- 独自のペイウォール UI を構築する場合は、カスタムペイウォールのクイックスタートを参照してください。
Adapty SDK の AdaptyUI モジュールを有効化する
ペイウォールビルダーを使用する予定があり、AdaptyUI モジュールをインストール済みの場合は、AdaptyUI も有効化する必要があります。
コード内では、AdaptyUI を有効化する前に、Adapty のコアモジュールを先に有効化してください。
AdaptyUI をアクティベートする際に、オプションとしてペイウォールのデフォルトキャッシュ設定をオーバーライドすることができます。
オプション設定
ログ記録
ログシステムの設定
Adapty は、何が起きているかを把握できるよう、エラーやその他の重要な情報をログに記録します。利用可能なログレベルは以下のとおりです:
| Level | Description |
|---|---|
error | エラーのみがログに記録されます |
warn | エラーと、重大なエラーを引き起こさないが注意が必要なSDKからのメッセージがログに記録されます |
info | エラー、警告、およびさまざまな情報メッセージがログに記録されます |
verbose | 関数呼び出し、APIクエリなど、デバッグ時に役立つ可能性のある追加情報がすべてログに記録されます |
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(logLevel: .verbose) // recommended for development
ログシステムのメッセージをリダイレクトする
Adapty のログメッセージを自社システムに送信したり、ファイルに保存したりしたい場合は、setLogHandler メソッドを使用して、その中にカスタムのログ処理ロジックを実装してください。このハンドラーは、メッセージ内容と重要度レベルを含むログレコードを受け取ります。
Adapty.setLogHandler { record in
writeToLocalFile("Adapty \(record.level): \(record.message)")
}
データポリシー
Adapty は、明示的に送信しない限りユーザーの個人データを保存しません。ただし、ストアや国のガイドラインに準拠するために、追加のデータセキュリティポリシーを実装することができます。
IDFA の収集と共有を無効にする
Adapty モジュールを有効化する際に、idfaCollectionDisabled を true に設定すると、IDFA の収集と共有を無効にできます。
このパラメータを使用して、App Store レビューガイドラインに準拠したり、アプリで IDFA が不要な場合に App Tracking Transparency プロンプトの表示を回避したりできます。デフォルト値は false です。IDFA 収集の詳細については、アナリティクス連携セクションを参照してください。
let configurationBuilder =
AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(idfaCollectionDisabled: true)
IP 収集と共有を無効にする
Adaptyモジュールを有効化する際、ipAddressCollectionDisabledをtrueに設定すると、ユーザーのIPアドレスの収集と共有を無効にできます。デフォルト値はfalseです。
このパラメータは、ユーザーのプライバシー保護、GDPRやCCPAなどの地域データ保護規制への準拠、またはIPベースの機能がアプリに不要な場合の不必要なデータ収集削減に役立ちます。
let configurationBuilder =
AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(ipAddressCollectionDisabled: true)
AdaptyUI のペイウォールにおけるメディアキャッシュの設定
AdaptyUI の設定はオプションです。設定なしで AdaptyUI モジュールを有効化することもできます。ただし、設定を使用する場合は、すべてのパラメーターが必須となります。
// Configure AdaptyUI
let adaptyUIConfiguration = AdaptyUI.Configuration(
mediaCacheConfiguration: .init(
memoryStorageTotalCostLimit: 100 * 1024 * 1024,
memoryStorageCountLimit: .max,
diskStorageSizeLimit: 100 * 1024 * 1024
)
)
// Activate AdaptyUI
AdaptyUI.activate(configuration: adaptyUIConfiguration)
パラメーター:
| パラメーター | 必須/任意 | 説明 |
|---|---|---|
| memoryStorageTotalCostLimit | 必須 | ストレージの合計コスト上限(バイト単位)。 |
| memoryStorageCountLimit | 必須 | メモリストレージのアイテム数上限。 |
| diskStorageSizeLimit | 必須 | ディスク上のストレージファイルサイズ上限(バイト単位)。0は上限なしを意味します。 |
トランザクション完了の動作
この機能はSDKバージョン3.12.0以降で利用可能です。
デフォルトでは、Adaptyは検証が成功した後にトランザクションを自動的に完了します。ただし、高度なトランザクション検証(サーバーサイドのレシート検証、不正検出、カスタムビジネスロジックなど)が必要な場合は、手動でトランザクションを完了するようにSDKを設定できます。
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(transactionsFinishBehavior: .manual) // .auto is the default
トランザクションの完了方法の詳細については、ガイドを参照してください。
バックアップ復元時のデータ削除
clearDataOnBackup を true に設定すると、SDKはアプリがiCloudバックアップから復元されたことを検知し、キャッシュされたプロファイル情報、プロダクト詳細、ペイウォールなど、ローカルに保存されているすべてのSDKデータを削除します。その後、SDKはクリーンな状態で初期化されます。デフォルト値は false です。
削除されるのはローカルのSDKキャッシュのみです。Appleとのトランザクション履歴およびAdaptyサーバー上のユーザーデータは変更されません。
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(clearDataOnBackup: true) // default – false
トラブルシューティング
Tuist での Swift 6 並行処理エラー
Tuist でビルドすると、Swift 6 の厳格な並行処理コンパイルエラーが発生することがあります。典型的な症状としては、AdaptyUIBuilderLogic での @Sendable 属性の不一致や、同様のクロスモジュールの Sendability エラーなどが挙げられます。
これは、TuistがSPMパッケージからXcodeプロジェクトを生成する際にswift-tools-version: 6.0の設定を保持しないために発生します。その結果、一部のAdaptyターゲット(Adapty、AdaptyUI、AdaptyUIBuilder)がSwift 5のルールでコンパイルされ、他のターゲットがSwift 6を使用するため、モジュール間で@Sendableの不一致が生じます。
修正方法: Adapty SDK 3.15.5以降にアップグレードしてください。Swift言語バージョンが混在していても、この問題が解消されます。
回避策: アップグレードできない場合は、TuistのコンフィグレーションでAdaptyの3つのターゲットすべてにSwift 6を明示的に設定してください:
targetSettings: [
"Adapty": .init().swiftVersion("6"),
"AdaptyUI": .init().swiftVersion("6"),
"AdaptyUIBuilder": .init().swiftVersion("6"),
]