仮ユーザー(Pseudo User)

Kii Cloud が提供するユーザー管理やデータ管理機能をフルで活用したいが、ユーザー名やパスワードによるアカウント登録をユーザーに強いたくない場合があります。このような要望を満たすため Kii Cloud では「仮ユーザー」の機能を提供しています。

仮ユーザーの仕組み

仮ユーザーは、ユーザー名やパスワードを指定せずに Kii Cloud 上のユーザーを使用する機能です。ユーザー名やパスワードを使ってユーザーを識別する代わりに、仮ユーザーが作成された際の アクセストークン をモバイルアプリ側で保持し続けることでユーザーを識別します。

モバイルアプリからは、ユーザー名やパスワードを指定せず、Kii Cloud 上に「仮ユーザー」の作成要求を出します。仮ユーザーが作成されると、Kii Cloud から、そのユーザーへのアクセストークンが発行されます。

通常のユーザーがユーザー名やパスワードを使ってログインに成功すると、そのユーザーのログイン状態を示すアクセストークンが発行されますが、ここで仮ユーザーの作成機能を使うと、通常のユーザーのログイン成功と同じ効果が得られることになります。

仮ユーザーの作成時に取得したアクセストークンは、デバイスのローカルストレージに保存しておくなどして、ユーザーが不要になるまで保持し続ける必要があります。アクセストークンを失うと、そのユーザーはアクセスできなくなります。再度ログインが必要な場合は、ログインとアクセストークン に示す方法によって、アクセストークンによるログインを行います。

仮ユーザーは、通常のユーザーと同様に Kii Cloud を利用することができますが、唯一、アクセストークンが発行できず、ユーザー作成時に発行済みのアクセストークン以外の方法で再ログインできない点が異なります。仮ユーザーはユーザー名やパスワードを保持していないので、ログイン操作によって新しいアクセストークンを得ることはできません。

なお、仮ユーザーの作成後、ユーザー名/メールアドレス/電話番号などのユーザーの識別情報と、パスワードを登録することによって、通常のユーザーに変更することもできます。別のデバイスにユーザー情報を引き継ぐような機能を実現するには、通常ユーザーに変更後、別のデバイスからログインするような方法を採用できます。

仮ユーザーの作成

仮ユーザー作成の例を以下に挙げます。

curl -v -X POST \
  -H "Authorization: Basic {BASE64_ENCODED_APPID_AND_APPKEY}" \
  -H "Content-Type: application/vnd.kii.RegistrationAndAuthorizationRequest+json" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users" \
  -d '{
        "displayName": "Alice",
        "locale": "ja"
      }'

仮ユーザーの作成は Basic 認証 を使って行います。{BASE64_ENCODED_APPID_AND_APPKEY} には AppID と任意の値をコロン(:) で連結した文字列を Base64 エンコードしたものを入れてください。

仮ユーザーの作成に成功すると、Kii Cloud は次のようにユーザー ID とアクセストークンを返します。

HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Location: https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}
Content-Type: application/vnd.kii.RegistrationAndAuthorizationResponse+json

{
  "userID" : {USER_ID},
  "_accessToken" : {ACCESS_TOKEN}
}

仮ユーザーの作成後は、発行されたアクセストークンを使って、通常のユーザーと同じ操作ができます。

アプリのアンインストールなどでアクセストークンが失われると、ユーザーの領域は参照できない状態となります。なお、ディスプレイネームなどで対象のユーザーを識別できれば、ユーザーコンソール から削除することもできます。

通常のユーザーへの変更

作成した仮ユーザーは後からユーザー名、パスワード等を設定して、通常の認証情報を持ったユーザーに変更することができます。

以下に例を示します。

curl -v -X POST \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  -H "Content-Type: application/vnd.kii.UserUpdateRequest+json" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users/me" \
  -d '{
        "loginName": "user_123456",
        "displayName": "Player1",
        "password": "pass123456",
      }'

正しく通常ユーザーへの変更が完了すると Kii Cloud は 200 応答を返します。

明示的なログインを行わない利用

仮ユーザーを使用する方法以外にも、明示的なログインを行わずに Kii Cloud を使用する方法として以下のものがあります。これらは実装が煩雑になったり、機能制限を受けたりするため、通常は仮ユーザーの使用をおすすめします。

モバイルアプリ側で認証情報を生成する方法

ユーザーにログイン操作をさせたくない場合、初回起動時にモバイルアプリのバックグラウンドでランダムなユーザー名とパスワードを自動生成し、それらを使ってユーザー登録とログインを行う方法が考えられます。生成した情報は、デバイスのストレージに保存しておきます(Android の SharedPreference や、iOS の NSUserDefaults など)。モバイルアプリがアンインストールされるか、OS の設定などでデータの削除が行われるまでは、そのデバイスでそのユーザーが使用できます。

このとき、ユーザー名は重複しないように、モバイルアプリ側で一意のものを生成するための工夫が必要です。

なお、この方法では、デバイスのストレージからユーザー名とパスワードが失われると、Kii Cloud のデータにアクセスできなくなります。ユーザー名とパスワードとして、デバイス ID のようにデバイス単位で不変な情報を使う方法も考えられますが、最近ではプライバシーの観点からデバイス ID の利用は制限される傾向にあります。

別のデバイスに引き継いだり、ログイン情報をバックアップしたりするためには、ストレージに保存しているユーザー名とパスワードのインポートとエクスポート(またはそれらの表示と入力など)のような機能を作り込むことになるはずです。

匿名ユーザー機能を使用する方法

Kii Cloud ではログイン前の匿名ユーザーの状態もサポートしますが、実行できる処理は限られています。ユーザースコープのデータのアクセスをはじめ、ほとんどの機能を利用するには Kii Cloud へのログイン(仮ユーザーの登録も含む)が必要です。