mBaaSでは会員管理機能を提供しています。その会員管理では、認証は1ユーザあたり1ログインという制限があります。後からのログインユーザが優先され、古いセッションはすべて無効になります。
そのため、複数のデバイスからログインするとログインしていたデバイスから機能が使えなくなったりして不便な思いをします。そこで今回は幾つかの解決策のアイディアを紹介します。
1. エラーハンドリングを行う
一つ目の解決策としては正しくエラーハンドリングを行うというものです。ACLを使うようなデータ保存や検索処理を行った場合、セッションが無効になっていると401エラーが発生します。そこで、401エラーが起こった場合には「他のデバイスでログイン済みです。またはセッションが切れました」といったメッセージを表示してログイン画面に遷移します。
この場合の問題としては写真を保存したり、コメント/スコアなどを記録するような処理を実行してみないとログインステータスが分からないということです。そのため、UXによってはユーザストレスを感じさせてしまうかも知れません。
2. ログインをエラーにする
二つ目の解決策として、古いデバイスでログアウトしないと新しいデバイスではログインできない仕組みを作る方法があります。ログイン中であるかどうかを最終ログイン日時として、userクラスに残しておきます。逆にログアウトする際にはそれを消すようにします。これはAPIを叩く度に更新する必要があります。
他のデバイスではこの最終ログイン日時を見て、セッションが有効であるかどうかを判断します。セッションが有効である場合は「他のデバイスでログイン中です。ログアウト処理を行ってください」といったメッセージを送る必要があります。
注意点としては、セッションには有効時間がありますので(デフォルトで24時間)、セッションの有効時間が過ぎている場合は他のデバイスからログインできるようになっている必要があります。また、userクラスにデータを残す場合には未ログイン状態でもユーザ情報にアクセスできなければいけないので、ACLを全員公開(書き込み、削除は不可)としておかなければいけません。
3. 匿名会員機能を使う
データのACL保存についてのみ行いたいというのであれば、匿名会員機能を使うこともできます。この場合、デバイスごとに会員が分かれて管理されます。そのため、一人のユーザとして管理されませんが、複数デバイスでアプリを利用できるようになります。
同じような仕組みはソーシャルゲームでは良く行われています。ユーザ登録という仕組みは面倒ですが、データをセキュリティ上適切に管理したいという場合に便利です。注意点としては、ログアウトのような仕組みは作れないという問題があります。
データ移行するような仕組みを作る場合には注意が必要です。既存のデータについて一時的な場所に移動したり、権限を付け替えるような仕組みが必要でしょう。
幾つかの方法がありますが、ゲームアプリとしては「3. 匿名会員機能を使う」を採用するケースが多いようです。ニコニコ動画のようなサービスでは「1. エラーハンドリングを行う」が使われていますが、Webサービスとアプリとしての違いは大きいでしょう。UXを考えるならば「2. ログインをエラーにする」が一番分かりやすい仕組みと言えます。ユーザ自身でログアウト処理を行うので納得感のある仕組みにできます。
アプリの特性に合わせて最適なものを選択してください。