# インターフェース実装ベースのトークン生成

> How to generate access tokens using an interface implementation.

Vivox アクセストークン (VAT) が生成される方法を制御する必要がある場合は、Vivox SDK の `IVivoxTokenProvider` インターフェースを実装するクラスを作成し、それを VivoxService に登録します。

IVivoxTokenProvider の実装を `VivoxService.Instance.SetTokenProvider` を呼び出すことで登録すると、Vivox はトークンが必要なアクション (サインインなど) で常にその実装の `IVivoxTokenProvider.GetTokenAsync` メソッドを呼び出します。

ペイロードを作成するのに必要な情報が、オーバーライドされた `IVivoxTokenProvider.GetTokenAsync` メソッドの入力として提供されます。この情報は、VAT を作成するときに使用されます。

その場合でも、サーバー側トークンベンディングを設定し、オーバーライドされた `IVivoxTokenProvider.GetTokenAsync` メソッド内でそのトークンをフェッチする必要があります。

## サブスクライブするには##to-subscribe

ユーザーをログインさせる前に、以下を使用して `IVivoxTokenProvider` 実装を登録する必要があります。

```text
VivoxService.Instance.SetTokenProvider(new CustomTokenProvider());
```

> **Important:**
>
> **重要**: サブスクライブフローは v16.5.0 で変更されています。16.5.0 よりも前の Unity Vivox SDK バージョンでは、Vivox SDK を初期化する前に `IVivoxTokenProvider` の実装を登録する必要がありました。

## トークンをフェッチする##fetch-the-token

オーバーライドされたメソッドで提供されているすべてのパラメーター (一部は空の場合あり) を使用してペイロードを作成し、安全なサーバーに送信して、Vivox アクセストークンを作成します。すべてのパラメーターを送信することをお勧めします。ペイロードで必要なもののみが返されます。そのペイロードを `GetTokenAsync` メソッドへの入力として使用します。

トークンによって、空になるパラメーターが異なります。例えば、サインイントークンでは targetUserUri と channelUri が空になります。これは想定されている動作です。

トークン生成の例を以下に示します。

```cs
public class VoiceManager : MonoBehaviour
{
    async void Start()
    {
        // Must be done before any other Vivox action otherwise tokens will not be generated properly.
        VivoxService.Instance.SetTokenProvider(new VivoxTokenProvider());
        await UnityServices.InitializeAsync();
        await VivoxService.Instance.InitializeAsync();
    }
}

class VivoxTokenProvider : IVivoxTokenProvider
{
    public Task<string> GetTokenAsync(string issuer = null, TimeSpan? expiration = null, string targetUserUri = null, string action = null, string channelUri = null, string fromUserUri = null, string realm = null)
    {
        // Implement token fetching logic here.
        // The method parameters contain the necessary information for crafting the request payload.
        // This will be called whenever a token is needed for a Vivox action
    }
}
```

特定のフローの詳細については、[Vivox アクセストークンを使用してサインインする](../developer-guide/vivox-unity-sdk-basics/using-vivox-access-tokens-together-with-uas) を参照してください

サーバー側トークンの生成の詳細については、[安全なサーバー上でのトークンの生成](./generate-token-secure-server/generate-token-secure-server-toc.md) を参照してください。
