Cocos2d-xのWin32プロジェクトでFirebaseの匿名認証してみる

タイトルの通りですが、Win32上でも匿名認証が普通にできるので方法を紹介したいと思います。

前回書いた以下の記事でWin32のプロジェクトが設定済みの状態を想定します。

takachan.hatenablog.com

そして、以下のページにある「デスクトップ版の Firebase 構成ファイルを作成します。」の項目でAndroid用の「google-services.json」をダウンロードします。(FirebaseのプロジェクトにAndroidのアプリケーションを追加してダウンロードしてください)

firebase.google.com

で、その取得した、jsonファイルを自分のアプリの「Resources」フォルダのルートに移動します。

このjsonファイルがResourceフォルダのルートに無いと以下のエラーが発生します。

ERROR: Unable to load Firebase app options ([google-services-desktop.json, google-services.json] are missing or malformed)ERROR: Failed to load default options when attempting to populate missing fieldsERROR: App ID and API key must be specified in App options.

そして公式の匿名認証のページを参照して自分のコードに以下を記述します。(以下すごい適当なので終了のコールバックとかはリファレンスを見てちゃんと実装しましょうw

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include "platform\android\jni\JniHelper.h"

#endif

#include "FirebaseHelper.hpp"

#include "firebase\app.h"
#include "firebase\auth.h"

void TestScene::test_firebase()
{
    using namespace firebase;

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    App* app = App::Create(AppOptions(), JniHelper::getEnv(), JniHelper::getActivity());

//#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#else

    App* app = App::Create(firebase::AppOptions()); // iOSとWin32はコードが同じ!

#endif

    auth::Auth* auth = auth::Auth::GetAuth(app);
    Future<auth::User*> user = auth->SignInAnonymously();
}

VS上でこんな感じに見えると思います。

f:id:Takachan:20190905022130p:plain

で、このコードが最後まで実行されるとFirebaseのコンソールに以下のように匿名ログインが記録されます。

f:id:Takachan:20190905023214p:plain

jsonファイルを配置さえできれば普通に動きます。簡単すぎてヤバいです。

ただリファレンスに再三注意があるとおり

注意: Firebase C++ SDK デスクトップ サポートはベータ版の機能です。この機能は、公開対象のコードではなく、ゲーム開発中のワークフローで使用するためのものです。

使えるからってデスクトップに組み込んでリリースするのだけはやめましょう。将来的に正式版として対応してくれるのかな…?

参照サイト

前述のサイトのほかに以下サイトを参照させていただきました。ありがとうございます。

qiita.com

以上です。