顔認証を利用したアプリで個々のユーザ情報を保持する方法について

 パペロで顔認証を行うアプリを作成する場合に、顔を登録する個々のユーザに関する情報や状態を保持する方法について考えてみました。

名前の読み方

 管理ポータル上では管理上、ユーザ名は普通に漢字で登録したいですが、人名は同じ漢字でもいろいろな読み方があり、ユーザ名とは別に読み方を登録できる様にするのは、パペロアプリの場合必須になってくると思います。考えられる方法としては、

(1) ユーザ名に含める
半角小かっこがついていたらその中は読み仮名と定義する方法です。さらに、姓、名を別に利用する必要がある可能性を考慮し、姓名の間には半角スペースを入れることにします。
「山田 太郎」
「山田 太郎(やまだ たろう)」
これであれば管理ポータルを操作する管理者にとっても、プログラムからの扱いも許容できる範囲ではないかと思います。
(2) ユーザ情報1~3を利用する
認証のAPIではユーザIDとユーザ名(と顔認証のスコアとマッチした画像のインデックス)のみ取得でき、ユーザ情報を取得するにはユーザ検索のAPIを使わねばならない手間はありますが、ユーザ情報1~3それぞれ1024文字まで利用できるので、例えばユーザ情報1は読み方、と決めてしまう方法が考えられます。
読み方以外にも少量のデータであればユーザ情報に保存する方法が使えます。
(3) 別途保持してユーザ識別子で結びつける
下の大きいデータと同じ方法も使えます。

名前については日本人以外も対象にする場合には姓名順、ミドルネームの扱いなどもっと面倒が増えてしまいます。

大きいデータ

 例えば認証用顔画像以外の画像などユーザ情報1~3には大きすぎるデータを保持したい場合、そのデータは別に保存しておき、ユーザの識別子と結びつける方法を取る必要があります。
 このユーザ識別子ですが、顔認証のAPIで返されるユーザIDを、このような用途で使用することはできないことに注意が必要です。というのは、このユーザIDは例えば顔認証管理ポータルにおいて、「対象PaPeRo i」の設定を変えると変化してしまうなど、登録時の値が不変であることが保証されていないのです(登録時の指定も不可)。従って、アプリで利用するユーザ識別子はユーザ情報1~3のいずれかに保存する必要があります。

ユーザ情報1~3の使用方法について

 ユーザ情報1~3の更新のAPIはユーザ情報1~3のうち指定したものだけを更新できる仕様になっており、システムデータ・アプリデータという様な階層がある場合に管理を分離できる良さがあります。また、ユーザ検索のAPIの検索条件として使用できます。
 ユーザ情報1~3の使い方は個々のアプリ開発者に任されていると思うのですが、本当は共通化されているのが理想だと思います。文字数も限られますし、誰もが満足できるものではないかもしれませんが、例えば以下のような定義であれば複数のアプリが共用できるのではないかと思います。

ユーザ情報 内容 フォーマット 備考
ユーザ情報1 アプリでのユーザ識別子+本フォーマットの固有文字列 文字列 検索利用を考慮し文字列とする USER00001 FMTV000
ユーザ情報2 全アプリ共有情報 JSON ‘Firstname’:姓, ‘Country’:国名などキーを別途定める {“Firstname”:”太郎”,”Lastname”:”山田”,”Country”:”japan”}
ユーザ情報3 アプリごとの情報 JSON アプリ識別子のキー以下に個々のアプリデータを保存する {“SpiDemo1”:{“data1″:”abc”,”data2″:”123″},”SpiHello”:{“text1″:”xyz”,”text2″:”000″}}