---
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)をご覧ください。
:::

  <img src="/assets/shared/img/identify-diagram.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

### ログイン/サインアップ時 \{#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 テストを実施したり、異なるユーザーに異なるペイウォールを表示したりする