---
title: "Kotlin Multiplatform SDKでユーザーを識別する"
description: "KMPでアプリ内サブスクリプション管理のためにAdaptyをセットアップするためのクイックスタートガイド。"
---

:::important
このガイドは、独自の認証システムをお持ちの方を対象としています。ここでは、既存の認証システムと連携するように、Adaptyでユーザープロファイルを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**でカウントする必要があります。この場合、再インストールを含め、デバイスへのアプリインストールがそれぞれ1回のインストールとしてカウントされます。

:::note
バックアップからの復元は再インストールとは異なる動作をします。デフォルトでは、ユーザーがバックアップから復元した場合、SDKはキャッシュされたデータを保持し、新しいプロファイルは作成しません。この動作は`withAppleClearDataOnBackup`設定で変更できます。[詳細を確認する](sdk-installation-kotlin-multiplatform#clear-data-on-backup-restore)。
:::

## 識別済みユーザー \{#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`の完了（`onSuccess`コールバック）を待ってください。同時に呼び出すと、匿名プロファイルに処理が行われる可能性があります。[Kotlin Multiplatform SDKでの呼び出し順序](kmp-sdk-call-order)を参照してください。

```kotlin showLineNumbers
Adapty.identify("YOUR_USER_ID") // Unique for each user
    .onSuccess {
        // successful identify
    }
    .onError { error ->
        // handle the error
    }
```

### 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)を設定してください。
:::

```kotlin showLineNumbers
AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withCustomerUserId("user123") // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
    .build()
```

### ユーザーのログアウト \{#log-users-out\}

ユーザーのログアウトボタンがある場合は、`logout`メソッドを使用します。

:::important
ユーザーをログアウトすると、そのユーザーのために新しい匿名プロファイルが作成されます。
:::

```kotlin showLineNumbers
Adapty.logout()
    .onSuccess {
        // successful logout
    }
    .onError { error ->
        // handle the error
    }
```

:::info
ユーザーをアプリに再度ログインさせるには、`identify`メソッドを使用します。
:::

### ログインなしでの購入を許可する \{#allow-purchases-without-login\}

ユーザーがアプリへのログイン前後の両方で購入できる場合、ログイン後もアクセスが維持されるように設定する必要があります。

1. ログアウト状態のユーザーが購入すると、Adaptyはその購入を匿名プロファイルIDに紐付けます。
2. ユーザーがアカウントにログインすると、Adaptyは識別済みプロファイルを使用するよう切り替わります。
    - 新しいカスタマーユーザーIDの場合（たとえば、登録前に購入が行われた場合）、Adaptyは現在のプロファイルにカスタマーユーザーIDを割り当てるため、すべての購入履歴が維持されます。
    - 既存のカスタマーユーザーIDの場合（カスタマーユーザーIDがすでにプロファイルにリンクされている場合）、プロファイルの切り替え後に実際のアクセスレベルを取得する必要があります。識別後すぐに[`getProfile`](kmp-check-subscription-status)を呼び出すか、[プロファイルの更新をリッスンする](kmp-check-subscription-status)ことでデータが自動的に同期されます。

## 次のステップ \{#next-steps\}

おめでとうございます！アプリにアプリ内課金のロジックが実装できました！アプリの収益化がうまくいくことを願っています！

Adaptyをさらに活用するために、以下のトピックも確認してください。
- [**テスト**](troubleshooting-test-purchases)：すべてが期待どおりに動作することを確認する
- [**インテグレーション**](configuration)：マーケティングアトリビューションや分析サービスとわずか1行のコードで連携する
- [**カスタムプロファイル属性の設定**](kmp-setting-user-attributes)：ユーザープロファイルにカスタム属性を追加してセグメントを作成し、A/Bテストを実施したり、ユーザーに応じて異なるペイウォールを表示したりする