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

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

Unity×NCMBで会員機能を実装する際の注意点(「Authentication error by header incorrect.」エラー編)

f:id:mbaasblog:20200824194026p:plain Unityにニフクラ mobile backendのUnity SDKを導入して開発している方向けのブログです👍 今回はサインアップ機能をつける際に「Authentication error by header incorrect.」エラーが出てしまったので原因と解決法をご紹介します🌟

はじめに

f:id:mbaasblog:20200228144613p:plain こんにちは。mobile backend 企画担当の伊藤です。
以前よりプログラミング初心者の方向けにブログ記事を書いていましたが、最近Unity×ニフクラ mobile backend Unity SDKでゲーム開発を始めてみたので、開発する際に躓いた箇所と解決方法を記事にさせていただきたいと思います☺

今回作成したゲームの画面イメージ

「ログイン画面」「新規登録画面」「ゲーム画面」の3画面から構成されており、 ログイン画面からスタートします。

新規会員登録する場合

f:id:mbaasblog:20200907175103p:plain

ログイン画面から新規会員登録画面に遷移、新規会員登録後ゲーム画面に遷移します。

新規会員登録済みの場合

f:id:mbaasblog:20200907174428p:plain
ログイン画面からログイン後、ゲーム画面に遷移します。

エラー発生の状況調査

新規会員登録から実行してみるとスコアがデータストアに保存されないという事例が発生しました💦
ログを確認したところ「Authentication error by header incorrect.」エラーが発生しているようでした。
エラーは発生していますが、会員情報は会員管理データベースに保存されていました☺
つまり新規会員登録は成功しているが、ゲームスコアだけがエラーのために保存できていない状況みたいです💔

公式ドキュメントでエラーを検索

「Authentication error by header incorrect.」エラーをドキュメントから見てみました。

REST API リファレンス : エラーコード一覧 | ニフクラ mobile backend

Authentication error by header incorrect.:Header不正による認証エラー

セッションが不正ということですかね。。?
次から詳しく原因を追究していきましょう。

ログイン画面からログインした場合は問題なく保存されます

新規会員登録は成功しているので、その情報を使ってログインすると問題なくスコアは保存されました。

f:id:mbaasblog:20200907174428p:plain

f:id:mbaasblog:20200907173419p:plain

つまり、新規登録画面から入るとゲームを遊んでもスコアは保存されないですが、
新規会員登録後、ログイン画面でログインすると ゲームが開始し、データも保存されます🎊 なんとなく原因がわかってきましたか?

ここまでで原因がわかったので次から解説します。

原因特定!

原因は理想の処理と現実の処理が一致しないということでした!
次に説明するように、想定していた処理(理想)と実際の処理(現実)に乖離があったようです。

理想

f:id:mbaasblog:20200928180449p:plain

新規会員登録が成功すると、ユーザーセッションが自動的に開始されて
会員情報とスコアが保存されると思っていました。

現実

f:id:mbaasblog:20200928180521p:plain

新規会員登録は正常に行うことができますが ただ登録が成功されているだけ(認証処理はされていない)なので、そのままゲーム画面に遷移するとユーザーセッションは開始されていない状態で ゲームが開始されてしまいます(´;ω;`)
そのため、スコアは保存されません。
ユーザーとしてゲームを遊びスコアを保存するにはログイン処理の実装が必要です☝
次から解決法を見ていきましょう。

解決方法

解決方法は2つあります。

①新規会員登録が成功したら裏でログイン処理を行う

public void Login()
{
  //ログイン処理
}

public void SignUp()
{
   //新規会員登録
   print (UserName.text);
   print (PassWord.text);

   //NCMBUserのインスタンス作成 
     NCMBUser user = new NCMBUser ();
        
   //ユーザ名とパスワードの設定
     user.UserName = UserName.text;
     user.Password = PassWord.text;       
           
   //新規会員登録機能
     user.SignUpAsync ((NCMBException e) => { 
     //ここでログインメソッドを呼びます
     Login()
     });
}

新規会員登録画面から登録後にすぐゲームを実行させたい場合は
裏でログインさせる必要があります。
(上でも書きましたが、ユーザーとしてゲームを遊びスコアを保存するにはログイン処理の実装が必要です)
ログインさせることで、ゲーム画面遷移後も新規会員登録したユーザーのセッションを保持させることができるため エラーは発生しません。

②新規会員登録が成功したらログイン画面に遷移するようにする

f:id:mbaasblog:20200907180013p:plain

もしくは、新規会員登録が成功したら、ログイン画面に遷移させて
ログインを行うという方法もあります。

ゲーム終了後はログアウトする処理も行ってくださいね🌟

上記どちらかを実行するとエラーが消えます💑

まとめ

一般的なアプリは大体、新規登録後そのまま利用できるため、
新規登録処理でセッションが払い出されていると勘違いしてしまいました。
今回のエラーを通してセッションを払い出すにはログイン処理の実装が必要だということがわかりました☝
同時に、どのアプリも裏側で処理をしてくれているということも学習しました!

このブログでもし解決できなければ ユーザーコミュニティでご質問ください!

▼ニフクラ mobile backend | ユーザーコミュニティ https://github.com/NIFCLOUD-mbaas/UserCommunity/labels/Unity

f:id:mbaasblog:20181005111552p:plain

伊藤みなみ

mobile backend企画担当。2018年4月、富士通クラウドテクノロジーズに新卒で入社。大学は文系でプログラミングは全くの未経験ですが、日々勉強しております!