【Unity】ニフクラ mobile backendでランキング機能を爆速で実装する【mBaaS】

Unity
マイケル
マイケル
みなさんこんばんは!
マイケルです!
エレキベア
エレキベア
こんばんクマ〜〜〜
マイケル
マイケル
今日はニフクラ mobile backendを使って
ランキング機能を実装してみるよ!
エレキベア
エレキベア
この始まり前回も聞いたようなクマ・・・
PlayFabはどうしたクマ??
マイケル
マイケル
PlayFabはやめてニフクラを使うことにしました・・・
エレキベア
エレキベア
ええ・・・・
マイケル
マイケル
理由はとしては、「PlayFabはログインしないとランキング機能が使えない」ため!
Webへの公開も考えていたから、ユーザを作成しなくても自由にランキング登録ができるニフクラの方が無駄なリソースを使わずに済むと思ったんだ!
エレキベア
エレキベア
それなら仕方なさそうクマね・・・
マイケル
マイケル
とはいえ、ニフクラだとマジで爆速で実装できたから、
今日はその手順を紹介するぜ!
エレキベア
エレキベア
楽しみクマ〜〜〜

スポンサーリンク

ニフクラの導入

マイケル
マイケル
基本的には公式の手順に沿って準備すればOKです!

クイックスタート | ニフクラ mobile backend

エレキベア
エレキベア
この記事を読む必要はないクマね


〜完〜

マイケル
マイケル
それでも説明します!
エレキベア
エレキベア
(いらんくだりだったクマ・・・)

ユーザ、アプリの作成

マイケル
マイケル
まずはユーザを作成しましょう!
下記サイトの今すぐ無料登録をクリック!
ScreenShot 2022 03 15 21 53 57

ニフクラ mobile backend

エレキベア
エレキベア
(怪しい商売みたいクマ・・・)
マイケル
マイケル
ログインまでできたら、
画面左上の「+新しいアプリ」からアプリ情報を作成しましょう!
ScreenShot 2022 03 15 22 00 52
ScreenShot 2022 03 15 22 00 53↑アプリ作成後の表示
マイケル
マイケル
作成後に表示される
・アプリケーションキー
・クライアントキー

はUnity側の設定で使用するため、メモしておきましょう!
エレキベア
エレキベア
ばっちりクマ〜〜〜〜

Unity SDKの導入

マイケル
マイケル
次はSDKをUnityにインストールします!
下記GitHubからダウンロードしてUnityへインポートしましょう!

Releases · NIFCLOUD-mbaas/ncmb_unity

ScreenShot 2022 03 15 22 00 54↑Unityへのインポート
マイケル
マイケル
インポートしたら「Assets/Prefabs/NCMBSettings.prefab」
先ほど取得したアプリケーションキー、クライアントキーを入力します!
ScreenShot 2022 03 15 22 00 55↑キーの入力
エレキベア
エレキベア
ばっちり設定したクマ〜〜〜
マイケル
マイケル
そしてNCMBとの連携には

・Assets/Prefabs/NCMBSettings.prefab
・Assets/Prefabs/NCMBManager.prefab

が必要なため、これら2つをシーンビューに配置しておきましょう!
ScreenShot 2022 03 15 22 00 56
エレキベア
エレキベア
ドラッグアンドドロップクマね
マイケル
マイケル
以上で準備は完了です!!
エレキベア
エレキベア
余裕だったクマね

ランキング機能の実装

マイケル
マイケル
準備ができたところでランキング機能を実装していきましょう!

レコード情報の登録

マイケル
マイケル
レコードの登録処理については
テーブル名を指定したNCMBObjectに各項目に値を設定してSaveAsyncを呼び出すだけ!
するとニフクラ管理画面でもテーブル、レコードの両方が作成されていることが確認できるはずです!
            var test = new NCMBObject("Test");
            test["position"] = "test!!";
            test.SaveAsync((NCMBException e) =>
            {
                if (e != null)
                {
                    // エラー発生時
                }
                else
                {
                // 成功時
                }
            });
↑レコード登録処理
ScreenShot 2022 03 15 22 00 57↑テーブルとレコードが作成されている
エレキベア
エレキベア
PlayFabでの苦労はなんだったんだクマ・・・
マイケル
マイケル
この時、渡した値の型で保存されることには注意しましょう!
スコアのような数値の場合には、数値型で渡さなければなりません!

レコード情報の取得

