Adapty は `AdaptySDK` 名前空間を使用します。Adapty SDK を使用するスクリプトファイルの先頭に以下を追加できます:
```csharp showLineNumbers title="C#"
using AdaptySDK;
```
Adapty のイベントを購読します:
```csharp showLineNumbers title="C#"
using UnityEngine;
using AdaptySDK;
public class AdaptyListener : MonoBehaviour, AdaptyEventListener {
public void OnLoadLatestProfile(AdaptyProfile profile) {
// handle updated profile data
}
public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { }
public void OnInstallationDetailsFail(AdaptyError error) { }
}
```
AdaptyListenerをDefault Timeより前に配置するよう、Script Execution Orderを調整することをおすすめします。これにより、Adaptyをできるだけ早く初期化できます。
次に、アプリにペイウォールを設定します:
- [Adapty ペイウォールビルダー](adapty-paywall-builder)を使用する場合は、まず以下の[AdaptyUI モジュールを有効化](#activate-adaptyui-module-of-adapty-sdk)してから、[ペイウォールビルダーのクイックスタート](unity-quickstart-paywalls)をご覧ください。
- 独自のペイウォール UI を作成する場合は、[カスタムペイウォールのクイックスタート](unity-quickstart-manual)をご覧ください。
## Adapty SDKのAdaptyUIモジュールを有効化する \{#activate-adaptyui-module-of-adapty-sdk\}
[ペイウォールビルダー](adapty-paywall-builder)を使用する予定があり、AdaptyUIモジュールをインストール済みの場合は、AdaptyUIを有効化する必要があります。設定時に有効化できます:
```csharp showLineNumbers title="C#"
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetActivateUI(true);
```
## オプション設定 \{#optional-setup\}
### ログ設定 \{#logging\}
#### ログシステムの設定 \{#set-up-the-logging-system\}
Adapty はエラーやその他の重要な情報をログに記録し、状況を把握しやすくします。以下のログレベルが利用できます。
| レベル | 説明 |
| ---------- | ------------------------------------------------------------ |
| `error` | エラーのみがログに記録されます |
| `warn` | エラーと、致命的なエラーではないものの注意が必要なSDKからのメッセージがログに記録されます |
| `info` | エラー、警告、および各種情報メッセージがログに記録されます |
| `verbose` | 関数呼び出しやAPIクエリなど、デバッグ時に役立つ追加情報がすべてログに記録されます |
Adapty の設定時にログレベルを指定できます:
```csharp showLineNumbers title="C#"
// 'verbose' is recommended for development and the first production release
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY");
builder.LogLevel = AdaptyLogLevel.Verbose;
```
実行時にログレベルを変更することも可能です:
```csharp showLineNumbers title="C#"
Adapty.SetLogLevel(AdaptyLogLevel.Verbose, (error) => {
// handle result
});
```
### データポリシー \{#data-policies\}
Adapty はユーザーの個人データを保存しませんが(明示的に送信した場合を除く)、ストアや国のガイドラインに準拠するために追加のデータセキュリティポリシーを設定できます。
#### IPアドレスの収集と共有を無効化する \{#disable-ip-address-collection-and-sharing\}
Adapty モジュールを有効化する際に、`SetIPAddressCollectionDisabled` を `true` に設定すると、ユーザーの IP アドレスの収集と共有を無効化できます。デフォルト値は `false` です。
このパラメータを使用して、ユーザープライバシーを強化し、地域のデータ保護規制(GDPRやCCPAなど)に準拠し、IPベースの機能がアプリに不要な場合の不必要なデータ収集を削減できます。
```csharp showLineNumbers title="C#"
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetIPAddressCollectionDisabled(true);
```
#### 広告IDの収集と共有を無効にする \{#disable-advertising-id-collection-and-sharing\}
Adapty モジュールを有効化する際に、広告識別子の収集を無効にするには `SetAppleIDFACollectionDisabled` および/または `SetGoogleAdvertisingIdCollectionDisabled` を `true` に設定します。デフォルト値は `false` です。
App Store / Google Play のポリシーへの準拠、App Tracking Transparency プロンプトの表示回避、または広告 ID に基づくアトリビューションや分析が不要な場合に、このパラメーターを使用してください。
```csharp showLineNumbers title="C#"
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetAppleIDFACollectionDisabled(true)
.SetGoogleAdvertisingIdCollectionDisabled(true);
```
#### AdaptyUI のメディアキャッシュ設定 \{#set-up-media-cache-configuration-for-adaptyui\}
デフォルトでは、AdaptyUI はパフォーマンス向上とネットワーク使用量の削減のために、画像や動画などのメディアをキャッシュします。カスタム設定を指定することで、キャッシュの設定を変更できます。
デフォルトのキャッシュ設定を上書きするには、`SetAdaptyUIMediaCache` を使用します:
```csharp showLineNumbers title="C#"
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetAdaptyUIMediaCache(
100 * 1024 * 1024, // MemoryStorageTotalCostLimit 100MB
null, // MemoryStorageCountLimit
100 * 1024 * 1024 // DiskStorageSizeLimit 100MB
);
```
パラメーター:
| Parameter | Required | Description |
|-----------------------------|----------|----------------------------------------------------------------------------------|
| memoryStorageTotalCostLimit | optional | メモリ内のキャッシュ合計サイズ(バイト単位)。デフォルト値はプラットフォームによって異なります。 |
| memoryStorageCountLimit | optional | メモリストレージのアイテム数の上限。デフォルト値はプラットフォームによって異なります。 |
| diskStorageSizeLimit | optional | ディスク上のファイルサイズの上限(バイト単位)。デフォルト値はプラットフォームによって異なります。 |
### Android でローカルアクセスレベルを有効にする \{#enable-local-access-levels-android\}
デフォルトでは、[ローカルアクセスレベル](local-access-levels)は iOS で有効、Android で無効になっています。Android でも有効にするには、`SetGoogleLocalAccessLevelAllowed` を `true` に設定してください。
```csharp showLineNumbers title="C#"
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetGoogleLocalAccessLevelAllowed(true);
```
### バックアップリストア時のデータクリア \{#clear-data-on-backup-restore\}
`SetAppleClearDataOnBackup` を `true` に設定すると、SDKはアプリがiCloudバックアップから復元されたことを検出し、キャッシュされたプロファイル情報、プロダクト詳細、ペイウォールなど、ローカルに保存されているすべてのSDKデータを削除します。その後、SDKはクリーンな状態で初期化されます。デフォルト値は `false` です。
:::note
削除されるのはローカルのSDKキャッシュのみです。Appleとのトランザクション履歴およびAdaptyサーバー上のユーザーデータは変更されません。
:::
```csharp showLineNumbers title="C#"
var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY")
.SetAppleClearDataOnBackup(true);
```
## トラブルシューティング \{#troubleshooting\}
#### Androidバックアップルール(Auto Backup設定) \{#android-backup-rules-auto-backup-configuration\}
一部のSDK(Adaptyを含む)には、独自のAndroid Auto Backup設定が含まれています。バックアップルールを定義する複数のSDKを使用している場合、Androidのマニフェストマージャーが `android:fullBackupContent`、`android:dataExtractionRules`、または `android:allowBackup` に関するエラーで失敗することがあります。
よくあるエラーの症状: `Manifest merger failed: Attribute application@dataExtractionRules value=(@xml/your_data_extraction_rules)
is also present at [com.other.sdk:library:1.0.0] value=(@xml/other_sdk_data_extraction_rules)`
:::note
これらの変更は、Androidプラットフォームのディレクトリ(通常はプロジェクトの `android/` フォルダー内)で行う必要があります。
:::
この問題を解決するには、以下が必要です:
- バックアップ関連の属性に対して、アプリの値を使用するようマニフェストマージャーに指示する。
- AdaptyのルールとほかのSDKのルールをマージしたバックアップルールファイルを作成する。
#### 1. マニフェストに `tools` 名前空間を追加する \{#1-add-the-tools-namespace-to-your-manifest\}
`AndroidManifest.xml` ファイルのルートの `
2. `/Assets/Plugins/Android/launcherTemplate.gradle` に以下の行を追加します。
```groovy showLineNumbers
apply plugin: 'com.android.application'
// highlight-next-line
apply plugin: 'kotlin-android'
apply from: 'setupSymbols.gradle'
apply from: '../shared/keepUnitySymbols.gradle'
```
3. `/Assets/Plugins/Android/baseProjectTemplate.gradle` に以下の行を追加します:
```groovy showLineNumbers
plugins {
// If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity
// See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html
// See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
// To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
id 'com.android.application' version '8.3.0' apply false
id 'com.android.library' version '8.3.0' apply false
// highlight-next-line
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
**BUILD_SCRIPT_DEPS**
}
```
---
# File: unity-quickstart-paywalls
---
---
title: "Unity SDK のペイウォールを使って購入を有効にする"
description: "Adapty SDK を使って Unity アプリでペイウォールを表示する方法を学ぶ"
---
アプリ内課金を有効にするには、3 つの重要な概念を理解する必要があります。
- [**プロダクト**](product) – ユーザーが購入できるもの(サブスクリプション、消耗型アイテム、永続アクセスなど)
- [**ペイウォール**](paywalls) – どのプロダクトを提供するかを定義する設定です。Adapty では、プロダクトの取得はペイウォールを通じてのみ行えます。この設計により、アプリのコードを変更せずにオファー内容、価格、プロダクトの組み合わせを変更できます。
- [**プレースメント**](placements) – アプリ内でペイウォールを表示する場所とタイミング(`main`、`onboarding`、`settings` など)。ダッシュボードでプレースメントに対してペイウォールを設定し、コード内でプレースメント ID を使ってリクエストします。これにより、A/B テストの実施や、ユーザーごとに異なるペイウォールの表示が容易になります。
Adapty では、アプリ内で購入を有効にする 3 つの方法を提供しています。アプリの要件に応じて選択してください。
| 実装方法 | 複雑さ | 使用場面 |
|---------------------------|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Adapty ペイウォールビルダー | ✅ 簡単 | [ノーコードビルダーで完全な購入対応ペイウォールを作成します](quickstart-paywalls)。Adapty が自動的にレンダリングし、複雑な購入フロー、レシート検証、サブスクリプション管理をすべて裏側で処理します。 |
| 手動作成のペイウォール | 🟡 中程度 | ペイウォールの UI をアプリのコードで実装しますが、プロダクトオファーの柔軟性を保つため、Adapty からペイウォールオブジェクトを取得します。[ガイド](unity-quickstart-manual)を参照してください。 |
| オブザーバーモード | 🔴 難しい | 独自の購入処理インフラを既に持っており、それを引き続き使用したい場合に選びます。オブザーバーモードには Adapty における制限があることに注意してください。[記事](observer-vs-full-mode)を参照してください。 |
:::important
**以下の手順は、Adapty ペイウォールビルダーで作成したペイウォールの実装方法を示しています。**
ペイウォールビルダーを使用しない場合は、[手動作成ペイウォールでの購入処理ガイド](unity-making-purchases)を参照してください。
:::
Adapty ペイウォールビルダーで作成したペイウォールを表示するには、アプリのコードで以下の手順を実行するだけです。
1. **ペイウォールを取得する**: Adapty からペイウォールを取得します。
2. **ペイウォールを表示する(購入処理は Adapty が行います)**: 取得したペイウォールコンテナをアプリに表示します。
3. **ボタンアクションを処理する**: ペイウォール上のユーザー操作とアプリのレスポンスを紐付けます。たとえば、ユーザーがボタンをクリックしたときにリンクを開いたり、ペイウォールを閉じたりします。
## 始める前に \{#before-you-start\}
始める前に、以下の手順を完了してください。
1. Adapty ダッシュボードでアプリを [App Store](initial_ios) および/または [Google Play](initial-android) に接続します。
2. Adapty で[プロダクトを作成します](create-product)。
3. [ペイウォールを作成してプロダクトを追加します](create-paywall)。
4. [プレースメントを作成してペイウォールを追加します](create-placement)。
5. アプリのコードに [Adapty SDK をインストールして有効化します](sdk-installation-unity)。
:::tip
これらの手順を最短で完了するには、[クイックスタートガイド](quickstart)に従うか、[Developer CLI](developer-cli-quickstart) を使ってペイウォールとプレースメントを作成してください。
:::
## 1. ペイウォールを取得する \{#1-get-the-paywall\}
ペイウォールはダッシュボードで設定したプレースメントに紐付けられています。プレースメントを使うと、異なるオーディエンスに対して別々のペイウォールを表示したり、[A/B テスト](ab-tests)を実施したりできます。
Adapty ペイウォールビルダーで作成したペイウォールを取得するには、以下の手順を実行します。
1. `GetPaywall` メソッドを使って[プレースメント](placements) ID から `paywall` オブジェクトを取得し、`HasViewConfiguration` プロパティでビルダーで作成されたペイウォールかどうかを確認します。
2. `CreatePaywallView` メソッドを使ってペイウォールビューを作成します。このビューには、ペイウォールを表示するために必要な UI 要素とスタイルが含まれています。
:::important
ビュー設定を取得するには、ペイウォールビルダーで **Show on device** トグルをオンにする必要があります。オフのままにすると、空のビュー設定が返され、ペイウォールが表示されません。
:::
```csharp showLineNumbers
Adapty.GetPaywall("YOUR_PLACEMENT_ID", (paywall, error) => {
if(error != null) {
// handle the error
return;
}
// Create paywall view parameters
var parameters = new AdaptyUICreatePaywallViewParameters();
// Create the paywall view
AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
if(error != null) {
// handle the error
return;
}
// view - the paywall view ready to be presented
});
});
```
:::info
このクイックスタートはペイウォールを表示するための最小限の設定を提供しています。高度な設定の詳細については、[ペイウォールの取得に関するガイド](unity-get-pb-paywalls)を参照してください。
:::
## 2. ペイウォールを表示する \{#2-display-the-paywall\}
ペイウォール設定を取得したら、数行追加するだけでペイウォールを表示できます。
ペイウォールを表示するには、`CreatePaywallView` メソッドで作成した `view` に対して `view.Present()` メソッドを呼び出します。各 `view` は一度しか使用できません。ペイウォールを再度表示する必要がある場合は、`CreatePaywallView` をもう一度呼び出して新しい `view` インスタンスを作成してください。
```csharp showLineNumbers title="Unity"
view.Present((error) => {
// handle the error
});
```
:::info
ペイウォールの表示方法の詳細については、[ガイド](unity-present-paywalls)を参照してください。
:::
## 3. ボタンアクションを処理する \{#3-handle-button-actions\}
ユーザーがペイウォール内のボタンをクリックすると、Unity SDK が購入と復元を自動的に処理します。ただし、カスタムまたは事前定義された ID を持つその他のボタンについては、コードでアクションを処理する必要があります。
たとえば、ペイウォールには通常、閉じるボタンや開くべき URL(利用規約やプライバシーポリシーなど)があります。これらのアクションを処理するには、クラスが `AdaptyPaywallsEventsListener` インターフェースを実装し、リスナーとして登録する必要があります。
:::tip
ボタンの[アクション](unity-handle-paywall-actions)と[イベント](unity-handling-events)の処理方法については、各ガイドを参照してください。
:::
```csharp showLineNumbers title="Unity"
public class YourClass : MonoBehaviour, AdaptyPaywallsEventsListener
{
void Start()
{
// Register this class as the paywall events listener
Adapty.SetPaywallsEventsListener(this);
}
// AdaptyPaywallsEventsListener method - handles button actions
public void PaywallViewDidPerformAction(
AdaptyUIPaywallView view,
AdaptyUIUserAction action
) {
switch (action.Type) {
case AdaptyUIUserActionType.Close:
view.Dismiss(null);
break;
case AdaptyUIUserActionType.OpenUrl:
Application.OpenURL(action.Value);
break;
default:
break;
}
}
}
```
## 次のステップ \{#next-steps\}
:::tip
ご質問やお困りのことがあれば、[サポートフォーラム](https://adapty.featurebase.app/)をご覧ください。よくある質問への回答を見つけたり、ご自身の質問を投稿することができます。チームとコミュニティがサポートいたします!
:::
ペイウォールをアプリに表示する準備が整いました。[App Store サンドボックス](test-purchases-in-sandbox)または [Google Play ストア](testing-on-android)でテスト購入を行い、ペイウォールからテスト購入を完了できることを確認してください。
次に、[ユーザーのアクセスレベルを確認し](unity-check-subscription-status)、適切なユーザーにペイウォールを表示したり、有料機能へのアクセスを付与したりできるようにする必要があります。
## 完全な実装例 \{#full-example\}
以下は、すべての手順をアプリに統合した場合の例です。
```csharp showLineNumbers
using System;
using UnityEngine;
using AdaptySDK;
public class PaywallManager : MonoBehaviour, AdaptyPaywallsEventsListener
{
[SerializeField] private string placementId = "YOUR_PLACEMENT_ID";
private AdaptyUIPaywallView currentPaywallView;
void Start()
{
// Register for paywall events
Adapty.SetPaywallsEventsListener(this);
GetAndDisplayPaywall();
}
private void GetAndDisplayPaywall()
{
Adapty.GetPaywall(placementId, (paywall, error) => {
if (error != null) {
Debug.LogError("Error getting paywall: " + error.Message);
return;
}
if (paywall.HasViewConfiguration) {
CreateAndPresentPaywallView(paywall);
} else {
Debug.LogWarning("Paywall was not created using the builder");
}
});
}
private void CreateAndPresentPaywallView(AdaptyPaywall paywall)
{
var parameters = new AdaptyUICreatePaywallViewParameters();
AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
if (error != null) {
Debug.LogError("Error creating paywall view: " + error.Message);
return;
}
currentPaywallView = view;
view.Present((presentError) => {
if (presentError != null) {
Debug.LogError("Error presenting paywall: " + presentError.Message);
return;
}
Debug.Log("Paywall presented successfully");
});
});
}
// AdaptyPaywallsEventsListener implementation
public void PaywallViewDidPerformAction(
AdaptyUIPaywallView view,
AdaptyUIUserAction action
) {
switch (action.Type) {
case AdaptyUIUserActionType.Close:
Debug.Log("Close button pressed");
view.Dismiss(null);
break;
case AdaptyUIUserActionType.OpenUrl:
Application.OpenURL(action.Value);
break;
default:
break;
}
}
// Required interface methods (implement as needed)
public void PaywallViewDidAppear(AdaptyUIPaywallView view) { }
public void PaywallViewDidDisappear(AdaptyUIPaywallView view) { }
public void PaywallViewDidSelectProduct(AdaptyUIPaywallView view, string productId) { }
public void PaywallViewDidStartPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product) { }
public void PaywallViewDidFinishPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyPurchaseResult purchasedResult) { }
public void PaywallViewDidFailPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyError error) { }
public void PaywallViewDidStartRestore(AdaptyUIPaywallView view) { }
public void PaywallViewDidFinishRestore(AdaptyUIPaywallView view, AdaptyProfile profile) { }
public void PaywallViewDidFailRestore(AdaptyUIPaywallView view, AdaptyError error) { }
public void PaywallViewDidFailRendering(AdaptyUIPaywallView view, AdaptyError error) { }
public void PaywallViewDidFailLoadingProducts(AdaptyUIPaywallView view, AdaptyError error) { }
public void PaywallViewDidFinishWebPaymentNavigation(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyError error) { }
public void ShowPaywall()
{
GetAndDisplayPaywall();
}
void OnDestroy()
{
if (currentPaywallView != null) {
currentPaywallView.Dismiss(null);
}
}
}
```
---
# File: unity-check-subscription-status
---
---
title: "Unity SDKでサブスクリプションステータスを確認する"
description: "AdaptyでUnityアプリのサブスクリプションステータスを確認する方法を学びます。"
---
ユーザーが有料コンテンツにアクセスできるか、またはペイウォールを表示するかどうかを判断するには、プロファイル内の[アクセスレベル](access-level)を確認する必要があります。
この記事では、プロファイルの状態にアクセスして、ユーザーにペイウォールを表示するか有料機能へのアクセスを許可するかを判断する方法を説明します。
## サブスクリプションステータスを取得する \{#get-subscription-status\}
ユーザーにペイウォールを表示するか有料コンテンツを表示するかを判断する際は、プロファイル内の[アクセスレベル](access-level)を確認します。2つの方法があります:
- アプリ起動時などに最新のプロファイルデータがすぐに必要な場合や、強制的に更新したい場合は `GetProfile` を呼び出します。
- サブスクリプションステータスが変わるたびに自動的に更新されるローカルコピーを保持するために、**プロファイルの自動更新**を設定します。
### プロファイルを取得する \{#get-profile\}
サブスクリプションステータスを取得するもっとも簡単な方法は、`GetProfile` メソッドを使ってプロファイルにアクセスすることです:
```csharp showLineNumbers
Adapty.GetProfile((profile, error) => {
if (error != null) {
// handle the error
return;
}
// check the access
});
```
### サブスクリプションの更新を受け取る \{#listen-to-subscription-updates\}
アプリでプロファイルの更新を自動的に受け取るには:
1. `AdaptyEventListener` を継承して `OnLoadLatestProfile` メソッドを実装します。ユーザーのサブスクリプションステータスが変わると、Adaptyが自動的にこのメソッドを呼び出します。
2. このメソッドが呼び出されたときに更新されたプロファイルデータを保存しておくと、追加のネットワークリクエストなしにアプリ全体で利用できます。
```csharp
public class SubscriptionManager : MonoBehaviour, AdaptyEventListener {
private AdaptyProfile currentProfile;
void Start() {
// Register this object as an Adapty event listener
Adapty.SetEventListener(this);
}
// Store the profile when it updates
public void OnLoadLatestProfile(AdaptyProfile profile) {
currentProfile = profile;
// Update UI, unlock content, etc.
}
public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { }
public void OnInstallationDetailsFail(AdaptyError error) { }
// Use stored profile instead of calling getProfile()
public bool HasAccess() {
if (currentProfile?.AccessLevels != null &&
currentProfile.AccessLevels.ContainsKey("premium")) {
return currentProfile.AccessLevels["premium"].IsActive;
}
return false;
}
}
```
:::note
Adaptyはアプリ起動時に自動的に `OnLoadLatestProfile` を呼び出し、デバイスがオフラインでもキャッシュされたサブスクリプションデータを提供します。
:::
## プロファイルとペイウォールロジックを連携させる \{#connect-profile-with-paywall-logic\}
ペイウォールの表示や有料機能へのアクセス許可をすぐに判断したい場合は、ユーザーのプロファイルを直接確認できます。この方法は、アプリ起動時、プレミアムセクションに入るとき、特定のコンテンツを表示する前など、さまざまなシナリオで役立ちます。
```csharp
private void CheckAccessLevel()
{
Adapty.GetProfile((profile, error) => {
if (error != null) {
Debug.LogError("Error checking access level: " + error.Message);
// Show paywall if access check fails
return;
}
var accessLevel = profile.AccessLevels["YOUR_ACCESS_LEVEL"];
if (accessLevel == null || !accessLevel.IsActive) {
// Show paywall if no access
}
});
}
private void InitializePaywall()
{
LoadPaywall();
CheckAccessLevel();
}
```
## 次のステップ \{#next-steps\}
サブスクリプションステータスの追跡方法を確認したら、次は[ユーザープロファイルの操作](unity-quickstart-identify)を学んで、ユーザーが購入したものにアクセスできるようにしましょう。
---
# File: unity-quickstart-identify
---
---
title: "Unity SDKでユーザーを識別する"
description: "UnityでのアプリNの課金管理のためのAdaptyセットアップクイックスタートガイド。"
---
:::important
このガイドは、独自の認証システムをお持ちの方向けです。ここでは、既存の認証システムと連携するために、Adaptyのユーザープロファイルをどのように扱うかを説明します。
:::
ユーザーの購入管理の方法は、アプリの認証モデルによって異なります。
- アプリがバックエンド認証を使用せず、ユーザーデータを保存しない場合は、[匿名ユーザーのセクション](#anonymous-users)をご覧ください。
- アプリにバックエンド認証がある(または予定している)場合は、[識別済みユーザーのセクション](#identified-users)をご覧ください。
**主要な概念**:
- **プロファイル**はSDKが動作するために必要なエンティティです。Adaptyが自動的に作成します。
- 匿名(**カスタマーユーザーIDなし**)または識別済み(**カスタマーユーザーIDあり**)のいずれかになります。
- **カスタマーユーザーID**を提供することで、Adaptyのプロファイルと内部認証システムを相互参照できます。
匿名ユーザーと識別済みユーザーの違いは次のとおりです。
| | 匿名ユーザー | 識別済みユーザー |
|-------------------------|---------------------------------------------------|-------------------------------------------------------------------------|
| **購入管理** | ストアレベルの購入復元 | カスタマーユーザーIDを通じてデバイス間で購入履歴を維持 |
| **プロファイル管理** | 再インストールのたびに新しいプロファイルが作成される | セッションやデバイスをまたいで同じプロファイルを使用 |
| **データの永続性** | 匿名ユーザーのデータはアプリのインストールに紐付けられる | 識別済みユーザーのデータはアプリのインストールをまたいで保持される |
## 匿名ユーザー \{#anonymous-users\}
バックエンド認証を使用しない場合、**アプリコードで認証を処理する必要はありません**。
1. アプリの初回起動時にSDKがアクティベートされると、Adaptyは**そのユーザーの新しいプロファイルを作成**します。
2. ユーザーがアプリ内で何かを購入すると、その購入は**Adaptyプロファイルとストアアカウントに関連付け**られます。
3. ユーザーがアプリを**再インストール**したり、**新しいデバイス**にインストールしたりすると、Adaptyはアクティベーション時に**新しい匿名プロファイルを作成**します。
4. ユーザーが以前にアプリで購入していた場合、デフォルトではSDKのアクティベーション時にApp Storeから購入履歴が自動的に同期されます。
匿名ユーザーの場合、インストールのたびに新しいプロファイルが作成されますが、Adaptyのアナリティクスでは[新規インストールとして見なす基準を設定](general#4-installs-definition-for-analytics)できるため、問題はありません。
匿名ユーザーの場合、**デバイスID**でインストールをカウントする必要があります。この場合、再インストールを含む、デバイスへのアプリインストールのたびにインストールとしてカウントされます。
## 識別済みユーザー \{#identified-users\}
アプリでユーザーを識別するには、2つの方法があります。
- [**ログイン/サインアップ時:**](#during-loginsignup) アプリ起動後にユーザーがサインインする場合、認証時に`identify()`をカスタマーユーザーIDとともに呼び出します。
- [**SDKアクティベーション時:**](#during-the-sdk-activation) アプリ起動時にすでにカスタマーユーザーIDが保存されている場合は、`activate()`の呼び出し時に渡します。
:::important
デフォルトでは、Adaptyが現在別のカスタマーユーザーIDに関連付けられているカスタマーユーザーIDからの購入を受け取った場合、アクセスレベルは共有されるため、両方のプロファイルが有料アクセスを持ちます。この設定を変更して、有料アクセスを一方のプロファイルから他方に移譲したり、共有を完全に無効にしたりすることができます。詳細は[こちらの記事](general#6-sharing-paid-access-between-user-accounts)をご覧ください。
:::
### ログイン/サインアップ時 \{#during-loginsignup\}
アプリ起動後にユーザーを識別する場合(例:アプリへのログイン後やサインアップ後)、`identify`メソッドを使用してカスタマーユーザーIDを設定します。
- **このカスタマーユーザーIDを以前に使用したことがない**場合、Adaptyは自動的に現在のプロファイルに紐付けます。
- **このカスタマーユーザーIDでユーザーを以前に識別したことがある**場合、AdaptyはそのカスタマーユーザーIDに関連付けられたプロファイルに切り替えて処理を行います。
:::important
カスタマーユーザーIDは各ユーザーで一意である必要があります。パラメータ値をハードコードすると、すべてのユーザーが同一人物として扱われます。
:::
他のSDKメソッドを呼び出す前に、`Identify`の完了コールバックを待ってください。同時に呼び出すと`#3006 profileWasChanged`が発生するか、匿名プロファイルに対して処理が行われます。詳細は[Unity SDKの呼び出し順序](unity-sdk-call-order)をご覧ください。
```csharp showLineNumbers
Adapty.Identify("YOUR_USER_ID", (error) => { // Unique for each user
if(error == null) {
// successful identify
}
});
```
### SDKアクティベーション時 \{#during-the-sdk-activation\}
SDKをアクティベートする際にすでにカスタマーユーザーIDがわかっている場合は、`identify`を別途呼び出す代わりに、`activate`メソッドに渡すことができます。
カスタマーユーザーIDがわかっているのにアクティベーション後にのみ設定する場合、アクティベーション時にAdaptyが新しい匿名プロファイルを作成し、`identify`を呼び出した後にのみ既存のプロファイルに切り替わります。
既存のカスタマーユーザーID(以前に使用したもの)または新しいものを渡すことができます。新しいものを渡すと、アクティベーション時に作成された新しいプロファイルが自動的にそのカスタマーユーザーIDに紐付けられます。
:::note
デフォルトでは、匿名プロファイルの作成はアナリティクスダッシュボードに影響しません。インストールはデバイスIDに基づいてカウントされるためです。
デバイスIDはデバイスへのアプリのストアからの単一インストールを表し、アプリの再インストール後にのみ再生成されます。
初回インストールか再インストールか、または既存のカスタマーユーザーIDが使用されているかどうかには依存しません。
プロファイルの作成(SDKのアクティベーション時またはログアウト時)、ログイン、またはアプリの再インストールなしのアップグレードは、追加のインストールイベントを生成しません。
デバイスではなく一意のユーザーに基づいてインストールをカウントしたい場合は、**App settings**に移動して[**Installs definition for analytics**](general#4-installs-definition-for-analytics)を設定してください。
:::
```csharp showLineNumbers
using UnityEngine;
using AdaptySDK;
var builder = new AdaptyConfiguration.Builder("YOUR_API_KEY")
.SetCustomerUserId("YOUR_USER_ID"); // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});
```
### ユーザーをログアウトする \{#log-users-out\}
ユーザーをログアウトさせるボタンがある場合は、`logout`メソッドを使用します。
:::important
ユーザーをログアウトすると、そのユーザーの新しい匿名プロファイルが作成されます。
:::
```csharp showLineNumbers
Adapty.Logout((error) => {
if(error == null) {
// successful logout
}
});
```
:::info
ユーザーをアプリに再度ログインさせるには、`identify`メソッドを使用します。
:::
### ログインなしでの購入を許可する \{#allow-purchases-without-login\}
ユーザーがアプリへのログイン前後の両方で購入できる場合、ログイン後もアクセスが維持されるよう対応が必要です。
1. ログアウト状態のユーザーが購入すると、AdaptyはそれをそのユーザーのアノニマスプロファイルIDに紐付けます。
2. ユーザーがアカウントにログインすると、Adaptyはその識別済みプロファイルへの処理に切り替えます。
- 新しいカスタマーユーザーIDの場合(例:登録前に購入が行われた場合)、Adaptyはカスタマーユーザーをを現在のプロファイルに割り当てるため、すべての購入履歴が維持されます。
- 既存のカスタマーユーザーIDの場合(カスタマーユーザーIDがすでにプロファイルに紐付けられている場合)、プロファイルの切り替え後に実際のアクセスレベルを取得する必要があります。識別後すぐに[`getProfile`](unity-check-subscription-status)を呼び出すか、[プロファイルの更新をリッスン](unity-check-subscription-status)してデータを自動的に同期させることができます。
## 次のステップ \{#next-steps\}
おめでとうございます!アプリにアプリ内課金のロジックを実装できました!アプリの収益化がうまくいくことを願っています!
Adaptyをさらに活用するために、以下のトピックも探ってみてください。
- [**テスト**](troubleshooting-test-purchases): すべてが期待どおりに動作することを確認する
- [**オンボーディング**](onboardings): オンボーディングでユーザーを引き込み、継続率を高める
- [**インテグレーション**](configuration): マーケティングアトリビューションや分析サービスをたった1行のコードで統合する
- [**カスタムプロファイル属性を設定する**](unity-setting-user-attributes): ユーザープロファイルにカスタム属性を追加してセグメントを作成し、A/B テストを実施したり、異なるユーザーに異なるペイウォールを表示したりする
---
# File: adapty-sdk-integration-skill-unity
---
---
title: "SDKインテグレーションスキルを使ってAdaptyをUnityアプリに統合する"
description: "adapty-sdk-integrationスキルを使用して、AIコーディングツールでAdapty SDKをUnityアプリにエンドツーエンドで統合します。"
---
:::important
このスキルはベータ版です。スキルが途中で止まったり予期しない動作をする場合は、代わりに[ステップバイステップの統合ガイド](adapty-cursor-unity)を参照してください。AIツールが各ステージを適切なドキュメントとともに順を追って進められるようになっています。
:::
[adapty-sdk-integration スキル](https://github.com/adaptyteam/adapty-sdk-integration-skill)は、Adapty のインテグレーションをエンドツーエンドで自動化します。ダッシュボードのセットアップ、SDK のインストール、ペイウォール、各ステージの検証まで対応しています。プラットフォームを自動検出し、各ステージで関連する Adapty ドキュメントを取得します。
**対応ツール**: Claude Code、GitHub Copilot CLI、OpenAI Codex、Gemini CLI。
インストールするには、お使いのツールに対応したフォームを選択してください。全リストは[スキルの README](https://github.com/adaptyteam/adapty-sdk-integration-skill) にあります。
**Claude Code**
```
claude plugin marketplace add adaptyteam/adapty-sdk-integration-skill
claude plugin install adapty-sdk-integration@adapty
```
**GitHub Copilot CLI**
```
gh skill install adaptyteam/adapty-sdk-integration-skill
```
**Gemini CLI**
```
gemini skills install https://github.com/adaptyteam/adapty-sdk-integration-skill
```
**OpenAI Codex またはその他のツール** — [skills CLI](https://skills.sh) を使用してください(この方法でインストールしたスキルは自動更新されません):
```
npx skills add adaptyteam/adapty-sdk-integration-skill
```
または、リポジトリをクローンして `skills/adapty-sdk-integration/` をお使いのツールのスキルディレクトリにコピーしてください。
インストール後、プロジェクトでスキルを実行します:
```
/adapty-sdk-integration
```
スキルがいくつかのセットアップに関する質問をした後、ダッシュボードのセットアップ、SDK のインストール、ペイウォール、検証の手順を案内します。
---
# File: adapty-cursor-unity
---
---
title: "AIアシスタンスを使ってUnityアプリにAdaptyを統合する"
description: "Cursor、Context7、ChatGPT、Claude、その他のAIツールを使用して、UnityアプリにAdaptyを統合するためのステップバイステップガイド。"
---
このガイドでは、AIコーディングツールを使ってUnityアプリにAdaptyを段階的に統合する手順を説明します。適切なAdaptyドキュメントを正しい順序でAIに提供することがポイントです。
For a fully automated integration, use the [adapty-sdk-integration skill](https://github.com/adaptyteam/adapty-sdk-integration-skill): it runs the whole integration from your AI coding tool in one command.
## 始める前に:ダッシュボードの設定 \{#before-you-start-dashboard-setup\}
AdaptyはSDKコードを書く前に、ダッシュボードでの設定が必要です。インタラクティブなLLMスキルを使うか、ダッシュボードから手動で設定できます。
### スキルを使うアプローチ(推奨) \{#skill-approach-recommended\}
Adapty CLIスキルを使うと、LLMがアプリ、プロダクト、アクセスレベル、ペイウォール、プレースメントを直接設定できます。ダッシュボードを都度開く必要がなく、[ストアの接続](integrate-payments)だけダッシュボードで行えば大丈夫です。
```
npx skills add adaptyteam/adapty-cli --skill adapty-cli
```
スキルを追加したら、エージェントで `/adapty-cli` を実行してください。各ステップをガイドしてくれます。ストアの接続が必要なタイミングも案内してくれます。
### ダッシュボードを使うアプローチ \{#dashboard-approach\}
すべてを手動で設定したい場合は、コードを書く前に以下の準備が必要です。ダッシュボードの値はLLMが調べることができないため、ご自身で用意してください。
1. **アプリストアを接続する**: Adapty ダッシュボードで **App settings → General** に移動し、UnityアプリがiOSとAndroid両方を対象としている場合はApp StoreとGoogle Playの両方を接続してください。購入機能を動作させるために必須です。
[アプリストアを接続する](integrate-payments)
2. **Public SDKキーをコピーする**: Adapty ダッシュボードで **App settings → General** に移動し、**API keys** セクションを見つけてください。コード上ではAdaptyの設定ビルダーに渡す文字列として使用します。
3. **プロダクトを少なくとも1つ作成する**: Adapty ダッシュボードで **Products** ページに移動してください。プロダクトはコードから直接参照しません。Adaptyはペイウォールを通じてプロダクトを配信します。
[プロダクトを追加する](quickstart-products)
4. **ペイウォールとプレースメントを作成する**: Adapty ダッシュボードの **Paywalls** ページでペイウォールを作成し、**Placements** ページでプレースメントに割り当てます。コードでは、プレースメントIDが `Adapty.GetPaywall("YOUR_PLACEMENT_ID")` に渡す文字列になります。
[ペイウォールを作成する](quickstart-paywalls)
5. **アクセスレベルを設定する**: Adapty ダッシュボードの **Products** ページでプロダクトごとに設定します。コードでは `profile.AccessLevels["premium"]?.IsActive` で確認する文字列です。デフォルトの `premium` アクセスレベルはほとんどのアプリで機能します。プロダクトによって異なる機能へのアクセス権を付与する場合(例:`basic` プランと `pro` プラン)は、コーディングを始める前に[追加のアクセスレベルを作成](assigning-access-level-to-a-product)してください。
:::tip
5つすべて揃ったら、コードを書く準備完了です。LLMに「Public SDKキーはX、プレースメントIDはY」と伝えると、正確な初期化コードとペイウォール取得コードを生成してもらえます。
:::
### 準備ができたら設定する \{#set-up-when-ready\}
コーディングを始めるにあたって必須ではありませんが、統合が成熟するにつれて必要になります:
- **A/B テスト**: **Placements** ページで設定します。コードの変更は不要です。
[A/B テスト](ab-tests)
- **追加のペイウォールとプレースメント**: 異なるプレースメントIDで `GetPaywall` の呼び出しを追加します。
- **アナリティクス統合**: **Integrations** ページで設定します。統合によって設定方法が異なります。[アナリティクス統合](analytics-integration)と[アトリビューション統合](attribution-integration)を参照してください。
## AdaptyドキュメントをLLMに提供する \{#feed-adapty-docs-to-your-llm\}
### Context7を使う(推奨) \{#use-context7-recommended\}
[Context7](https://context7.com)は、LLMが最新のAdaptyドキュメントに直接アクセスできるMCPサーバーです。質問の内容に基づいて適切なドキュメントを自動的に取得するため、URLを手動で貼り付ける必要がありません。
Context7は**Cursor**、**Claude Code**、**Windsurf**、その他のMCP対応ツールで使用できます。セットアップするには以下を実行してください:
```
npx ctx7 setup
```
エディタを自動検出してContext7サーバーを設定します。手動設定については[Context7 GitHubリポジトリ](https://github.com/upstash/context7)を参照してください。
設定が完了したら、プロンプトでAdaptyライブラリを参照してください:
```
Use the adaptyteam/adapty-docs library to look up how to install the Unity SDK
```
:::warning
Context7を使うとドキュメントのリンクを手動で貼り付ける必要がなくなりますが、実装の順序は重要です。すべてが正しく動作するよう、以下の[実装ウォークスルー](#implementation-walkthrough)をステップ順に進めてください。
:::
### プレーンテキストのドキュメントを使う \{#use-plain-text-docs\}
AdaptyのドキュメントはプレーンテキストのMarkdownとしてアクセスできます。URLの末尾に `.md` を追加するか、記事タイトルの下にある **Copy for LLM** をクリックしてください。例:[adapty-cursor-unity.md](https://adapty.io/docs/ja/adapty-cursor-unity.md)。
以下の[実装ウォークスルー](#implementation-walkthrough)の各ステージには、貼り付け用の `.md` リンクを含む「LLMに送信するもの」ブロックが含まれています。
より多くのドキュメントが必要な場合は、以下の[インデックスファイルとプラットフォーム別サブセット](#plain-text-doc-index-files)を参照してください。
## 実装ウォークスルー \{#implementation-walkthrough\}
このガイドの残りの部分では、実装の順序でAdapty統合を進めていきます。各ステージにはLLMに送るドキュメント、完了時の確認事項、よくある問題が含まれています。
### 統合の計画を立てる \{#plan-your-integration\}
コードを書き始める前に、LLMにプロジェクトを分析させて実装計画を立ててもらいましょう。AIツールがプランニングモードをサポートしている場合(CursorやClaude Codeのプランモードなど)、コードを書く前にLLMがプロジェクト構造とAdaptyドキュメントの両方を読めるよう、それを使用してください。
購入に使用するアプローチをLLMに伝えてください。これによって参照すべきガイドが変わります:
- [**Adapty ペイウォールビルダー**](adapty-paywall-builder): Adaptyのノーコードビルダーでペイウォールを作成し、SDKが自動的にレンダリングします。
- [**手動で作成したペイウォール**](unity-making-purchases): コードで独自のペイウォールUIを構築しますが、プロダクトの取得と購入処理にはAdaptyを使用します。
- [**オブザーバーモード**](observer-vs-full-mode): 既存の購入インフラを維持し、アナリティクスと統合のみにAdaptyを使用します。
どれを選べばいいか迷っていますか?[クイックスタートの比較表](unity-quickstart-paywalls)を読んでください。
### SDKをインストールして設定する \{#install-and-configure-the-sdk\}
Unity Package ManagerでAdapty SDKパッケージを追加し、Public SDKキーで有効化します。これが基盤となり、他のすべての機能はこれなしでは動作しません。
**ガイド:** [Adapty SDKをインストールして設定する](sdk-installation-unity)
LLMに送信するもの:
```
Read these Adapty docs before writing code:
- https://adapty.io/docs/ja/sdk-installation-unity.md
```
:::tip[チェックポイント]
- **期待される結果:** プロジェクトがビルドされ実行されます。UnityコンソールにAdaptyのアクティベーションログが表示されます。
- **注意点:** 「Public API key is missing」→ プレースホルダーをApp settingsの実際のキーに置き換えたか確認してください。
:::
### ペイウォールを表示して購入を処理する \{#show-paywalls-and-handle-purchases\}
プレースメントIDでペイウォールを取得し、表示して、購入イベントを処理します。必要なガイドは購入の処理方法によって異なります。
進めながらサンドボックスで各購入をテストしてください。最後まで待たないようにしましょう。設定手順については[サンドボックスで購入をテストする](test-purchases-in-sandbox)を参照してください。
任意
デフォルト: `en`
|[ペイウォールのローカライズ](add-paywall-locale-in-adapty-paywall-builder)の識別子。マイナス(**-**)文字で区切られた1つまたは2つのサブタグからなる言語コードを指定します。最初のサブタグは言語、2番目は地域を表します。
例:`en` は英語、`pt-br` はブラジルポルトガル語を表します。
ロケールコードと推奨される使用方法については、[ローカライズとロケールコード](localizations-and-locale-codes)を参照してください。
| | **fetchPolicy** | デフォルト: `.reloadRevalidatingCacheData` |デフォルトでは、SDKはサーバーからデータの読み込みを試み、失敗した場合はキャッシュされたデータを返します。ユーザーが常に最新のデータを取得できるため、このオプションを推奨します。
ただし、ユーザーの接続が不安定な場合は、`.returnCacheDataElseLoad` を使用してキャッシュデータが存在する場合はそれを返すことを検討してください。この場合、最新のデータが得られないことがありますが、接続状況にかかわらず読み込み時間が短縮されます。キャッシュは定期的に更新されるため、セッション中にネットワークリクエストを避けるために使用しても安全です。
キャッシュはアプリの再起動後も保持され、アプリの再インストールまたは手動クリーンアップ時にのみクリアされます。
Adapty SDK はペイウォールをローカルに2層で保存します:上述の定期更新キャッシュと[フォールバックペイウォール](fallback-paywalls)です。また、CDNを使用してペイウォールをより高速に取得し、CDNが利用できない場合のためにスタンドアロンのフォールバックサーバーも用意しています。このシステムは、インターネット接続が不安定な場合でも常に最新バージョンのペイウォールを取得できるよう設計されています。
| | **loadTimeout** | デフォルト: 5秒 |このメソッドのタイムアウトを制限する値です。タイムアウトに達した場合、キャッシュデータまたはローカルフォールバックが返されます。
内部で複数のリクエストが発生する場合があるため、まれに `loadTimeout` で指定した時間より少し遅くタイムアウトすることがあります。
| レスポンスパラメーター: | パラメーター | 説明 | | :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | | Paywall | プロダクトIDのリスト、ペイウォール識別子、リモートコンフィグ、その他のプロパティを含む [`AdaptyPaywall`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_paywall.html) オブジェクト。 | ## ペイウォールビルダーで設計したペイウォールのビュー設定を取得する \{#fetch-the-view-configuration-of-paywall-designed-using-paywall-builder\} :::important ペイウォールビルダーで **Show on device** トグルが有効になっていることを確認してください。このオプションがオンになっていない場合、ビュー設定を取得できません。 ::: ペイウォールを取得したら、`ViewConfiguration` が含まれているかどうかを確認します。これはペイウォールビルダーで作成されたことを示します。`ViewConfiguration` が存在する場合はペイウォールビルダーのペイウォールとして扱い、存在しない場合は[リモートコンフィグペイウォールとして処理](present-remote-config-paywalls-unity)します。 Unity SDK では、ビュー設定を手動で取得せずに、直接 `CreatePaywallView` メソッドを呼び出します。 :::warning `CreatePaywallView` メソッドの結果は1回のみ使用できます。再度使用する必要がある場合は、`CreatePaywallView` メソッドを再度呼び出してください。再作成せずに2回呼び出すと、`AdaptyUIError.viewAlreadyPresented` エラーが発生する場合があります。 ::: ```csharp showLineNumbers var parameters = new AdaptyUICreatePaywallViewParameters() .SetPreloadProducts(preloadProducts) .SetLoadTimeout(new TimeSpan(0, 0, 3)); AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => { // handle the result }); ``` パラメーター: | パラメーター | 必須/任意 | 説明 | | :------------------ | :------------- | :----------------------------------------------------------- | | **paywall** | 必須 | 対象のペイウォールのコントローラーを取得するための `AdaptyPaywall` オブジェクト。 | | **loadTimeout** | デフォルト: 5秒 | このメソッドのタイムアウトを制限する値です。タイムアウトに達した場合、キャッシュデータまたはローカルフォールバックが返されます。内部で複数のリクエストが発生する場合があるため、まれに `loadTimeout` で指定した時間より少し遅くタイムアウトすることがあります。 | | **PreloadProducts** | 任意 | `AdaptyPaywallProducts` の配列を提供して、画面上のプロダクト表示タイミングを最適化します。`nil` が渡された場合、AdaptyUI は必要なプロダクトを自動的に取得します。 | | **CustomTags** | 任意 | カスタムタグとその解決済みの値の辞書を定義します。カスタムタグはペイウォールコンテンツのプレースホルダーとして機能し、ペイウォール内のパーソナライズされたコンテンツのために特定の文字列に動的に置き換えられます。詳細はペイウォールビルダーのカスタムタグのトピックを参照してください。 | | **CustomTimers** | 任意 | カスタムタイマーとその終了日時の辞書を定義します。カスタムタイマーを使用すると、ペイウォールにカウントダウンタイマーを表示できます。 | :::note 複数の言語を使用する場合、[ペイウォールビルダーのローカライズ](add-paywall-locale-in-adapty-paywall-builder)を追加する方法と、ロケールコードを正しく使用する方法を[こちら](localizations-and-locale-codes)で確認してください。 ::: ビューを取得したら、[ペイウォールを表示](unity-present-paywalls)します。 ## アセットをカスタマイズする \{#customize-assets\} ペイウォール内の画像や動画をカスタマイズするには、カスタムアセットを実装します。 ヒーロー画像と動画には事前定義されたID(`hero_image` と `hero_video`)があります。カスタムアセットバンドルでは、これらのIDでターゲット要素を指定してカスタマイズします。 その他の画像や動画については、Adapty ダッシュボードで[カスタムIDを設定](custom-media)する必要があります。 例えば、以下のことができます: - 一部のユーザーに異なる画像や動画を表示する。 - リモートのメイン画像の読み込み中にローカルのプレビュー画像を表示する。 - 動画再生前にプレビュー画像を表示する。 :::important この機能を使用するには、Adapty Unity SDK をバージョン 3.8.0 以降に更新してください。 ::: シンプルな辞書でカスタムアセットを提供する例: ```csharp showLineNumbers var customAssets = new Dictionary任意
デフォルト: `en`
|ペイウォールのローカライズの識別子。マイナス(**-**)文字で区切られた1つまたは2つのサブタグからなる言語コードを指定します。最初のサブタグは言語、2番目は地域を表します。
例:`en` は英語、`pt-br` はブラジルポルトガル語を表します。
| | **fetchPolicy** | デフォルト: `.reloadRevalidatingCacheData` |デフォルトでは、SDKはサーバーからデータの読み込みを試み、失敗した場合はキャッシュされたデータを返します。ユーザーが常に最新のデータを取得できるため、このオプションを推奨します。
ただし、ユーザーの接続が不安定な場合は、`.returnCacheDataElseLoad` を使用してキャッシュデータが存在する場合はそれを返すことを検討してください。この場合、最新のデータが得られないことがありますが、接続状況にかかわらず読み込み時間が短縮されます。キャッシュは定期的に更新されるため、セッション中にネットワークリクエストを避けるために使用しても安全です。
キャッシュはアプリの再起動後も保持され、アプリの再インストールまたは手動クリーンアップ時にのみクリアされます。
Adapty SDK はペイウォールをローカルに2層で保存します:上述の定期更新キャッシュとフォールバックペイウォールです。また、CDNを使用してペイウォールをより高速に取得し、CDNが利用できない場合のためにスタンドアロンのフォールバックサーバーも用意しています。このシステムは、インターネット接続が不安定な場合でも常に最新バージョンのペイウォールを取得できるよう設計されています。
| --- # File: unity-present-paywalls --- --- title: "ペイウォールを表示する" description: "Adapty SDK を使用して Unity アプリでペイウォールを表示する方法を学びましょう。" --- ペイウォールビルダーを使ってペイウォールをカスタマイズしている場合、モバイルアプリのコード内でユーザーに表示するためのレンダリング処理は不要です。このようなペイウォールには、表示する内容と表示方法の両方が含まれています。 :::warning このガイドは、Adapty SDK 3.3.0 以降が必要な**新しいペイウォールビルダー**を対象としています。 リモートコンフィグのペイウォールを表示する場合は、[リモートコンフィグで設計したペイウォールのレンダリング](present-remote-config-paywalls)を参照してください。 ::: ペイウォールを表示するには、[`CreatePaywallView`](unity-get-pb-paywalls#fetch-the-view-configuration-of-paywall-designed-using-paywall-builder) メソッドで作成した `view` に対して `view.Present()` メソッドを使用します。各 `view` は一度しか使用できません。ペイウォールを再度表示する必要がある場合は、`CreatePaywallView` をもう一度呼び出して新しい `view` インスタンスを作成してください。 :::warning `view` を再作成せずに再利用すると、`AdaptyUIError.viewAlreadyPresented` エラーが発生する場合があります。 ::: ```csharp showLineNumbers title="Unity" view.Present((error) => { // handle the error }); ``` :::tip Adapty SDK がモバイルアプリにどのように統合されているか、実際の例を見てみませんか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを実演している[サンプルアプリ](sample-apps)をご覧ください。 ::: ## ダイアログを表示する \{#show-dialog\} Android でペイウォールビューが表示されている場合は、ネイティブのアラートダイアログの代わりにこのメソッドを使用してください。Android では、通常のアラートはペイウォールビューの背面に表示されるため、ユーザーには見えません。このメソッドを使用すると、すべてのプラットフォームでペイウォールの上に正しくダイアログが表示されます。 ```csharp showLineNumbers title="Unity" var dialog = new AdaptyUIDialogConfiguration() .SetTitle("Close paywall?") .SetContent("You will lose access to exclusive offers.") .SetDefaultActionTitle("Stay") .SetSecondaryActionTitle("Close"); AdaptyUI.ShowDialog(view, dialog, (action, error) => { if (error == null) { if (action == AdaptyUIDialogActionType.Secondary) { // User confirmed - close the paywall view.Dismiss(); } // If primary - do nothing, user stays } }); ``` ## iOS の表示スタイルを設定する \{#configure-ios-presentation-style\} `Present()` メソッドに `iosPresentationStyle` パラメーターを渡すことで、iOS でのペイウォールの表示方法を設定できます。パラメーターには `AdaptyUIIOSPresentationStyle.FullScreen`(デフォルト)または `AdaptyUIIOSPresentationStyle.PageSheet` を指定できます。 ```csharp showLineNumbers title="Unity" view.Present(AdaptyUIIOSPresentationStyle.PageSheet, (error) => { // handle the error }); ``` --- # File: unity-handle-paywall-actions --- --- title: "Unity SDKでボタンアクションに応答する" description: "AdaptyのUnityでペイウォールのボタンアクションを処理して、アプリのマネタイズを改善します。" --- Adaptyのペイウォールビルダーを使ってペイウォールを作成する場合、ボタンを適切に設定することが重要です。 1. [ペイウォールビルダーでボタンを追加](paywall-buttons)し、既存のアクションを割り当てるか、カスタムアクションIDを作成します。 2. 割り当てた各アクションを処理するコードをアプリに実装します。 このガイドでは、カスタムアクションと既存のアクションをコードで処理する方法を説明します。 :::warning **購入と復元のみ自動的に処理されます。** ペイウォールを閉じる、リンクを開くなど、その他のボタンアクションはすべて、アプリのコードに適切な処理を実装する必要があります。 ::: ## ペイウォールを閉じる \{#close-paywalls\} ペイウォールを閉じるボタンを追加するには、次の手順に従います。 1. ペイウォールビルダーでボタンを追加し、**Close** アクションを割り当てます。 2. アプリのコードに、ペイウォールを閉じる `close` アクションのハンドラーを実装します。 ```csharp showLineNumbers title="Unity" public void PaywallViewDidPerformAction( AdaptyUIPaywallView view, AdaptyUIUserAction action ) { switch (action.Type) { case AdaptyUIUserActionType.Close: view.Dismiss(null); break; default: // handle other events break; } } ``` ## ペイウォールからURLを開く \{#open-urls-from-paywalls\} :::tip リンクのグループ(利用規約や購入の復元など)を追加したい場合は、ペイウォールビルダーで **Link** 要素を追加し、**Open URL** アクションが設定されたボタンと同じ方法で処理します。 ::: ペイウォールからリンクを開くボタン(**Terms of use** や **Privacy policy** など)を追加するには、次の手順に従います。 1. ペイウォールビルダーでボタンを追加し、**Open URL** アクションを割り当て、開きたいURLを入力します。 2. アプリのコードに、受け取ったURLをブラウザで開く `openUrl` アクションのハンドラーを実装します。 ```csharp showLineNumbers title="Unity" public void PaywallViewDidPerformAction( AdaptyUIPaywallView view, AdaptyUIUserAction action ) { switch (action.Type) { case AdaptyUIUserActionType.OpenUrl: var urlString = action.Value; if(!string.IsNullOrWhiteSpace(urlString)) { Application.OpenURL(urlString); } break; default: // handle other events break; } } ``` ## アプリへのログイン \{#log-into-the-app\} ユーザーをアプリにログインさせるボタンを追加するには、次の手順に従います。 1. ペイウォールビルダーでボタンを追加し、ID `login` の **Custom** アクションを割り当てます。 2. アプリのコードに、ユーザーを識別する `login` カスタムアクションのハンドラーを実装します。 ```csharp showLineNumbers title="Unity" public void PaywallViewDidPerformAction( AdaptyUIPaywallView view, AdaptyUIUserAction action ) { switch (action.Type) { case AdaptyUIUserActionType.Custom: if (action.Value == "login") { // Navigate to login scene SceneManager.LoadScene("LoginScene"); } break; default: // handle other events break; } } ``` ## カスタムアクションを処理する \{#handle-custom-actions\} その他のアクションを処理するボタンを追加するには、次の手順に従います。 1. ペイウォールビルダーでボタンを追加し、**Custom** アクションを割り当て、IDを設定します。 2. アプリのコードに、作成したアクションIDのハンドラーを実装します。 たとえば、別のサブスクリプションオファーや買い切り購入がある場合、別のペイウォールを表示するボタンを追加できます。 ```csharp showLineNumbers title="Unity" public void PaywallViewDidPerformAction( AdaptyUIPaywallView view, AdaptyUIUserAction action ) { switch (action.Type) { case AdaptyUIUserActionType.Custom: if (action.Value == "openNewPaywall") { // Display another paywall ShowAlternativePaywall(); } break; default: // handle other events break; } } private void ShowAlternativePaywall() { // Implement your logic to show alternative paywall } ``` --- # File: unity-handling-events --- --- title: "ペイウォールイベントの処理" description: "Adapty SDK を使用して Unity アプリでペイウォールイベントを処理する方法を学びましょう。" --- :::important このガイドでは、購入・復元・プロダクト選択・ペイウォールのレンダリングに関するイベント処理を説明します。ボタン操作(ペイウォールを閉じる、リンクを開くなど)の実装も必要です。詳細は[ボタンアクションの処理ガイド](unity-handle-paywall-actions)をご覧ください。 ::: [ペイウォールビルダー](adapty-paywall-builder)で設定されたペイウォールは、購入や復元のために追加コードは不要です。ただし、アプリが応答できるいくつかのイベントが生成されます。これらのイベントには、ボタン操作(閉じるボタン、URL、プロダクト選択など)や、ペイウォール上で行われた購入関連のアクションへの通知が含まれます。以下でこれらのイベントへの対応方法を説明します。 :::warning このガイドは、Adapty SDK v3.3.0 以降が必要な**新しいペイウォールビルダーのペイウォール**専用です。 ::: :::tip Adapty SDK がモバイルアプリにどのように統合されているか、実際の例を見てみませんか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを実演している[サンプルアプリ](sample-apps)をご覧ください。 ::: ## イベントの処理 \{#handling-events\} モバイルアプリ内のペイウォール画面で発生するプロセスを制御・監視するには、`AdaptyPaywallsEventsListener` インターフェースを実装します。 ```csharp showLineNumbers title="Unity" using UnityEngine; using AdaptySDK; public class PaywallEventsHandler : MonoBehaviour, AdaptyPaywallsEventsListener { void Start() { Adapty.SetPaywallsEventsListener(this); } // Implement all required interface methods below } ``` ### ユーザーが生成するイベント \{#user-generated-events\} #### ペイウォールの表示 \{#paywall-appeared\} ペイウォールビューが画面に表示されたときに呼び出されます。 :::note iOS では、ユーザーがペイウォール内の[ウェブペイウォールボタン](web-paywall#step-2a-add-a-web-purchase-button)をタップして、インアプリブラウザでウェブペイウォールが開いたときにも呼び出されます。 ::: ```csharp showLineNumbers title="Unity" public void PaywallViewDidAppear(AdaptyUIPaywallView view) { } ``` #### ペイウォールの非表示 \{#paywall-disappeared\} ペイウォールビューが画面から閉じられたときに呼び出されます。 :::note iOS では、ペイウォールからインアプリブラウザで開いた[ウェブペイウォール](web-paywall#step-2a-add-a-web-purchase-button)が画面から消えたときにも呼び出されます。 ::: ```csharp showLineNumbers title="Unity" public void PaywallViewDidDisappear(AdaptyUIPaywallView view) { } ``` #### プロダクト選択 \{#product-selection\} プロダクトが購入対象として選択されたとき(ユーザーまたはシステムによる)に呼び出されます。 ```csharp showLineNumbers title="Unity" public void PaywallViewDidSelectProduct( AdaptyUIPaywallView view, string productId ) { } ```
## ペイウォールのビュー数が多すぎる \{#the-paywall-view-number-is-too-big\}
**問題**: ペイウォールのビュー数が期待値の2倍になっている。
**原因**: コード内で `LogShowPaywall` を呼び出している可能性があります。ペイウォールビルダーを使用している場合、この呼び出しによってビュー数が重複します。ペイウォールビルダーでデザインされたペイウォールでは、アナリティクスが自動的に追跡されるため、このメソッドを使用する必要はありません。
**解決策**: ペイウォールビルダーを使用している場合は、コード内で `LogShowPaywall` を呼び出していないことを確認してください。
## その他の問題 \{#other-issues\}
**問題**: 上記以外のペイウォールビルダー関連の問題が発生している。
**解決策**: 必要に応じて[マイグレーションガイド](unity-sdk-migration-guides)を参照し、SDKを最新バージョンに移行してください。多くの問題は新しいSDKバージョンで解決されています。
---
# File: unity-quickstart-manual
---
---
title: "Unity SDKでカスタムペイウォールの購入を有効にする"
description: "Adapty SDKをUnityのカスタムペイウォールに統合してアプリ内課金を有効にします。"
---
このガイドでは、カスタムペイウォールへのAdapty統合方法を説明します。ペイウォールの実装を完全にコントロールしながら、Adapty SDKがプロダクトの取得、新規購入の処理、過去の購入の復元を担当します。
:::important
**このガイドはカスタムペイウォールを実装する開発者向けです。** 購入を最も簡単に有効にする方法をお探しの場合は、[Adapty ペイウォールビルダー](unity-quickstart-paywalls)をご利用ください。ペイウォールビルダーを使えば、ノーコードのビジュアルエディターでペイウォールを作成でき、購入ロジックはAdaptyが自動処理します。また、アプリを再公開することなく異なるデザインをテストできます。
:::
## 始める前に \{#before-you-start\}
### プロダクトのセットアップ \{#set-up-products\}
アプリ内課金を有効にするには、次の3つの重要な概念を理解する必要があります:
- [**プロダクト**](product) – ユーザーが購入できるもの(サブスクリプション、消耗型アイテム、永続アクセス)
- [**ペイウォール**](paywalls) – どのプロダクトを提供するかを定義する設定。Adaptyではペイウォールがプロダクトを取得する唯一の方法ですが、この設計によりアプリコードを変更せずにプロダクト、価格、オファーを変更できます。
- [**プレースメント**](placements) – アプリ内でペイウォールを表示する場所とタイミング(`main`、`onboarding`、`settings`など)。ダッシュボードでプレースメントにペイウォールを設定し、コード内でプレースメントIDを使ってリクエストします。これにより、A/Bテストの実施や異なるユーザーへの異なるペイウォール表示が簡単になります。
カスタムペイウォールを使う場合でも、これらの概念を理解しておくことが重要です。基本的に、アプリで販売するプロダクトを管理するための手段です。
カスタムペイウォールを実装するには、**ペイウォール**を作成して**プレースメント**に追加する必要があります。この設定によりプロダクトを取得できます。ダッシュボードで何をすべきかを理解するには、[こちら](quickstart)のクイックスタートガイドをご覧ください。
### ユーザーの管理 \{#manage-users\}
バックエンド認証の有無にかかわらず利用できます。
ただし、Adapty SDKは匿名ユーザーと識別済みユーザーを異なる方法で扱います。詳細を確認し、ユーザーを適切に扱うために[識別クイックスタートガイド](unity-quickstart-identify)をお読みください。
## ステップ1. プロダクトを取得する \{#step-1-get-products\}
カスタムペイウォール用のプロダクトを取得するには、次の手順が必要です:
1. `getPaywall`メソッドに[プレースメント](placements)IDを渡して`paywall`オブジェクトを取得します。
2. `getPaywallProducts`メソッドを使ってこのペイウォールのプロダクト配列を取得します。
```csharp showLineNumbers
using AdaptySDK;
void LoadPaywall() {
Adapty.GetPaywall("YOUR_PLACEMENT_ID", (paywall, error) => {
if (error != null) {
// Handle the error
return;
}
Adapty.GetPaywallProducts(paywall, (products, productsError) => {
if (productsError != null) {
// Handle the error
return;
}
// Use products to build your custom paywall UI
});
});
}
```
## ステップ2. 購入を受け付ける \{#step-2-accept-purchases\}
ユーザーがカスタムペイウォールでプロダクトをタップしたら、選択されたプロダクトを引数に`makePurchase`メソッドを呼び出します。購入フローが処理され、更新されたプロファイルが返されます。
```csharp showLineNumbers
using AdaptySDK;
void PurchaseProduct(AdaptyPaywallProduct product) {
Adapty.MakePurchase(product, (result, error) => {
if (error != null) {
// Handle the error
return;
}
switch (result.Type) {
case AdaptyPurchaseResultType.Success:
var profile = result.Profile;
// Purchase successful, profile updated
break;
case AdaptyPurchaseResultType.UserCancelled:
// User canceled the purchase
break;
case AdaptyPurchaseResultType.Pending:
// Purchase is pending (e.g., user will pay offline with cash)
break;
}
});
}
```
## ステップ3. 購入を復元する \{#step-3-restore-purchases\}
アプリストアは、サブスクリプションのあるすべてのアプリに対して、ユーザーが購入を復元できる手段を提供することを要求しています。
ユーザーが復元ボタンをタップしたら`restorePurchases`メソッドを呼び出します。購入履歴がAdaptyと同期され、更新されたプロファイルが返されます。
```csharp showLineNumbers
using AdaptySDK;
void RestorePurchases() {
Adapty.RestorePurchases((profile, error) => {
if (error != null) {
// Handle the error
return;
}
// Restore successful, profile updated
});
}
```
## 次のステップ \{#next-steps\}
:::tip
ご質問やお困りのことがあれば、[サポートフォーラム](https://adapty.featurebase.app/)をご覧ください。よくある質問への回答を見つけたり、ご自身の質問を投稿することができます。チームとコミュニティがサポートいたします!
:::
ペイウォールをアプリに表示する準備が整いました。[App Storeサンドボックス](test-purchases-in-sandbox)または[Google Play Store](testing-on-android)でテスト購入を実施して、ペイウォールからテスト購入を完了できることを確認してください。
次に、[ユーザーが購入を完了したかどうか確認](unity-check-subscription-status)して、ペイウォールを表示するか有料機能へのアクセスを許可するかを判断します。
---
# File: fetch-paywalls-and-products-unity
---
---
title: "Unity SDKでリモートコンフィグペイウォールのペイウォールとプロダクトを取得する"
description: "Adapty Unity SDKでペイウォールとプロダクトを取得し、ユーザーのマネタイズを強化する。"
---
リモートコンフィグやカスタムペイウォールを表示する前に、それらの情報を取得する必要があります。このトピックはリモートコンフィグおよびカスタムペイウォールに関するものです。ペイウォールビルダーでカスタマイズしたペイウォールの取得方法については、[ペイウォールビルダーのペイウォールと設定の取得](unity-get-pb-paywalls)を参照してください。
:::tip
Adapty SDK がモバイルアプリにどのように統合されているか、実際の例を見てみませんか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを実演している[サンプルアプリ](sample-apps)をご覧ください。
:::
任意
デフォルト: `en`
|[ペイウォールのローカライゼーション](add-remote-config-locale)の識別子。このパラメータはマイナス(**-**)文字で区切られた1つ以上のサブタグで構成される言語コードを指定します。最初のサブタグは言語、2番目は地域を表します。
例: `en` は英語、`pt-br` はブラジルポルトガル語を表します。
ロケールコードの詳細と推奨される使い方については、[ローカライゼーションとロケールコード](unity-localizations-and-locale-codes)を参照してください。
| | **fetchPolicy** | デフォルト: `.reloadRevalidatingCacheData` |デフォルトでは、SDKはサーバーからデータを読み込もうとし、失敗した場合はキャッシュデータを返します。ユーザーが常に最新のデータを取得できるため、この設定を推奨します。
ただし、ユーザーのインターネット接続が不安定だと思われる場合は、`.returnCacheDataElseLoad` を使用してキャッシュデータが存在する場合に返すことを検討してください。この場合、ユーザーは最新データを取得できないことがありますが、通信状況に関わらず読み込みが速くなります。キャッシュは定期的に更新されるため、セッション中のネットワークリクエスト削減に安全に使用できます。
キャッシュはアプリの再起動後も保持され、アプリの再インストールまたは手動でのクリア時のみ削除されます。
Adapty SDKはペイウォールを2層で保存します。上記の定期更新キャッシュと[フォールバックペイウォール](unity-use-fallback-paywalls)です。また、CDNを使用してペイウォールを高速に取得し、CDNが利用できない場合のスタンドアロンフォールバックサーバーも用意しています。このシステムは、インターネット接続が不安定な環境でも常に最新バージョンのペイウォールを確実に取得できるよう設計されています。
| | **loadTimeout** | デフォルト: 5秒 |このメソッドのタイムアウトを制限します。タイムアウトに達した場合、キャッシュデータまたはローカルフォールバックが返されます。
このメソッドは内部で複数のリクエストを実行する場合があるため、まれに `loadTimeout` で指定した時間よりわずかに遅れてタイムアウトすることがあります。
| プロダクトIDはハードコードしないでください!ペイウォールはリモートで設定されるため、利用可能なプロダクト、プロダクトの数、特典(無料トライアルなど)は時間とともに変わる場合があります。これらのシナリオをコードで処理するようにしてください。 例えば、最初に2つのプロダクトを取得した場合、アプリはその2つを表示します。後で3つのプロダクトを取得した場合も、コード変更なしにすべての3つを表示できるようにしてください。ハードコードが必要なのはプレースメントIDだけです。 レスポンスパラメータ: | パラメータ | 説明 | | :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | | Paywall | プロダクトIDのリスト、ペイウォール識別子、リモートコンフィグ、その他いくつかのプロパティを含む [`AdaptyPaywall`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_paywall.html) オブジェクト。 | ## プロダクトの取得 \{#fetch-products\} ペイウォールを取得したら、対応するプロダクト配列を取得できます: ```csharp showLineNumbers Adapty.GetPaywallProducts(paywall, (products, error) => { if(error != null) { // handle the error return; } // products - the requested products array }); ``` レスポンスパラメータ: | パラメータ | 説明 | | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Products | プロダクト識別子、プロダクト名、価格、通貨、サブスクリプション期間、その他いくつかのプロパティを含む [`AdaptyPaywallProduct`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_paywall_product.html) オブジェクトのリスト。 | 独自のペイウォールデザインを実装する場合、[`AdaptyPaywallProduct`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_paywall_product.html) オブジェクトのプロパティへのアクセスが必要になるでしょう。以下によく使用されるプロパティを示しますが、すべての利用可能なプロパティの詳細はリンク先のドキュメントを参照してください。 | プロパティ | 説明 | |-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Title** | プロダクトのタイトルを表示するには `product.LocalizedTitle` を使用してください。ローカライゼーションはデバイス自体のロケールではなく、ユーザーが選択しているストアの国に基づきます。 | | **Price** | ローカライズされた価格を表示するには `product.Price.LocalizedString` を使用してください。このローカライゼーションはデバイスのロケール情報に基づきます。`product.Price.Amount` を使用して価格を数値として取得することもできます。値はローカル通貨で提供されます。関連する通貨記号を取得するには `product.Price.CurrencySymbol` を使用してください。 | | **Subscription Period** | 期間(週、月、年など)を表示するには `product.Subscription?.LocalizedPeriod` を使用してください。このローカライゼーションはデバイスのロケールに基づきます。プログラムでサブスクリプション期間を取得するには `product.Subscription?.Period` を使用してください。そこから `Unit` 列挙型にアクセスして長さを取得できます(`AdaptySubscriptionPeriodUnit.Day`、`AdaptySubscriptionPeriodUnit.Week`、`AdaptySubscriptionPeriodUnit.Month`、`AdaptySubscriptionPeriodUnit.Year`、または `AdaptySubscriptionPeriodUnit.Unknown`)。`NumberOfUnits` の値で期間単位の数を取得できます。例えば、四半期サブスクリプションの場合、Unit プロパティに `AdaptySubscriptionPeriodUnit.Month`、NumberOfUnits プロパティに `3` が表示されます。 | | **Introductory Offer** | サブスクリプションに初回オファーが含まれているかをバッジなどで示すには、`product.Subscription?.Offer?.Phases` プロパティを確認してください。これは最大2つの割引フェーズ(無料トライアルフェーズと初回価格フェーズ)を含むことができるリストです。各フェーズオブジェクトには以下の便利なプロパティが含まれます:任意
デフォルト: `en`
|ペイウォールのローカライゼーションの識別子。このパラメータはマイナス(**-**)文字で区切られた1つまたは2つのサブタグで構成される言語コードを指定します。最初のサブタグは言語、2番目は地域を表します。
例: `en` は英語、`pt-br` はブラジルポルトガル語を表します。
| | **fetchPolicy** | デフォルト: `.reloadRevalidatingCacheData` |デフォルトでは、SDKはサーバーからデータを読み込もうとし、失敗した場合はキャッシュデータを返します。ユーザーが常に最新のデータを取得できるため、このオプションを推奨します。
ただし、ユーザーのインターネット接続が不安定だと思われる場合は、`.returnCacheDataElseLoad` を使用してキャッシュデータが存在する場合に返すことを検討してください。この場合、ユーザーは最新データを取得できないことがありますが、通信状況に関わらず読み込みが速くなります。キャッシュは定期的に更新されるため、セッション中のネットワークリクエスト削減に安全に使用できます。
キャッシュはアプリの再起動後も保持され、アプリの再インストールまたは手動でのクリア時のみ削除されます。
Adapty SDKはペイウォールをローカルに2層で保存します。上記の定期更新キャッシュとフォールバックペイウォールです。また、CDNを使用してペイウォールを高速に取得し、CDNが利用できない場合のスタンドアロンフォールバックサーバーも用意しています。このシステムは、インターネット接続が不安定な環境でも常に最新バージョンのペイウォールを確実に取得できるよう設計されています。
| --- # File: present-remote-config-paywalls-unity --- --- title: "Unity SDKでリモートコンフィグによるペイウォールをレンダリングする" description: "Adapty Unity SDKでリモートコンフィグのペイウォールを表示し、ユーザー体験をパーソナライズする方法を解説します。" --- リモートコンフィグを使ってペイウォールをカスタマイズした場合、ユーザーに表示するためにモバイルアプリのコードでレンダリングを実装する必要があります。リモートコンフィグはニーズに合わせた柔軟性を提供するため、何を含めるか、ペイウォールのビューがどのように表示されるかはすべて開発者が管理します。リモートコンフィグを取得するメソッドを提供しているので、リモートコンフィグで設定したカスタムペイウォールを自由に表示できます。 ## ペイウォールのリモートコンフィグを取得して表示する \{#get-paywall-remote-config-and-present-it\} ペイウォールのリモートコンフィグを取得するには、`remoteConfig` プロパティにアクセスして必要な値を取り出します。 ```csharp showLineNumbers Adapty.GetPaywall("YOUR_PLACEMENT_ID", (paywall, error) => { if (error != null) { // handle the error return; } // Access remote config dictionary var dictionary = paywall.RemoteConfig?.Dictionary; var headerText = dictionary?["header_text"] as string; // Or access raw JSON data var jsonData = paywall.RemoteConfig?.Data; }); ``` 必要な値をすべて取得したら、それらをレンダリングして視覚的に魅力的なページに組み立てます。さまざまなモバイル端末の画面サイズや向きに対応したデザインにして、異なるデバイスでもシームレスで使いやすい体験を提供してください。 :::warning Adapty アナリティクスがファネルや A/B テストのデータを取得できるよう、以下で説明する[ペイウォール表示イベントの記録](present-remote-config-paywalls-unity#track-paywall-view-events)を必ず行ってください。 ::: ペイウォールの表示が完了したら、購入フローの設定に進みます。ユーザーが購入する際は、ペイウォールのプロダクトを引数として `.MakePurchase()` を呼び出すだけです。`.MakePurchase()` メソッドの詳細については、[購入の実装](unity-making-purchases)をご覧ください。 インターネット接続やキャッシュが利用できない場合にユーザーに表示される[フォールバックペイウォールの作成](unity-use-fallback-paywalls)をお勧めします。これにより、そのような状況でもスムーズな体験が確保されます。 ## ペイウォール表示イベントをトラッキングする \{#track-paywall-view-events\} Adapty はペイウォールのパフォーマンス測定をサポートしています。購入データは自動的に収集されますが、ペイウォールの表示ログはユーザーがペイウォールを見たタイミングを把握しているのは開発者だけのため、手動での記録が必要です。 ペイウォール表示イベントをログに記録するには `.LogShowPaywall(paywall)` を呼び出すだけで、ファネルや A/B テストのペイウォール指標に反映されます。 :::important [ペイウォールビルダー](adapty-paywall-builder)で作成したペイウォールを表示する場合は、`.LogShowPaywall(paywall)` を呼び出す必要はありません。 ::: ```csharp showLineNumbers Adapty.LogShowPaywall(paywall, (error) => { // handle the error }); ``` リクエストパラメーター: | パラメーター | 必須 | 説明 | | :---------- | :------- |:------------------------------------------------------------------| | **paywall** | 必須 | [`AdaptyPaywall`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_paywall.html) オブジェクト。 | --- # File: unity-making-purchases --- --- title: "Unity SDKでモバイルアプリ内購入を行う" description: "Adaptyを使用したアプリ内課金とサブスクリプションの処理ガイド。" --- モバイルアプリ内にペイウォールを表示することは、ユーザーにプレミアムコンテンツやサービスへのアクセスを提供するための重要なステップです。ただし、[ペイウォールビルダー](adapty-paywall-builder)を使ってペイウォールをカスタマイズしている場合は、ペイウォールを表示するだけで購入処理が完結します。 ペイウォールビルダーを使用しない場合は、`.makePurchase()` という別のメソッドを使って購入を完了し、対象のコンテンツをアンロックする必要があります。このメソッドは、ユーザーがペイウォールを操作して購入を進めるための入口となります。 ペイウォールに購入しようとしているプロダクトに対して有効なプロモーションオファーが設定されている場合、Adaptyは購入時に自動的にそのオファーを適用します。 :::warning 初回オファーが自動的に適用されるのは、ペイウォールビルダーで設定されたペイウォールを使用している場合のみです。 それ以外の場合は、[iOS での初回オファーの適用資格をユーザーごとに確認する](fetch-paywalls-and-products#check-intro-offer-eligibility-on-ios)必要があります。このステップを省略すると、リリース時にアプリが審査でリジェクトされる可能性があります。また、初回オファーの対象となるユーザーに通常価格が請求されてしまう場合もあります。 ::: [初期設定](quickstart)をすべてのステップを漏らさず完了していることを確認してください。設定が完了していないと、購入の検証ができません。 ## 購入を行う \{#make-purchase\} :::note **[ペイウォールビルダー](adapty-paywall-builder)を使用していますか?** 購入は自動的に処理されるため、このステップは省略できます。 **ステップバイステップのガイドをお探しですか?** エンドツーエンドの実装手順については、[クイックスタートガイド](unity-implement-paywalls-manually)をご確認ください。 ::: ```csharp showLineNumbers using AdaptySDK; void MakePurchase(AdaptyPaywallProduct product) { Adapty.MakePurchase(product, (result, error) => { switch (result.Type) { case AdaptyPurchaseResultType.Pending: // handle pending purchase break; case AdaptyPurchaseResultType.UserCancelled: // handle purchase cancellation break; case AdaptyPurchaseResultType.Success: var profile = result.Profile; // handle successfull purchase break; default: break; } }); } ``` リクエストパラメーター: | パラメーター | 必須/任意 | 説明 | | :---------- | :------- |:------------------------------------------------------------------------------------------------------| | **Product** | 必須 | ペイウォールから取得した [`AdaptyPaywallProduct`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_paywall_product.html) オブジェクト。 | レスポンスパラメーター: | パラメーター | 説明 | |---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Profile** |リクエストが成功した場合、このオブジェクトがレスポンスに含まれます。[AdaptyProfile](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_profile.html) オブジェクトは、ユーザーのアクセスレベル、サブスクリプション、アプリ内の買い切り購入に関する包括的な情報を提供します。
アクセスレベルのステータスを確認して、ユーザーが必要なアクセス権を持っているかどうかを判断してください。
| :::warning **注意:** Apple の StoreKit バージョンが v2.0 未満、かつ Adapty SDK バージョンが v2.9.0 未満の場合は、代わりに [Apple App Store 共有シークレット](app-store-connection-configuration#step-5-enter-app-store-shared-secret)を提供する必要があります。この方法は現在 Apple によって非推奨とされています。 ::: ## 購入時にサブスクリプションを変更する \{#change-subscription-when-making-a-purchase\} ユーザーが現在のサブスクリプションを更新する代わりに新しいサブスクリプションを選択する場合、動作はアプリストアによって異なります。 - App Storeでは、サブスクリプショングループ内でサブスクリプションが自動的に更新されます。ユーザーがあるグループのサブスクリプションを購入した際に、別のグループのサブスクリプションがすでに有効な場合、両方のサブスクリプションが同時に有効になります。 - Google Playでは、サブスクリプションは自動的に更新されません。以下に説明するように、モバイルアプリのコードで切り替え処理を管理する必要があります。 Androidで別のサブスクリプションに切り替えるには、追加パラメーターを指定して `.makePurchase()` メソッドを呼び出します。 ```csharp showLineNumbers // Create subscription update parameters var subscriptionUpdateParams = new AdaptySubscriptionUpdateParameters( "old_product_id", // Product ID of the current subscription AdaptySubscriptionUpdateReplacementMode.WithTimeProration ); Adapty.MakePurchase(product, subscriptionUpdateParams, (profile, error) => { if(error != null) { // Handle the error return; } // successful cross-grade }); ``` 追加のリクエストパラメーター: | パラメーター | 必須/任意 | 説明 | | :--------------------------- | :------- |:-------------------------------------------------------------------------------------------------------| | **subscriptionUpdateParams** | 必須 | [`AdaptySubscriptionUpdateParameters`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_subscription_update_parameters.html) オブジェクト。 | サブスクリプションと置き換えモードの詳細については、Google Developerのドキュメントをご参照ください。 - [置き換えモードについて](https://developer.android.com/google/play/billing/subscriptions#replacement-modes) - [置き換えモードに関するGoogleの推奨事項](https://developer.android.com/google/play/billing/subscriptions#replacement-recommendations) - 置き換えモード [`CHARGE_PRORATED_PRICE`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.ReplacementMode#CHARGE_PRORATED_PRICE())。注意: このメソッドはサブスクリプションのアップグレードにのみ使用できます。ダウングレードはサポートされていません。 - 置き換えモード [`DEFERRED`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.ReplacementMode#DEFERRED())。注意: 実際のサブスクリプション変更は、現在のサブスクリプションの請求期間が終了した時点でのみ発生します。 ## iOSでオファーコードを利用する \{#redeem-offer-codes-in-ios\}[`AdaptyProfile`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_profile.html) オブジェクト。このモデルには、アクセスレベル、サブスクリプション、非サブスクリプション購入に関する情報が含まれています。
**アクセスレベルのステータス**を確認して、ユーザーがアプリにアクセスできるかどうかを判断してください。
| :::tip Adapty SDK がモバイルアプリにどのように統合されているか、実際の例を見てみませんか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを実演している[サンプルアプリ](sample-apps)をご覧ください。 ::: --- # File: implement-observer-mode-unity --- --- title: "Unity SDKにオブザーバーモードを実装する" description: "Unity SDKのAdaptyでオブザーバーモードを実装し、ユーザーのサブスクリプションイベントを追跡します。" --- すでに独自の購入インフラを持っており、すぐにAdaptyへ完全移行する準備が整っていない場合は、[オブザーバーモード](observer-vs-full-mode)を検討してみてください。基本的な使い方では、オブザーバーモードは高度なアナリティクスやアトリビューション・アナリティクスシステムとのシームレスな連携を提供します。 この方法で問題なければ、必要な作業は以下の2点だけです: 1. `observerMode` パラメータを `true` に設定して、Adapty SDKの設定時にオブザーバーモードを有効にします。設定手順については[Unity](sdk-installation-unity#activate-adapty-module-of-adapty-sdk)を参照してください。 2. 既存の購入インフラからAdaptyへ[トランザクションを報告する](report-transactions-observer-mode-unity)。 ### オブザーバーモードのセットアップ \{#observer-mode-setup\} 購入とサブスクリプションのステータスを自分で管理し、サブスクリプションイベントやアナリティクスの送信にAdaptyを使用する場合は、オブザーバーモードを有効にしてください。 :::important オブザーバーモードで動作している場合、Adapty SDKはトランザクションをクローズしません。そのため、必ずご自身でトランザクションを処理するようにしてください。 ::: ```csharp showLineNumbers title="C#" using UnityEngine; using AdaptySDK; public class AdaptyListener : MonoBehaviour, AdaptyEventListener { void Start() { DontDestroyOnLoad(this.gameObject); Adapty.SetEventListener(this); var builder = new AdaptyConfiguration.Builder("YOUR_PUBLIC_SDK_KEY") .SetObserverMode(true); // Enable observer mode Adapty.Activate(builder.Build(), (error) => { if (error != null) { // handle the error return; } }); } public void OnLoadLatestProfile(AdaptyProfile profile) { } public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { } public void OnInstallationDetailsFail(AdaptyError error) { } } ``` パラメータ: | パラメータ | 説明 | |--------------|------------------------------------------------------------------------------------------------------------| | observerMode | [オブザーバーモード](observer-vs-full-mode)を制御するブール値です。デフォルト値は `false` です。 | ## オブザーバーモードでAdaptyのペイウォールを使用する \{#using-adapty-paywalls-in-observer-mode\} Adaptyのペイウォールやアナリティクス機能も使いたい場合は可能ですが、オブザーバーモードでは追加のセットアップが必要です。上記の手順に加えて、以下の対応が必要になります: 1. [リモートコンフィグのペイウォール](present-remote-config-paywalls-unity)と同様にペイウォールを表示する。 3. 購入トランザクションに[ペイウォールを関連付ける](report-transactions-observer-mode-unity)。 --- # File: report-transactions-observer-mode-unity --- --- title: "Unity SDKのObserverモードでトランザクションを報告する" description: "Unity SDKのAdapty Observerモードで購入トランザクションを報告し、ユーザーインサイトと収益トラッキングを実現します。" ---iOS、StoreKit 1 の場合:[SKPaymentTransaction](https://developer.apple.com/documentation/storekit/skpaymenttransaction) オブジェクト。
iOS、StoreKit 2 の場合:[Transaction](https://developer.apple.com/documentation/storekit/transaction) オブジェクト。
Android の場合:購入の文字列識別子(purchase.getOrderId)。ここで purchase は billing library の [Purchase](https://developer.android.com/reference/com/android/billingclient/api/Purchase) クラスのインスタンスです。
| | variationId | 必須 | バリアントの文字列識別子。[AdaptyPaywall](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_paywall.html) オブジェクトの `variationId` プロパティを使用して取得できます。 |phoneNumber
firstName
lastName
| String | | gender | 列挙型。使用可能な値:`female`、`male`、`other` | | birthday | Date | ### カスタムユーザー属性 \{#custom-user-attributes\} 独自のカスタム属性を設定することができます。これらは通常、アプリの利用状況に関連します。たとえば、フィットネスアプリなら週あたりの運動回数、語学学習アプリならユーザーの習熟度レベルなどが考えられます。カスタム属性はセグメントに活用してターゲットを絞ったペイウォールやオファーを作成したり、収益に最も影響するプロダクト指標を分析したりするのに役立ちます。 ```csharp showLineNumbers try { builder = builder.SetCustomStringAttribute("string_key", "string_value"); builder = builder.SetCustomDoubleAttribute("double_key", 123.0f); } catch (Exception e) { // handle the exception } ``` 既存のキーを削除するには、`.withRemoved(customAttributeForKey:)`メソッドを使用します: ```csharp showLineNumbers try { builder = builder.RemoveCustomAttribute("key_to_remove"); } catch (Exception e) { // handle the exception } ``` 事前にどのようなカスタム属性が設定されているか確認したい場合は、`AdaptyProfile`オブジェクトの`customAttributes`フィールドを使用してください。 :::warning `customAttributes`の値は最新でない場合があります。ユーザー属性は異なるデバイスからいつでも送信される可能性があるため、最後の同期以降にサーバー上の属性が変更されていることがあります。 ::: ### 制限事項 \{#limits\} - ユーザーあたり最大30個のカスタム属性 - キー名は最大30文字。キー名に使用できる文字は英数字および`_`、`-`、`.`です - 値は文字列または浮動小数点数で、50文字以内 --- # File: unity-listen-subscription-changes --- --- title: "Unity SDKでサブスクリプションステータスを確認する" description: "UnityアプリでAdaptyを使ってユーザーのサブスクリプションステータスを追跡・管理し、顧客維持率を向上させましょう。" --- Adaptyを使えば、サブスクリプションステータスの管理が簡単になります。プロダクトIDをコードに直接記述する必要はありません。アクティブな[アクセスレベル](access-level)を確認するだけで、ユーザーのサブスクリプションステータスを簡単に把握できます。[AdaptyProfile](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_profile.html)オブジェクト。通常は、ユーザーがプレミアムアクセスを持っているかどうかを判断するために、プロファイルのアクセスレベルのステータスだけを確認すれば十分です。
`.getProfile`メソッドは常にAPIへの問い合わせを試みるため、最新の情報を返します。何らかの理由(例:インターネット接続なし)でAdapty SDKがサーバーから情報を取得できなかった場合は、キャッシュのデータが返されます。また、Adapty SDKは`AdaptyProfile`のキャッシュを定期的に更新し、情報をできる限り最新の状態に保っています。
| `.getProfile()`メソッドはユーザープロファイルを返し、そこからアクセスレベルのステータスを取得できます。アプリごとに複数のアクセスレベルを設定することも可能です。たとえば、新聞アプリでさまざまなトピックへのサブスクリプションを独立して販売する場合、「sports」と「science」というアクセスレベルを作成できます。ただし、多くの場合はアクセスレベルは1つで十分であり、その場合はデフォルトの「premium」アクセスレベルを使うだけで問題ありません。 デフォルトの「premium」アクセスレベルを確認する例を示します。 ```csharp showLineNumbers Adapty.GetProfile((profile, error) => { if (error != null) { // handle the error return; } // "premium" is an identifier of default access level var accessLevel = profile.AccessLevels["premium"]; if (accessLevel != null && accessLevel.IsActive) { // grant access to premium features } }); ``` ### サブスクリプションステータスの更新をリッスンする \{#listening-for-subscription-status-updates\} ユーザーのサブスクリプションが変更されるたびに、Adaptyはイベントを発火します。 Adaptyからメッセージを受け取るには、追加の設定が必要です。 ```csharp showLineNumbers // Extend `AdaptyEventListener ` with `OnLoadLatestProfile ` method: public class AdaptyListener : MonoBehaviour, AdaptyEventListener { public void OnLoadLatestProfile(AdaptyProfile profile) { // handle any changes to subscription state } } ``` Adaptyはアプリケーション起動時にもイベントを発火します。この場合、キャッシュされたサブスクリプションステータスが渡されます。 ### サブスクリプションステータスのキャッシュ \{#subscription-status-cache\} Adapty SDKに実装されたキャッシュは、プロファイルのサブスクリプションステータスを保存します。そのため、サーバーにアクセスできない状況でも、キャッシュされたデータを使ってプロファイルのサブスクリプションステータスを確認できます。 ただし、キャッシュからデータを直接取得することはできない点に注意してください。SDKは1分ごとに定期的にサーバーへ問い合わせを行い、プロファイルに関する更新や変更がないかを確認します。新しいトランザクションやその他の更新といった変更があった場合は、サーバーと同期するためにキャッシュデータへ反映されます。 --- # File: unity-deal-with-att --- --- title: "Unity SDKでATTを処理する" description: "UnityでAdaptyを使い始めて、サブスクリプションのセットアップと管理を効率化しましょう。" --- アプリでAppTrackingTransparencyフレームワークを使用しており、ユーザーにアプリトラッキングの認証リクエストを表示する場合は、[認証ステータス](https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/authorizationstatus/)をAdaptyに送信する必要があります。 ```csharp showLineNumbers var builder = new Adapty.ProfileParameters.Builder() .SetAppTrackingTransparencyStatus(IOSAppTrackingTransparencyStatus.Authorized); Adapty.UpdateProfile(builder.Build(), (error) => { if(error != null) { // handle the error } }); ``` :::warning この値は変更されたタイミングでできるだけ早く送信することを強く推奨します。そうすることで、設定済みのインテグレーションにタイムリーにデータが送信されます。 ::: --- # File: kids-mode-unity --- --- title: "Unity SDKのキッズモード" description: "キッズモードを簡単に有効化してAppleとGoogleのポリシーに準拠。Unity SDKではIDFA、GAID、広告データは収集されません。" --- Unityアプリが子ども向けである場合、[Apple](https://developer.apple.com/kids/)および[Google](https://support.google.com/googleplay/android-developer/answer/9893335)のポリシーに従う必要があります。Adapty SDKを使用している場合、いくつかの簡単な手順でこれらのポリシーに準拠し、アプリストアの審査を通過できるよう設定できます。 ## 何が必要ですか? \{#whats-required\} 以下の収集を無効にするようAdapty SDKを設定する必要があります。 - [IDFA(広告識別子)](https://en.wikipedia.org/wiki/Identifier_for_Advertisers)(iOS) - [Android広告ID(AAID/GAID)](https://support.google.com/googleplay/android-developer/answer/6048248)(Android) - [IPアドレス](https://www.ftc.gov/system/files/ftc_gov/pdf/p235402_coppa_application.pdf) また、カスタマーユーザーIDの取り扱いには注意が必要です。`任意
デフォルト: `en`
|オンボーディングのローカライゼーション識別子。このパラメーターは、マイナス(**-**)文字で区切られた1つまたは2つのサブタグで構成される言語コードを指定します。最初のサブタグは言語を表し、2番目は地域を表します。
例:`en` は英語、`pt-br` はブラジルのポルトガル語を表します。
ロケールコードと推奨する使用方法については、[ローカライゼーションとロケールコード](flutter-localizations-and-locale-codes)を参照してください。
| | **fetchPolicy** | デフォルト: `.reloadRevalidatingCacheData` |デフォルトでは、SDK はサーバーからデータを読み込もうとし、失敗した場合はキャッシュされたデータを返します。ユーザーが常に最新のデータを取得できるため、このオプションを推奨します。
ただし、ユーザーが不安定なインターネット環境にいると思われる場合は、`.returnCacheDataElseLoad` を使用してキャッシュデータ(存在する場合)を返すことを検討してください。この場合、ユーザーは最新のデータを取得できないことがありますが、インターネット接続の状態に関わらず、より速い読み込み時間を体験できます。キャッシュは定期的に更新されるため、セッション中にネットワークリクエストを避けるために使用しても安全です。
キャッシュはアプリの再起動後も保持され、アプリのアンインストール時または手動でクリアした場合にのみ消去されます。
Adapty SDK はオンボーディングをローカルに2層で保存します:上記の定期的に更新されるキャッシュとフォールバックオンボーディングです。また、オンボーディングをより速く取得するためにCDNを使用し、CDNが到達不能な場合のスタンドアローンのフォールバックサーバーも用意しています。このシステムは、インターネット接続が不安定な場合でも、常に最新バージョンのオンボーディングを取得できるよう設計されています。
| | **loadTimeout** | デフォルト: 5秒 |このメソッドのタイムアウト上限を設定します。タイムアウトに達した場合、キャッシュされたデータまたはローカルフォールバックが返されます。
このメソッドは内部で複数のリクエストで構成される場合があるため、まれに `loadTimeout` で指定した時間より若干遅れてタイムアウトすることがあります。
| レスポンスパラメーター: | パラメーター | 説明 | |:----------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Onboarding | オンボーディングの識別子と設定、リモートコンフィグ、その他いくつかのプロパティを含む [`AdaptyOnboarding`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_onboarding.html) オブジェクト。 | オンボーディングを取得したら、`CreateOnboardingView` メソッドを呼び出します。 :::warning `CreateOnboardingView` メソッドの結果は一度しか使用できません。再度使用する必要がある場合は、`CreateOnboardingView` メソッドを再度呼び出してください。再作成せずに2回呼び出すと、`AdaptyUIError.viewAlreadyPresented` エラーが発生する可能性があります。 ::: ```csharp showLineNumbers AdaptyUI.CreateOnboardingView(onboarding, (view, error) => { // handle the result }); ``` パラメーター: | パラメーター | 必須 | 説明 | |:---------------| :------------- |:-----------------------------------------------------------------------------| | **onboarding** | 必須 | 目的のオンボーディングのビューを取得するための `AdaptyOnboarding` オブジェクト。 | | **externalUrlsPresentation** |任意
デフォルト: `InAppBrowser`
|オンボーディング内のリンクを開く方法を制御します。使用可能なオプション:
- `AdaptyWebPresentation.InAppBrowser` - リンクをアプリ内ブラウザで開く(デフォルト)
- `AdaptyWebPresentation.ExternalBrowser` - リンクをデバイスの外部ブラウザで開く
使用例については、[オンボーディングでのリンクの開き方をカスタマイズする](unity-present-onboardings#customize-how-links-open-in-onboardings)を参照してください。
| オンボーディングとそのビュー設定の読み込みに成功したら、[モバイルアプリで表示する](unity-present-onboardings)ことができます。 ## デフォルトオーディエンスのオンボーディングでフェッチを高速化する \{#speed-up-onboarding-fetching-with-default-audience-onboarding\} 通常、オンボーディングはほぼ即座に取得されるため、このプロセスの高速化を心配する必要はありません。ただし、オーディエンスやオンボーディングが多数あり、ユーザーのインターネット接続が弱い場合、オンボーディングの取得に予想以上の時間がかかることがあります。そのような状況では、オンボーディングをまったく表示しないよりも、スムーズなユーザー体験を確保するためにデフォルトのオンボーディングを表示したい場合があります。 これに対処するために、`GetOnboardingForDefaultAudience` メソッドを使用できます。このメソッドは、**All Users** オーディエンス向けの指定されたプレースメントのオンボーディングを取得します。ただし、上記の[オンボーディングの取得とビューの作成](#fetch-onboarding-and-create-view)セクションで説明した `getOnboarding` メソッドでオンボーディングを取得することが推奨されるアプローチであることを理解することが重要です。 :::warning `GetOnboardingForDefaultAudience` の代わりに `GetOnboarding` の使用を検討してください。前者には重要な制限があります: - **互換性の問題**:複数のアプリバージョンをサポートする際に問題が生じる可能性があり、後方互換性のあるデザインを作成するか、古いバージョンで正しく表示されないことを許容する必要があります。 - **パーソナライゼーションなし**:「All Users」オーディエンス向けのコンテンツのみを表示し、国、アトリビューション、またはカスタム属性に基づくターゲティングが行われません。 ユースケースでこれらのデメリットよりも高速な取得が重要な場合は、以下に示すように `GetOnboardingForDefaultAudience` を使用してください。そうでない場合は、[上記](#fetch-onboarding-and-create-view)の説明通り `GetOnboarding` を使用してください。 ::: ```csharp showLineNumbers Adapty.GetOnboardingForDefaultAudience("YOUR_PLACEMENT_ID", (onboarding, error) => { if (error != null) { // handle the error return; } // the requested onboarding }); ``` パラメーター: | パラメーター | 必須 | 説明 | |---------|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **placementId** | 必須 | 目的の[プレースメント](placements)の識別子。Adapty ダッシュボードでプレースメントを作成する際に指定した値です。 | | **locale** |任意
デフォルト: `en`
|オンボーディングのローカライゼーション識別子。このパラメーターは、マイナス(**-**)文字で区切られた1つまたは2つのサブタグで構成される言語コードを指定します。最初のサブタグは言語を表し、2番目は地域を表します。
例:`en` は英語、`pt-br` はブラジルのポルトガル語を表します。
| | **fetchPolicy** | デフォルト: `.reloadRevalidatingCacheData` |デフォルトでは、SDK はサーバーからデータを読み込もうとし、失敗した場合はキャッシュされたデータを返します。ユーザーが常に最新のデータを取得できるため、このオプションを推奨します。
ただし、ユーザーが不安定なインターネット環境にいると思われる場合は、`.returnCacheDataElseLoad` を使用してキャッシュデータ(存在する場合)を返すことを検討してください。この場合、ユーザーは最新のデータを取得できないことがありますが、インターネット接続の状態に関わらず、より速い読み込み時間を体験できます。キャッシュは定期的に更新されるため、セッション中にネットワークリクエストを避けるために使用しても安全です。
キャッシュはアプリの再起動後も保持され、アプリのアンインストール時または手動でクリアした場合にのみ消去されます。
Adapty SDK はオンボーディングをローカルに2層で保存します:上記の定期的に更新されるキャッシュとフォールバックオンボーディングです。また、オンボーディングをより速く取得するためにCDNを使用し、CDNが到達不能な場合のスタンドアローンのフォールバックサーバーも用意しています。このシステムは、インターネット接続が不安定な場合でも、常に最新バージョンのオンボーディングを取得できるよう設計されています。
| --- # File: unity-present-onboardings --- --- title: "Unity SDKでオンボーディングを表示する" description: "コンバージョンを高めるためにオンボーディングを効果的に表示する方法を学びましょう。" --- ビルダーでオンボーディングをカスタマイズしている場合、ユーザーに表示するためにUnityアプリのコードでレンダリングを実装する必要はありません。そのようなオンボーディングには、表示する内容と表示方法の両方が含まれています。 始める前に、以下を確認してください。 1. [Adapty Unity SDK](sdk-installation-unity) 3.14.0以降をインストールしていること。 2. [オンボーディングを作成](create-onboarding)していること。 3. オンボーディングを[プレースメント](placements)に追加していること。 オンボーディングを表示するには、`CreateOnboardingView`メソッドで作成した`view`に対して`view.Present()`メソッドを使用します。各`view`は一度しか使用できません。再度ペイウォールを表示する必要がある場合は、`CreateOnboardingView`をもう一度呼び出して新しい`view`インスタンスを作成してください。 :::warning `view`を再作成せずに再利用すると、`AdaptyUIError.viewAlreadyPresented`エラーが発生する可能性があります。 ::: ```csharp showLineNumbers title="Unity" view.Present((presentError) => { if (presentError != null) { // handle the error } }; ``` ## iOS表示スタイルの設定 \{#configure-ios-presentation-style\} `Present()`メソッドに`iosPresentationStyle`パラメーターを渡すことで、iOSでのオンボーディングの表示方法を設定できます。パラメーターには`AdaptyUIIOSPresentationStyle.FullScreen`(デフォルト)または`AdaptyUIIOSPresentationStyle.PageSheet`を指定できます。 ```csharp showLineNumbers title="Unity" view.Present(AdaptyUIIOSPresentationStyle.PageSheet, (error) => { // handle the error }); ``` ## オンボーディングでのリンクの開き方をカスタマイズする \{#customize-how-links-open-in-onboardings\} :::important オンボーディングでのリンクの開き方のカスタマイズは、Adapty SDK v3.15以降でサポートされています。 ::: デフォルトでは、オンボーディング内のリンクはアプリ内ブラウザで開かれ、アプリを切り替えることなくウェブページをアプリ内で表示できるシームレスな体験を提供します。 代わりに外部ブラウザでリンクを開くには、`CreateOnboardingView`メソッドに`AdaptyWebPresentation.ExternalBrowser`を渡してください。 ```csharp showLineNumbers title="Unity" AdaptyUI.CreateOnboardingView( onboarding, AdaptyWebPresentation.ExternalBrowser, // default — InAppBrowser (view, error) => { if (error != null) { // handle the error return; } // present the onboarding view view.Present((presentError) => { if (presentError != null) { // handle the error } }); } ); ``` 利用可能なオプション: - `AdaptyWebPresentation.InAppBrowser` - アプリ内ブラウザでリンクを開く(デフォルト) - `AdaptyWebPresentation.ExternalBrowser` - デバイスの外部ブラウザでリンクを開く --- # File: unity-handling-onboarding-events --- --- title: "Unity SDKでオンボーディングイベントを処理する" description: "Adaptyを使ってUnityでオンボーディング関連のイベントを処理します。" --- 始める前に、以下を確認してください: 1. [Adapty Unity SDK](sdk-installation-unity) 3.14.0以降をインストール済みであること。 2. [オンボーディングを作成済み](create-onboarding)であること。 3. オンボーディングを[プレースメント](placements)に追加済みであること。 ビルダーで設定されたオンボーディングは、アプリが反応できるイベントを生成します。これらのイベントへの対応方法を以下で説明します。 Unityアプリ内のオンボーディング画面で発生するプロセスを制御・監視するには、`AdaptyOnboardingsEventsListener`インターフェースを実装してください。 ## カスタムアクション \{#custom-actions\} ビルダーでは、ボタンに**カスタム**アクションを追加してIDを割り当てることができます。
このIDをコード内で使用し、カスタムアクションとして処理できます。たとえば、ユーザーが**ログイン**や**通知を許可**などのカスタムボタンをタップすると、`OnboardingViewOnCustomAction`メソッドが呼び出され、`actionId`パラメーターにビルダーで設定した**アクションID**が渡されます。"allowNotifications"のような独自のIDを作成できます。
オンボーディングイベントを処理するには、`AdaptyOnboardingsEventsListener`インターフェースを実装してください:
```csharp showLineNumbers title="Unity"
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
void Start()
{
Adapty.SetOnboardingsEventsListener(this);
}
public void OnboardingViewOnCustomAction(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta,
string actionId
)
{
if (actionId == "allowNotifications") {
// request notification permissions
}
}
public void OnboardingViewDidFailWithError(
AdaptyUIOnboardingView view,
AdaptyError error
)
{
// handle errors
}
// Implement other required interface methods (see examples below)
}
```
:::important
ユーザーがオンボーディングを閉じたときの動作を自分で管理する必要があります。たとえば、オンボーディング自体の表示を停止する処理が必要です。
:::
クラスに`OnboardingViewOnCloseAction`メソッドを実装してください:
```csharp showLineNumbers title="Unity"
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
public void OnboardingViewOnCloseAction(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta,
string actionId
)
{
view.Dismiss((error) => {
if (error != null) {
// handle the error
}
});
}
// ... other interface methods
}
```
2. サブスクリプショングループ名をクリックすると、**Subscriptions** セクションにプロダクトの一覧が表示されます。
3. テストしているプロダクトが **Ready to Submit** としてマークされていることを確認します。
4. 表内のプロダクトIDと、Adapty ダッシュボードの [**Products**](https://app.adapty.io/products) タブに表示されているIDを比較します。IDが一致しない場合は、表からプロダクトIDをコピーし、Adapty ダッシュボードで[プロダクトを作成](create-product)してください。
## ステップ3. プロダクトの提供地域を確認する \{#step-4-check-product-availability\}
1. **App Store Connect** に戻り、同じ **Subscriptions** セクションを開きます。
2. サブスクリプショングループ名をクリックしてプロダクトを表示します。
3. テストしているプロダクトを選択します。
4. **Availability** セクションまでスクロールし、必要なすべての国・地域が一覧に含まれていることを確認します。
## ステップ4. プロダクトの価格を確認する \{#step-5-check-product-prices\}
1. **App Store Connect** の **Monetization** → **Subscriptions** セクションに移動します。
2. サブスクリプショングループ名をクリックします。
3. テストしているプロダクトを選択します。
4. **Subscription Pricing** までスクロールし、**Current Pricing for New Subscribers** セクションを展開します。
5. 必要なすべての価格が一覧に表示されていることを確認します。
## ステップ5. アプリの有料ステータス、銀行口座、税務フォームが有効であることを確認する \{#step-5-check-app-paid-status-bank-account-and-tax-forms-are-active\}
1. [**App Store Connect**](https://appstoreconnect.apple.com/) のホームページで **Business** をクリックします。
2. 会社名を選択します。
3. 下にスクロールし、**Paid Apps Agreement**、**Bank Account**、**Tax forms** がすべて **Active** になっていることを確認します。
これらの手順を実行することで、`InvalidProductIdentifiers` の警告を解消し、プロダクトをストアで有効にできるはずです。
## ステップ6. 問題が解消しない場合はプロダクトを再作成する \{#step-6-recreate-the-product-if-its-stuck\}
ステップ1〜5をすべてパスしている場合(`Approved` ステータス、バンドルIDの一致、有効なAPIキー)でも、SDKが `1000 noProductIDsFound` を返し続けることがあります。この場合、プロダクトがAppleのレジストリでスタックしている可能性があります。App Store ConnectのUIにはプロダクトが存在するものの、StoreKitのルックアップパスに公開されていない状態になることがあります。
App Store Connectでプロダクトを削除し、同じプロダクトIDで再作成してください。再作成後、反映されるまで最大24時間かかる場合があります。
---
# File: cantMakePayments-unity
---
---
title: "Unity SDK における Code-1003 cantMakePayment エラーの修正"
description: "Adapty でサブスクリプションを管理する際に発生する決済エラーを解決します。"
---
1003エラー(`cantMakePayments`)は、このデバイスでアプリ内課金ができないことを示しています。
`cantMakePayments`エラーが発生している場合、通常は以下のいずれかの原因が考えられます:
- デバイスの制限:このエラーはAdaptyとは無関係です。以下の解決方法を参照してください。
- オブザーバーモードの設定:`makePurchase`メソッドとオブザーバーモードは同時に使用できません。以下のセクションを参照してください。
## 問題:デバイスの制限 \{#issue-device-restrictions\}
| 問題 | 解決方法 |
|-----------------------------|---------------------------------------------------------|
| スクリーンタイムの制限 | [スクリーンタイム](https://support.apple.com/en-us/102470)でアプリ内課金の制限を無効にする |
| アカウントの停止 | Appleサポートに連絡してアカウントの問題を解決する |
| 地域の制限 | 対応地域のApp Storeアカウントを使用する |
## 問題:オブザーバーモードとmakePurchaseの併用 \{#issue-using-both-observer-mode-and-makepurchase\}
購入処理に`makePurchase`を使用している場合、オブザーバーモードを使用する必要はありません。[オブザーバーモード](observer-vs-full-mode)が必要なのは、購入ロジックを自分で実装する場合のみです。
したがって、`makePurchase`を使用している場合は、SDK有効化コードからオブザーバーモードの有効化を安全に削除できます。
---
# File: migration-to-unity-sdk-314
---
---
title: "Adapty Unity SDK を v3.14 へ移行する"
description: "より高いパフォーマンスと新しいマネタイズ機能のために Adapty Unity SDK v3.14 へ移行します。"
---
Adapty SDK 3.14.0 はメジャーリリースであり、いくつかの改善が含まれています。ただし、以下の移行手順が必要になる場合があります。
1. ペイウォールイベント用の専用イベントリスナーの分離。
2. `AdaptyUI.CreateView` を `AdaptyUI.CreatePaywallView` およびその関連メソッドにリネーム。
3. `MakePurchase` メソッドで個別パラメーターの代わりに `AdaptyPurchaseParameters` を使用するよう更新。
4. `SetFallbackPaywalls` を `SetFallback` メソッドに置き換え。
5. `AdaptyPlacement` を使用してペイウォールプロパティにアクセスするよう更新。
6. `AdaptyRemoteConfig` オブジェクトを使用してリモートコンフィグにアクセスするよう更新。
7. `AdaptyPaywall` モデルの `VendorProductIds` を `ProductIdentifiers` に置き換え。
8. `GetPaywall` のフェッチポリシーで `AdaptyFetchPolicy` を使用するよう更新。
## ペイウォールイベント用の専用イベントリスナーの分離 \{#separate-event-listener-for-paywall-events\}
[ペイウォールビルダー](adapty-paywall-builder)でデザインしたペイウォールを表示する場合、ペイウォールビューのイベントは専用の `AdaptyPaywallsEventsListener` インターフェースと `SetPaywallsEventsListener` メソッドを使用するようになりました。コアの `AdaptyEventListener` インターフェースは、プロファイル更新とインストール詳細のために引き続き使用されます。
```diff showLineNumbers
using UnityEngine;
using AdaptySDK;
public class AdaptyListener : MonoBehaviour,
- AdaptyEventListener {
+ AdaptyEventListener,
+ AdaptyPaywallsEventsListener {
void Start() {
Adapty.SetEventListener(this);
+ Adapty.SetPaywallsEventsListener(this);
}
// AdaptyEventListener methods
public void OnLoadLatestProfile(AdaptyProfile profile) { }
public void OnInstallationDetailsSuccess(AdaptyInstallationDetails details) { }
public void OnInstallationDetailsFail(AdaptyError error) { }
+ // AdaptyPaywallsEventsListener methods
+ // Implement paywall event handlers here
}
```
[ペイウォールイベントの処理について詳しく見る](unity-handling-events)。
## ビュー作成・表示メソッドのリネーム \{#rename-view-creation-and-presentation-methods\}
ビューの作成と表示に使用するメソッドがリネームされました。
```diff showLineNumbers
using AdaptySDK;
- AdaptyUI.CreateView(paywall, parameters, (view, error) => {
+ AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
if (error != null) {
// handle the error
return;
}
- AdaptyUI.PresentView(view, (error) => {
+ AdaptyUI.PresentPaywallView(view, (error) => {
// handle the error
});
});
}
```
同様に、閉じるメソッドもリネームされました。
```diff showLineNumbers
- AdaptyUI.DismissView(view, (error) => {
+ AdaptyUI.DismissPaywallView(view, (error) => {
// handle the error
});
```
## MakePurchase メソッドの更新 \{#update-makepurchase-method\}
`MakePurchase` メソッドは、個別の `subscriptionUpdateParams` および `isOfferPersonalized` 引数の代わりに `AdaptyPurchaseParameters` を使用するようになりました。これにより型安全性が向上し、将来的な購入パラメーターの拡張にも対応しやすくなります。
```diff showLineNumbers
using AdaptySDK;
void MakePurchase(
AdaptyPaywallProduct product,
AdaptySubscriptionUpdateParameters subscriptionUpdate,
bool? isOfferPersonalized
) {
- Adapty.MakePurchase(product, subscriptionUpdate, isOfferPersonalized, (result, error) => {
+ var parameters = new AdaptyPurchaseParametersBuilder()
+ .SetSubscriptionUpdateParams(subscriptionUpdate)
+ .SetIsOfferPersonalized(isOfferPersonalized)
+ .Build();
+
+ Adapty.MakePurchase(product, parameters, (result, error) => {
switch (result.Type) {
case AdaptyPurchaseResultType.Pending:
// handle pending purchase
break;
case AdaptyPurchaseResultType.UserCancelled:
// handle purchase cancellation
break;
case AdaptyPurchaseResultType.Success:
var profile = result.Profile;
// handle successful purchase
break;
default:
break;
}
});
}
```
追加パラメーターが不要な場合は、次のように簡単に記述できます。
```csharp showLineNumbers
using AdaptySDK;
void MakePurchase(AdaptyPaywallProduct product) {
Adapty.MakePurchase(product, (result, error) => {
// handle purchase result
});
}
```
## フォールバックメソッドの更新 \{#update-fallback-method\}
:::important
Unity SDK 3.14 にアップグレードする際は、Adapty ダッシュボードから新しいフォールバックファイルをダウンロードし、プロジェクト内の既存ファイルと置き換える必要があります。
:::
フォールバックを設定するメソッドが更新されました。`SetFallbackPaywalls` メソッドは `SetFallback` にリネームされました。
```diff showLineNumbers
using AdaptySDK;
void SetFallBackPaywalls() {
#if UNITY_IOS
var assetId = "adapty_fallback_ios.json";
#elif UNITY_ANDROID
var assetId = "adapty_fallback_android.json";
#else
var assetId = "";
#endif
- Adapty.SetFallbackPaywalls(assetId, (error) => {
+ Adapty.SetFallback(assetId, (error) => {
// handle the error
});
}
```
最終的なコード例は [Unity でフォールバックペイウォールを使用する](unity-use-fallback-paywalls) のページをご覧ください。
## ペイウォールプロパティアクセスの更新 \{#update-paywall-property-access\}
以下のプロパティが `AdaptyPaywall` から `AdaptyPlacement` に移動されました。
```diff showLineNumbers
using AdaptySDK;
void ProcessPaywall(AdaptyPaywall paywall) {
- var abTestName = paywall.ABTestName;
- var audienceName = paywall.AudienceName;
- var revision = paywall.Revision;
- var placementId = paywall.PlacementId;
+ var abTestName = paywall.Placement.ABTestName;
+ var audienceName = paywall.Placement.AudienceName;
+ var revision = paywall.Placement.Revision;
+ var placementId = paywall.Placement.Id;
}
```
## リモートコンフィグアクセスの更新 \{#update-remote-config-access\}
リモートコンフィグのプロパティが `AdaptyRemoteConfig` オブジェクトに再構成され、より整理された形になりました。
```diff showLineNumbers
using AdaptySDK;
void ProcessRemoteConfig(AdaptyPaywall paywall) {
- var remoteConfigString = paywall.RemoteConfigString;
- var locale = paywall.Locale;
- var remoteConfigDict = paywall.RemoteConfig;
+ var remoteConfigString = paywall.RemoteConfig.Data;
+ var locale = paywall.RemoteConfig.Locale;
+ var remoteConfigDict = paywall.RemoteConfig.Dictionary;
}
```
## AdaptyPaywall モデルの使用方法の更新 \{#update-adapty-paywall-model-usage\}
`VendorProductIds` プロパティは非推奨となり、`ProductIdentifiers` に置き換えられました。新しいプロパティは単純な文字列ではなく `AdaptyProductIdentifier` オブジェクトを返すため、プロダクト情報がより構造化されています。
```diff showLineNumbers
using AdaptySDK;
void ProcessPaywallProducts(AdaptyPaywall paywall) {
- var productIds = paywall.VendorProductIds;
- foreach (var vendorId in productIds) {
- // use vendorId
- }
+ var productIdentifiers = paywall.ProductIdentifiers;
+ foreach (var productId in productIdentifiers) {
+ var vendorId = productId.VendorProductId;
+ // use vendorId
+ }
}
```
`AdaptyProductIdentifier` オブジェクトは `VendorProductId` プロパティを通じてベンダープロダクト ID にアクセスでき、従来と同じ機能を維持しつつ、将来の拡張に向けてより良い構造を提供します。
## GetPaywall フェッチポリシーの更新 \{#update-getpaywall-fetch-policy\}
`GetPaywall` メソッドの `fetchPolicy` パラメーターの型が `AdaptyPaywallFetchPolicy` から `AdaptyPlacementFetchPolicy` に変更されました。この変更により、SDK 全体でフェッチポリシーの使用が統一されます。
```diff showLineNumbers
using AdaptySDK;
void GetPaywall(string placementId) {
- Adapty.GetPaywall(placementId, AdaptyPaywallFetchPolicy.ReloadRevalidatingCacheData, null, (paywall, error) => {
+ Adapty.GetPaywall(placementId, AdaptyPlacementFetchPolicy.ReloadRevalidatingCacheData, null, (paywall, error) => {
// handle the result
});
}
```
---
# File: migration-to-unity-sdk-34
---
---
title: "Adapty Unity SDK を v3.4 へ移行する"
description: "Adapty Unity SDK v3.4 に移行して、パフォーマンス向上と新しいマネタイゼーション機能をご活用ください。"
---
Adapty SDK 3.4.0 はメジャーリリースであり、お客様側での移行手順が必要な改善が含まれています。
## フォールバックペイウォールファイルの更新 \{#update-fallback-paywall-files\}
新しい SDK バージョンとの互換性を確保するため、フォールバックペイウォールファイルを更新してください。
1. Adapty ダッシュボードから[更新済みのフォールバックペイウォールファイルをダウンロード](fallback-paywalls)します。
2. モバイルアプリ内の既存のフォールバックペイウォールを[新しいファイルに置き換えます](unity-use-fallback-paywalls)。
## オブザーバーモードの実装を更新する \{#update-implementation-of-observer-mode\}
オブザーバーモードを使用している場合は、その実装を必ず更新してください。
以前は、トランザクションを Adapty に報告するために異なるメソッドが使用されていました。新しいバージョンでは、Android と iOS の両方で `reportTransaction` メソッドを一貫して使用する必要があります。このメソッドは各トランザクションを Adapty に明示的に報告し、認識されることを保証します。ペイウォールを使用した場合は、トランザクションをそのペイウォールに紐付けるためにバリエーション ID を渡してください。
:::warning
**トランザクションの報告をスキップしないでください!**
`reportTransaction` を呼び出さないと、Adapty はトランザクションを認識できず、アナリティクスに表示されず、インテグレーションにも送信されません。
:::
```diff showLineNumbers
- #if UNITY_ANDROID && !UNITY_EDITOR
- Adapty.RestorePurchases((profile, error) => {
- // handle the error
- });
- #endif
Adapty.ReportTransaction(
"YOUR_TRANSACTION_ID",
"PAYWALL_VARIATION_ID", // optional
(error) => {
// handle the error
});
```
---
# File: migration-to-unity330
---
---
title: "Adapty Unity SDK を v3.3 へ移行する"
description: "パフォーマンス向上と新しいマネタイズ機能のために Adapty Unity SDK v3.3.3 へ移行する方法を説明します。"
---
Adapty SDK 3.3.0 はメジャーリリースであり、いくつかの改善が含まれていますが、移行作業が必要な場合があります。
1. Adapty SDK v3.3.x へアップグレードする。
2. Adapty SDK の Adapty モジュールおよび AdaptyUI モジュールで、複数のクラス・プロパティ・メソッドの名前が変更されました。
3. `SetLogLevel` メソッドがコールバックを引数として受け取るようになりました。
4. `PresentCodeRedemptionSheet` メソッドがコールバックを引数として受け取るようになりました。
5. ペイウォールビューの作成方法を変更する。
6. `GetProductsIntroductoryOfferEligibility` メソッドを削除する。
7. フォールバックペイウォールをプラットフォームごとに別々のファイル(各プラットフォーム1ファイル)として `Assets/StreamingAssets/` に保存し、そのファイル名を `SetFallbackPaywalls` メソッドに渡す。
8. 購入処理を更新する。
9. ペイウォールビルダーのイベント処理を更新する。
10. ペイウォールビルダーのペイウォールエラー処理を更新する。
11. Adjust、Amplitude、AppMetrica、Appsflyer、Branch、Firebase および Google Analytics、Mixpanel、OneSignal、Pushwoosh のインテグレーション設定を更新する。
13. Observer モードの実装を更新する。
14. 明示的な `Activate` 呼び出しで Unity プラグインの初期化を更新する。
## Adapty Unity SDK を 3.3.x へアップグレードする \{#upgrade-adapty-unity-sdk-to-33x\}
このバージョンまでは、Adapty SDK がアプリ内で Adapty を正常に動作させるためのコアかつ必須の SDK であり、AdaptyUI SDK はペイウォールビルダーを使用する場合にのみ必要なオプションの SDK でした。
バージョン 3.3.0 以降、AdaptyUI SDK は非推奨となり、AdaptyUI は Adapty SDK のモジュールとして統合されました。この変更により、AdaptyUISDK を削除し、AdaptySDK を再インストールする必要があります。
1. プロジェクトから **AdaptySDK** と **AdaptyUISDK** の両方のパッケージ依存関係を削除する。
2. **AdaptySDK** フォルダーと **AdaptyUISDK** フォルダーを削除する。
3. [Adapty SDK installation & configuration for Unity](sdk-installation-unity) ページの説明に従って、AdaptySDK パッケージを再度インポートする。
## 名前変更 \{#renamings\}
1. Adapty モジュールでの名前変更:
| 旧バージョン | 新バージョン |
| ------------------------- | ------------------------ |
| Adapty.sdkVersion | Adapty.SDKVersion |
| Adapty.LogLevel | AdaptyLogLevel |
| Adapty.Paywall | AdaptyPaywall |
| Adapty.PaywallFetchPolicy | AdaptyPaywallFetchPolicy |
| PaywallProduct | AdaptyPaywallProduct |
| Adapty.Profile | AdaptyProfile |
| Adapty.ProfileParameters | AdaptyProfileParameters |
| ProfileGender | AdaptyProfileGender |
| Error | AdaptyError |
2. AdaptyUI モジュールでの名前変更:
| 旧バージョン | 新バージョン |
| ------------------ | ------------------ |
| CreatePaywallView | CreateView |
| PresentPaywallView | PresentView |
| DismissPaywallView | DismissView |
| AdaptyUI.View | AdaptyUIView |
| AdaptyUI.Action | AdaptyUIUserAction |
## SetLogLevel メソッドの変更 \{#change-the-setloglevel-method\}
`SetLogLevel` メソッドがコールバックを引数として受け取るようになりました。
```diff showLineNumbers
- Adapty.SetLogLevel(Adapty.LogLevel.Verbose);
+ Adapty.SetLogLevel(Adapty.LogLevel.Verbose, null); // or you can pass the callback to handle the possible error
```
## PresentCodeRedemptionSheet メソッドの変更 \{#change-the-presentcoderedemptionsheet-method\}
`PresentCodeRedemptionSheet` メソッドがコールバックを引数として受け取るようになりました。
```diff showLineNumbers
- Adapty.PresentCodeRedemptionSheet();
+ Adapty.PresentCodeRedemptionSheet(null); // or you can pass the callback to handle the possible error
```
## ペイウォールビューの作成方法を変更する \{#change-how-the-paywall-view-is-created\}
完全なコード例については、[ペイウォールビルダーで作成したペイウォールのビュー設定を取得する](unity-get-pb-paywalls#fetch-the-view-configuration-of-paywall-designed-using-paywall-builder) を参照してください。
```diff showLineNumbers
+ var parameters = new AdaptyUICreateViewParameters()
+ .SetPreloadProducts(true);
- AdaptyUI.CreatePaywallView(
+ AdaptyUI.CreateView(
paywall,
- preloadProducts: true,
+ parameters,
(view, error) => {
// use the view
});
```
## GetProductsIntroductoryOfferEligibility メソッドの削除 \{#remove-the-getproductsintroductoryoffereligibility-method\}
Adapty iOS SDK 3.3.0 より前は、ユーザーが対象かどうかに関わらず、プロダクトオブジェクトには常にオファーが含まれていました。そのため、オファーを使用する前に手動で対象確認を行う必要がありました。
現在は、ユーザーが対象である場合にのみプロダクトオブジェクトにオファーが含まれます。つまり、対象確認は不要になりました — オファーが存在する場合、そのユーザーは対象です。
## フォールバックペイウォールの提供方法を更新する \{#update-method-for-providing-fallback-paywalls\}
このバージョンまでは、フォールバックペイウォールはシリアライズされた JSON として渡されていました。v 3.3.0 以降、仕組みが変更されました。
1. フォールバックペイウォールを `/Assets/StreamingAssets/` 内のファイルに保存する(Android 用に 1 ファイル、iOS 用に 1 ファイル)。
2. ファイル名を `SetFallbackPaywalls` メソッドに渡す。
コードの変更は次のようになります。
```diff showLineNumbers
using AdaptySDK;
void SetFallBackPaywalls() {
+ #if UNITY_IOS
+ var assetId = "adapty_fallback_ios.json";
+ #elif UNITY_ANDROID
+ var assetId = "adapty_fallback_android.json";
+ #else
+ var assetId = "";
+ #endif
- Adapty.SetFallbackPaywalls("FALLBACK_PAYWALLS_JSON_STRING", (error) => {
+ Adapty.SetFallbackPaywalls(assetId, (error) => {
// handle the error
});
}
```
最終的なコード例は [Unity でフォールバックペイウォールを使用する](unity-use-fallback-paywalls) ページを参照してください。
## 購入処理の更新 \{#update-making-purchase\}
以前は、キャンセルされた購入と保留中の購入はエラーとして扱われ、それぞれ `PaymentCancelled` と `PendingPurchase` コードが返されていました。
新しい `AdaptyPurchaseResultType` クラスを使用して、キャンセル済み・成功・保留中の購入を処理します。購入コードを次のように更新してください。
```diff showLineNumbers
using AdaptySDK;
void MakePurchase(AdaptyPaywallProduct product) {
- Adapty.MakePurchase(product, (profile, error) => {
- // handle successfull purchase
+ Adapty.MakePurchase(product, (result, error) => {
+ switch (result.Type) {
+ case AdaptyPurchaseResultType.Pending:
+ // handle pending purchase
+ break;
+ case AdaptyPurchaseResultType.UserCancelled:
+ // handle purchase cancellation
+ break;
+ case AdaptyPurchaseResultType.Success:
+ var profile = result.Profile;
+ // handle successful purchase
+ break;
+ default:
+ break;
}
});
}
```
最終的なコード例は [モバイルアプリで購入する](unity-making-purchases) ページを参照してください。
## ペイウォールビルダーのイベント処理を更新する \{#update-handling-of-paywall-builder-events\}
キャンセルされた購入と保留中の購入はエラーとして扱われなくなり、これらのケースはすべて `PaywallViewDidFinishPurchase` メソッドで処理されます。
1. キャンセルされた購入イベントの処理を削除する。
2. 購入成功イベントの処理を次のように更新する。
```diff showLineNumbers
- public void OnFinishPurchase(
- AdaptyUI.View view,
- Adapty.PaywallProduct product,
- Adapty.Profile profile
- ) { }
+ public void PaywallViewDidFinishPurchase(
+ AdaptyUIView view,
+ AdaptyPaywallProduct product,
+ AdaptyPurchaseResult purchasedResult
+ ) { }
```
3. アクションの処理を更新する。
```diff showLineNumbers
- public void OnPerformAction(
- AdaptyUI.View view,
- AdaptyUI.Action action
- ) {
+ public void PaywallViewDidPerformAction(
+ AdaptyUIView view,
+ AdaptyUIUserAction action
+ ) {
switch (action.Type) {
- case AdaptyUI.ActionType.Close:
+ case AdaptyUIUserActionType.Close:
view.Dismiss(null);
break;
- case AdaptyUI.ActionType.OpenUrl:
+ case AdaptyUIUserActionType.OpenUrl:
var urlString = action.Value;
if (urlString != null {
Application.OpenURL(urlString);
}
default:
// handle other events
break;
}
}
```
4. 購入開始の処理を更新する。
```diff showLineNumbers
- public void OnSelectProduct(
- AdaptyUI.View view,
- Adapty.PaywallProduct product
- ) { }
+ public void PaywallViewDidSelectProduct(
+ AdaptyUIView view,
+ string productId
+ ) { }
```
5. 購入失敗の処理を更新する。
```diff showLineNumbers
- public void OnFailPurchase(
- AdaptyUI.View view,
- Adapty.PaywallProduct product,
- Adapty.Error error
- ) { }
+ public void PaywallViewDidFailPurchase(
+ AdaptyUIView view,
+ AdaptyPaywallProduct product,
+ AdaptyError error
+ ) { }
```
6. リストア成功イベントの処理を更新する。
```diff showLineNumbers
- public void OnFailRestore(
- AdaptyUI.View view,
- Adapty.Error error
- ) { }
+ public void PaywallViewDidFailRestore(
+ AdaptyUIView view,
+ AdaptyError error
+ ) { }
```
最終的なコード例は [ペイウォールのイベントを処理する](unity-handling-events) ページを参照してください。
## ペイウォールビルダーのペイウォールエラー処理を更新する \{#update-handling-of-paywall-builder-paywall-errors\}
エラーの処理も変更されました。以下のガイダンスに従ってコードを更新してください。
1. プロダクト読み込みエラーの処理を更新する。
```diff showLineNumbers
- public void OnFailLoadingProducts(
- AdaptyUI.View view,
- Adapty.Error error
- ) { }
+ public void PaywallViewDidFailLoadingProducts(
+ AdaptyUIView view,
+ AdaptyError error
+ ) { }
```
2. レンダリングエラーの処理を更新する。
```diff showLineNumbers
- public void OnFailRendering(
- AdaptyUI.View view,
- Adapty.Error error
- ) { }
+ public void PaywallViewDidFailRendering(
+ AdaptyUIView view,
+ AdaptyError error
+ ) { }
```
## サードパーティインテグレーション SDK 設定の更新 \{#update-third-party-integration-sdk-configuration\}
Adapty Unity SDK 3.3.0 以降、`updateAttribution` メソッドのパブリック API を更新しました。以前は `[AnyHashable: Any]` ディクショナリを受け取り、さまざまなサービスからアトリビューションオブジェクトを直接渡すことができました。現在は `[String: any Sendable]` が必要なため、渡す前にアトリビューションオブジェクトを変換する必要があります。
Adapty Unity SDK 3.3.0 以降でインテグレーションが正しく機能するよう、以下のセクションに記載されているインテグレーションの SDK 設定を更新してください。
### Adjust
以下のようにモバイルアプリのコードを更新してください。完全なコード例については、[Adjust インテグレーションの SDK 設定](adjust#connect-your-app-to-adjust) を参照してください。
```diff showLineNumbers
- using static AdaptySDK.Adapty;
using AdaptySDK;
Adjust.GetAdid((adid) => {
- Adjust.GetAttribution((attribution) => {
- Dictionary