
マイケル
みなさんこんばんは!
マイケルです!
マイケルです!

エレキベア
こんばんクマ〜〜〜

マイケル
今日はニフクラ mobile backendを使って
ランキング機能を実装してみるよ!
ランキング機能を実装してみるよ!

エレキベア
この始まり前回も聞いたようなクマ・・・
PlayFabはどうしたクマ??
PlayFabはどうしたクマ??

マイケル
PlayFabはやめてニフクラを使うことにしました・・・

エレキベア
ええ・・・・

マイケル
理由はとしては、「PlayFabはログインしないとランキング機能が使えない」ため!
Webへの公開も考えていたから、ユーザを作成しなくても自由にランキング登録ができるニフクラの方が無駄なリソースを使わずに済むと思ったんだ!
Webへの公開も考えていたから、ユーザを作成しなくても自由にランキング登録ができるニフクラの方が無駄なリソースを使わずに済むと思ったんだ!

エレキベア
それなら仕方なさそうクマね・・・

マイケル
とはいえ、ニフクラだとマジで爆速で実装できたから、
今日はその手順を紹介するぜ!
今日はその手順を紹介するぜ!

エレキベア
楽しみクマ〜〜〜
ニフクラの導入

マイケル
基本的には公式の手順に沿って準備すればOKです!
クイックスタート | ニフクラ mobile backend

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

マイケル
それでも説明します!

エレキベア
(いらんくだりだったクマ・・・)
ユーザ、アプリの作成

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


エレキベア
(怪しい商売みたいクマ・・・)

マイケル
ログインまでできたら、
画面左上の「+新しいアプリ」からアプリ情報を作成しましょう!
画面左上の「+新しいアプリ」からアプリ情報を作成しましょう!



マイケル
作成後に表示される
・アプリケーションキー
・クライアントキー
はUnity側の設定で使用するため、メモしておきましょう!
・アプリケーションキー
・クライアントキー
はUnity側の設定で使用するため、メモしておきましょう!

エレキベア
ばっちりクマ〜〜〜〜
Unity SDKの導入

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


マイケル
インポートしたら「Assets/Prefabs/NCMBSettings.prefab」に
先ほど取得したアプリケーションキー、クライアントキーを入力します!
先ほど取得したアプリケーションキー、クライアントキーを入力します!


エレキベア
ばっちり設定したクマ〜〜〜

マイケル
そしてNCMBとの連携には
・Assets/Prefabs/NCMBSettings.prefab
・Assets/Prefabs/NCMBManager.prefab
が必要なため、これら2つをシーンビューに配置しておきましょう!
・Assets/Prefabs/NCMBSettings.prefab
・Assets/Prefabs/NCMBManager.prefab
が必要なため、これら2つをシーンビューに配置しておきましょう!


エレキベア
ドラッグアンドドロップクマね

マイケル
以上で準備は完了です!!

エレキベア
余裕だったクマね
ランキング機能の実装

マイケル
準備ができたところでランキング機能を実装していきましょう!
レコード情報の登録

マイケル
レコードの登録処理については
テーブル名を指定したNCMBObjectに各項目に値を設定してSaveAsyncを呼び出すだけ!
するとニフクラ管理画面でもテーブル、レコードの両方が作成されていることが確認できるはずです!
テーブル名を指定したNCMBObjectに各項目に値を設定してSaveAsyncを呼び出すだけ!
するとニフクラ管理画面でもテーブル、レコードの両方が作成されていることが確認できるはずです!
var test = new NCMBObject("Test");
test["position"] = "test!!";
test.SaveAsync((NCMBException e) =>
{
if (e != null)
{
// エラー発生時
}
else
{
// 成功時
}
});
↑レコード登録処理

エレキベア
PlayFabでの苦労はなんだったんだクマ・・・

マイケル
この時、渡した値の型で保存されることには注意しましょう!
スコアのような数値の場合には、数値型で渡さなければなりません!
スコアのような数値の場合には、数値型で渡さなければなりません!
レコード情報の取得

マイケル
そしてレコードの取得処理についても簡単で、
下記のようにクエリを指定してFindAsyncを呼び出すだけ!
NCMBObjectのリストとして返却されます!
下記のようにクエリを指定して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ビルドエラーの解消についてメモしておきます!
iOSビルドエラーの解消についてメモしておきます!
CocoaPodsのバージョンアップ

マイケル
Unityでのビルド時に、下記のようなエラーが出た場合には
CocoaPodsのバージョンアップが必要です!
今回の場合は「requires CocoaPods version `>= 1.10.2`」とエラーが出ているので、
1.10.2以上に更新する必要があります。
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を追加しましょう!
UnityFramework -> Generalから
AuthenticationServices.frameworkを追加しましょう!


マイケル
以上でXcodeもビルドが通るようになるはずです!

エレキベア
やったクマ〜〜〜

マイケル
補足として、UnityのEditorフォルダ配下に、
下記のようにPostBuild処理でXCodeプロジェクトを編集するように記述すると
手動で追加する手間を省くことができます。
下記のように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の編集処理等は
覚えておいて損はないので、手動で追加している方はぜひ実装してみましょう!
覚えておいて損はないので、手動で追加している方はぜひ実装してみましょう!

エレキベア
確かに便利クマ〜〜〜
おわりに

マイケル
というわけで、以上を使って実装しなおしたのが下記になるよ!
ゲーム後にランキング登録するパターンだね!
ゲーム後にランキング登録するパターンだね!


エレキベア
よくあるパターンクマね
それにしてもここまで簡単だとは思ってなかったクマ
それにしてもここまで簡単だとは思ってなかったクマ

マイケル
モバイルゲーム機能が豊富なのはPlayFabかもしれないけど、
シンプルなゲームならニフクラで充分かもしれないね!
シンプルなゲームならニフクラで充分かもしれないね!

マイケル
便利なものはこれからもどんどん使っていこう!
それでは今日はこの辺で!アデューー!!
それでは今日はこの辺で!アデューー!!

エレキベア
クマ〜〜〜〜〜
【Unity】ニフクラ mobile backendでランキング機能を爆速で実装する【mBaaS】 〜完〜
※↓ニフクラとAdmobの競合解消についてはこちら!
コメント