マイケル
マイケル
そしてレコードの取得処理についても簡単で、
下記のようにクエリを指定してFindAsyncを呼び出すだけ!
NCMBObjectのリストとして返却されます!
            var query = new NCMBQuery<NCMBObject>("【テーブル名】");
            query.OrderByDescending("【項目名】"); // 値降順
            query.Limit = 100; // 取得件数
            query.FindAsync((List<NCMBObject> ncmbObjList, NCMBException e) =>
            {
                // エラー発生時
                if (e != null)
                {
                    // エラー発生時
                }
                else
                {
                    // 成功時
                    // 情報取得例
                    for (var i = 0; i < ncmbObjList.Count; i++)
                    {
                        var ncmbObj = ncmbObjList[i];
                        var value = Convert.ToString(ncmbObj["【項目名】"])
                    }
                }
          }
↑レコード取得処理
エレキベア
エレキベア
SQLのような使い方ができるクマね
マイケル
マイケル
NCMBQueryにはいろんなオプションを追加できるから、
詳しくは公式ドキュメントを見てみよう!

NCMB Unity SDK Library Project
NCMB.NCMBQuery< T >

エレキベア
エレキベア
シンプルで使いやすいクマ〜〜〜

補足:iOSビルドのエラー解消

マイケル
マイケル
最後に、ニフクラをUnityに導入した場合に発生した
iOSビルドエラーの解消についてメモしておきます!

CocoaPodsのバージョンアップ

マイケル
マイケル
Unityでのビルド時に、下記のようなエラーが出た場合には
CocoaPodsのバージョンアップが必要です!
今回の場合は「requires CocoaPods version `>= 1.10.2`」とエラーが出ているので、
1.10.2以上に更新する必要があります。
iOS framework addition failed due to a CocoaPods installation failure. This will will likely result in an non-functional Xcode project.

After the failure, "pod repo update" was executed and succeeded. "pod install" was then attempted again, and still failed. This may be due to a broken CocoaPods installation. See: https://guides.cocoapods.org/using/troubleshooting.html for potential solutions.

pod install output:

Analyzing dependencies
Cloning spec repo `cocoapods` from `https://github.com/CocoaPods/Specs`
[!] `GoogleAppMeasurement` requires CocoaPods version `>= 1.10.2`, which is not satisfied by your current version, `1.10.1`.
↑Unityビルド時のエラー
マイケル
マイケル
そのためターミナルで下記コマンドを実行して
バージョンを更新しましょう。
// バージョン確認
% pod --version
1.10.1

// cocoapodsのバージョンアップ
// brew経由の場合には brew upgrade cocoa pods を実行
% sudo gem update cocoapods
...

// バージョンアップ後の確認
% pod --version            
1.11.3
マイケル
マイケル
これでビルドができるようになるはずです!
エレキベア
エレキベア
プラグインのバージョンに合わせる必要があるクマね

AuthenticationServices.frameworkの追加

マイケル
マイケル
そして次にXcodeでのビルド時に下記のようなエラーが出た場合です。
ld: warning: arm64 function not 4-byte aligned: _unwind_tester from /Users/molegoro/Desktop/ShootingiOS/Libraries/libiPhone-lib.a(unwind_test_arm64.o)
Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_ASAuthorizationController", referenced from:
      objc-class-ref in NCMBAppleAuth.o
  "_OBJC_CLASS_$_ASAuthorizationAppleIDProvider", referenced from:
      objc-class-ref in NCMBAppleAuth.o
  "_ASAuthorizationScopeEmail", referenced from:
      -[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
  "_ASAuthorizationScopeFullName", referenced from:
      -[NCMBAppleAuth loginWithAppleId:] in NCMBAppleAuth.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
エレキベア
エレキベア
まだエラーが出るクマか・・・
マイケル
マイケル
これはunityFrameworkが足りていないだけなので、
UnityFramework -> Generalから
AuthenticationServices.frameworkを追加しましょう!
20220330 03↑frameworkの追加
マイケル
マイケル
以上でXcodeもビルドが通るようになるはずです!
エレキベア
エレキベア
やったクマ〜〜〜
マイケル
マイケル
補足として、UnityのEditorフォルダ配下に、
下記のようにPostBuild処理でXCodeプロジェクトを編集するように記述すると
手動で追加する手間を省くことができます。
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEngine;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif
using System.IO;

namespace Editor
{
    /// <summary>
    /// ビルド後処理
    /// </summary>
    public class PostBuildProcessor : IPostprocessBuildWithReport
    {
        /// <summary>
        /// 実行順
        /// </summary>
        public int callbackOrder => 100;

        public void OnPostprocessBuild(BuildReport report)
        {
#if UNITY_IOS
            // pbxプロジェクトの読込
            var project = new PBXProject();
            var projectPath = PBXProject.GetPBXProjectPath(report.summary.outputPath);
            project.ReadFromString(File.ReadAllText(projectPath));
            
            // UnityFramework に AuthenticationServices.framework を追加
            var targetGuid = project.GetUnityFrameworkTargetGuid();
            project.AddFrameworkToProject(targetGuid, "AuthenticationServices.framework", false);
            File.WriteAllText(projectPath, project.WriteToString());
#endif
        }
    }
}
↑PostBuild時にframeworkを追加する
マイケル
マイケル
frameworkの追加やInfo.plistの編集処理等は
覚えておいて損はないので、手動で追加している方はぜひ実装してみましょう!
エレキベア
エレキベア
確かに便利クマ〜〜〜

おわりに

マイケル
マイケル
というわけで、以上を使って実装しなおしたのが下記になるよ!
ゲーム後にランキング登録するパターンだね!
ScreenShot 2022 03 15 22 38 31↑ランキング登録画面
エレキベア
エレキベア
よくあるパターンクマね
それにしてもここまで簡単だとは思ってなかったクマ
マイケル
マイケル
モバイルゲーム機能が豊富なのはPlayFabかもしれないけど、
シンプルなゲームならニフクラで充分かもしれないね!
マイケル
マイケル
便利なものはこれからもどんどん使っていこう!
それでは今日はこの辺で!アデューー!!
エレキベア
エレキベア
クマ〜〜〜〜〜

【Unity】ニフクラ mobile backendでランキング機能を爆速で実装する【mBaaS】 〜完〜

※↓ニフクラとAdmobの競合解消についてはこちら!

コメント