ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

Unity SDKで認証の状態確認を行うには

f:id:mbaasdevrel:20200609155631p:plain

mBaaSには会員管理機能があり、認証を手軽に実装できます。利用は簡単なのですが、実際に使う上ではいくつかの注意点があります。今回はその注意点と実装方法についてUnity SDKを用いて紹介します。

注意点

先に注意すべき内容を書いておきます。

  • ログイン中のユーザ(会員)が取れたかといって、セッションが有効かは分からない
  • セッションの有効性はmBaaSにアクセスしないと分からない

ということです。この2点を踏まえて実装を紹介します。

現在のログインユーザを取得する

現在ログインしているユーザは NCMBUser.CurrentUser で取得できます。これが null だった場合には、そもそもログインしていない状態です。

NCMBUser currentUser = NCMBUser.CurrentUser;
if (currentUser == null) {
  // ログインしていない
} else {
  // ログイン中
}

セッションの有効性をチェックする

セッションの有効性チェックは何らかのデータを取得してみることで分かります。最も簡単なのはユーザ自身のデータを取得し直してみることです。

try {
    await currentUser.FetchTaskAsync();
    UnityEngine.Debug.Log ("セッションは有効です");
} catch (NCMBException e) {
    // セッションが無効
    UnityEngine.Debug.Log ("セッションは無効です");
}

セッションが無効だった場合の処理

もしエラーだった(セッションが無効だった)場合には、ログアウト処理と取得したデータの無効化をするといいでしょう。

await NCMBUser.LogOutTaskAsync();
currentUser = null;

全体のコードは次のようになります。

NCMBUser currentUser = NCMBUser.CurrentUser;
if (currentUser != null) {
    // セッションの有効性を確認
    try {
        await currentUser.FetchTaskAsync();
        UnityEngine.Debug.Log ("セッションは有効です");
    } catch (NCMBException e) {
        // セッションが無効
        UnityEngine.Debug.Log ("セッションは無効です");
        await NCMBUser.LogOutTaskAsync();
        currentUser = null;
    }
}

こうすることでセッションの無効化が行われて、再度ログイン処理などに繋げられます。

セッションが無効になる原因

セッションが無効になる原因は以下のようになります。

  • 別な端末でログインした
  • ユーザを管理画面や別端末で削除した
  • セッションの有効期限を過ぎた

セッションの有効期限は管理画面で変更できますが、最大7日間になります。

まとめ

セッションの有効性チェックをしないと、ログインしている状態なのにデータの取得や保存ができないという困った状態になってしまいます。認証機能を使っている場合には、最初に忘れずチェックするようにしてください。また、たまたまアプリの利用中にセッションの有効期限が切れてしまうこともあるので、mBaaSへのアクセス時には try / catch を使ってエラーの補足を行うようにしてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。