---
title: "React Native SDKでユーザーを識別する"
description: "React NativeでAdaptyを使ったアプリ内サブスクリプション管理のクイックスタートガイド。"
---

:::important
このガイドは、独自の認証システムを持っている方向けです。ここでは、Adaptyでユーザープロファイルを管理し、既存の認証システムと連携させる方法を説明します。
:::

ユーザーの購入をどのように管理するかは、アプリの認証モデルによって異なります。
- アプリがバックエンド認証を使用せず、ユーザーデータを保存しない場合は、[匿名ユーザーのセクション](#anonymous-users)を参照してください。
- アプリにバックエンド認証がある（または導入予定の）場合は、[識別済みユーザーのセクション](#identified-users)を参照してください。

**主要な概念**:
- **プロファイル**はSDKが動作するために必要なエンティティで、Adaptyが自動的に作成します。
- プロファイルは匿名**（カスタマーユーザーIDなし）**または識別済み**（カスタマーユーザーIDあり）**のいずれかです。
- **カスタマーユーザーID**を提供することで、AdaptyのプロファイルとあなたのシステムのIDを紐付けられます。

匿名ユーザーと識別済みユーザーの違いは以下の通りです：

|                         | 匿名ユーザー                                              | 識別済みユーザー                                                                |
|-------------------------|---------------------------------------------------|-------------------------------------------------------------------------|
| **購入管理** | ストアレベルの購入復元                   | カスタマーユーザーIDを通じてデバイスをまたいで購入履歴を維持 |
| **プロファイル管理**  | 再インストールのたびに新しいプロファイルが作成される  | セッションやデバイスをまたいで同じプロファイルを使用                      |
| **データの永続性**    | 匿名ユーザーのデータはアプリのインストールに紐付く | 識別済みユーザーのデータはアプリのインストールをまたいで保持される       |

## 匿名ユーザー \{#anonymous-users\}

バックエンド認証がない場合、**アプリのコードで認証処理を行う必要はありません**：

1. アプリの初回起動時にSDKが有効化されると、AdaptyはそのユーザーのためにNew プロファイルを**作成**します。
2. ユーザーがアプリ内で何か購入すると、その購入は**Adaptyプロファイルとストアアカウントに紐付けられます**。
3. ユーザーがアプリを**再インストール**したり、**新しいデバイス**にインストールしたりすると、Adaptyは有効化時に**新しい匿名プロファイルを作成**します。
4. ユーザーがそれ以前にアプリで購入していた場合、デフォルトではSDK有効化時にApp Storeから購入履歴が自動的に同期されます。

匿名ユーザーの場合、インストールのたびに新しいプロファイルが作成されますが、Adaptyアナリティクスでは[新規インストールとみなす基準を設定](general#4-installs-definition-for-analytics)できるため、問題にはなりません。

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

匿名ユーザーの場合、**デバイスID**に基づいてインストール数をカウントします。この場合、再インストールを含め、デバイス上のアプリインストールがそれぞれ1回のインストールとしてカウントされます。

## 識別済みユーザー \{#identified-users\}

ユーザーを識別する方法は2つあります：

- [**ログイン/サインアップ時:**](#during-loginsignup) アプリ起動後にユーザーがサインインする場合、認証時に`identify()`をカスタマーユーザーIDと共に呼び出します。

- [**SDKの有効化時:**](#during-the-sdk-activation) アプリ起動時にカスタマーユーザーIDがすでに保存されている場合、`activate()`呼び出し時にそれを渡します。

:::important
デフォルトでは、あるカスタマーユーザーIDから購入が発生した際、その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はそのカスタマーユーザーに紐付いたプロファイルへ切り替えます。

:::important
カスタマーユーザーIDはユーザーごとに一意である必要があります。パラメータの値をハードコードすると、すべてのユーザーが同一人物とみなされます。
:::

他のSDKメソッドを呼び出す前に、必ず`identify`を`await`してください。並列呼び出しを行うと`#3006 profileWasChanged`が発生したり、匿名プロファイルに対して操作が行われる場合があります。詳しくは[React Native SDKの呼び出し順序](react-native-sdk-call-order)を参照してください。

```typescript showLineNumbers
try {
    await adapty.identify("YOUR_USER_ID"); // Unique for each user
    // successfully identified
} catch (error) {
    // handle the error
}
```

### SDKの有効化時 \{#during-the-sdk-activation\}

SDKを有効化する時点でカスタマーユーザーIDが既にわかっている場合、`identify`を別途呼び出さずに`activate`メソッドに渡すことができます。

カスタマーユーザーIDがわかっているにもかかわらず、有効化後にのみ設定した場合、有効化時にAdaptyは新しい匿名プロファイルを作成し、`identify`を呼び出した後にのみ既存のプロファイルに切り替わります。

既存のカスタマーユーザーID（以前に使用したもの）または新しいものを渡すことができます。新しいものを渡した場合、有効化時に作成される新しいプロファイルが自動的にそのカスタマーユーザーIDに紐付けられます。

:::note
デフォルトでは、匿名プロファイルの作成はアナリティクスダッシュボードに影響しません。インストールはデバイスIDに基づいてカウントされるためです。

デバイスIDはストアからデバイスへのアプリの1回のインストールを表し、アプリの再インストール後にのみ再生成されます。  
初回インストールか再インストールかや、既存のカスタマーユーザーIDを使用するかどうかには依存しません。

プロファイルの作成（SDK有効化時またはログアウト時）、ログイン、または再インストールなしのアプリアップグレードでは、追加のインストールイベントは発生しません。

インストールをデバイスではなく一意のユーザーに基づいてカウントしたい場合は、**App settings**で[**Installs definition for analytics**](general#4-installs-definition-for-analytics)を設定してください。
:::

```typescript showLineNumbers
adapty.activate("PUBLIC_SDK_KEY", {
    customerUserId: "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.
});
```

### ユーザーをログアウトさせる \{#log-users-out\}

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

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

```typescript showLineNumbers
try {
    await adapty.logout();
    // successful logout
} catch (error) {
    // handle the error
}
```

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

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

ユーザーがログイン前後の両方で購入できる場合、ログイン後もアクセスが維持されるよう対応が必要です：

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

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

おめでとうございます！アプリにアプリ内課金のロジックを実装できました。アプリの収益化を成功させてください！

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