Cocos専用ログイン

Cocos専用now.ggログインモジュールを使えば、Cocosプラットフォーム上のアプリ/ゲームにnow.ggログインを実装することができます。

now.ggログインを統合する方法は以下の通りです。

  1. Cocos専用now.ggログインモジュールをダウンロードしてインポートします。
  2. 必要な依存関係を追加します。
  3. 自身のプロジェクトにnow.ggログインプラグインを実装します。

注意:プロジェクトのAndroid SDKの最小バージョンはバージョン19以下であってはなりません。

モジュールのダウンロードとインポート

Cocos専用now.ggログインモジュールはダウンロードパッケージ (nowgg_sdk_cocos-1.2.6.2001.zip) に含まれています。

now.ggログインを自身のCocosプロジェクトに追加するには、以下の手順に従ってください。

  1. Cocos専用ログインモジュールの最新版を含むパッケージをダウンロードします。
  2. パッケージをダウンロードしたら、ログインモジュールをプロジェクトにインポートします。手順は以下の通りです。
    • ダウンロードパッケージからnowggsdkディレクトリをproj.android > app > jniディレクトリにコピーします。
    • cocos_nowgg
    • 以下のように、ダウンロードパッケージからlibsディレクトリをproj.android > appディレクトリにコピーします。
    • cocos_nowgg

依存関係の追加

ログインモジュールがインポートされたら、必要な依存関係をプロジェクトに追加します。

  1. プロジェクトのルートディレクトリにある CMakeLists.txt ファイルを見つけます。
    • CMakeLists.txtファイルのif(ANDROID)セクションに以下のコードを追加します。
      list(APPEND GAME_HEADER
            proj.android/app/jni/nowggsdk/include/nowgg_sdk.h
            )
      
    • 次に、CMakeLists.txtファイルのif(ANDROID)セクションに以下のコードを追加して、nowggsdkをプロジェクトに追加します。
      add_library(nowggsdk STATIC IMPORTED)
       set_target_properties(nowggsdk PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/proj.android/app/jni/nowggsdk/${ANDROID_ABI}/libnowggsdk.a)
       target_link_libraries(${APP_NAME} nowggsdk)
    • 最後に、proj.androidディレクトリにあるgradle.propertiesfileに以下の行を追加します。
      android.useAndroidX=true
      
  2. ダウンロードパッケージのcocosSDKsample > classesディレクトリに移動して、HelloWorldScene.hクラスを見つけます。
    • Include now.gg_sdk.h
      #include "../proj.android/app/jni/nowggsdk/include/nowgg_sdk.h" 
      
    • Inherit public nowgg::NowGGSDKListener
      class HelloWorld : public cocos2d::Scene, public nowgg::NowGGSDKListener
      
  3. 次に、HelloWorldScene.h クラスに以下の仮想関数を追加します。
    private:
         virtual void onLoginSuccess(string email, string token, string hostUrl) override;
         virtual void onLoginFailed(int code, string errorMsg) override;
    

    「HelloWorldScene.cpp」にて上記の仮想関数の定義を追加してください。

  4. proj.android>appディレクトリにあるbuild.gradleファイルに以下の依存関係を追加します。
    dependencies {
         implementation (files("libs/billingclient.aar"))
         implementation (files("libs/nowggsdk.aar"))
         implementation 'androidx.appcompat:appcompat:1.4.1'
         api 'com.google.code.gson:gson:2.8.6'
         implementation 'com.squareup.retrofit2:retrofit:2.9.0'
         implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
         implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
         implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
     }
    

now.ggログインの実装

ログインモジュールがインポートされ、依存関係が追加されたら、アプリ/ゲームにnow.ggログインを実装します。

now.ggログインを開始するには、以下の2つのフローのいずれかを使用します。

1. 基本的なログインフロー

このフローを使用すると、now.ggログインを実装し、ユーザーの基本プロファイル情報を取得することができます。

フローを開始するには、以下のようにclient_idを指定してlogin関数を呼び出します:

NowGGSDK::login(<client id from nowgg Studio>);

※now.ggログインに関するレスポンスは、OnLoginSuccessコールバック関数とOnLoginFailedコールバック関数を使用して受け取ることができます。
ログインの成功

ユーザーがサインインに成功すると、OnLoginSuccessコールバック関数で要求されたトークンとユーザーのメールアドレスを取得します。

void HelloWorld::onLoginSuccess(string email, string token, string hostUrl) {
     __android_log_print(ANDROID_LOG_DEBUG, "TAG", "HelloWorld::onLoginSuccess called : %s : %s \n", email.c_str(), token.c_str());
      VerifyToken(token, "<client-id from nowgg developer portal>");
 }

2. 高度なログインフロー

このフローを使うと、now.ggログインを実装し、詳細なユーザー情報とセッション情報を取得することができます。

これは、tokenrefresh_tokenを生成するために認証コードを使用するより安全なフローです。

以下のように、client_idとコードを追加パラメータとして使用して、NowGGSDKクラスの login 関数を呼び出します。

NowGGSDK::login(<client id from NowGG developer portal>, “code”);
ログインの成功

ユーザーがサインインに成功すると、OnLoginSuccessコールバック関数のtokenパラメータに要求された認証コードとユーザーのメールアドレスが取得されます。

void HelloWorld::onLoginSuccess(string email, string token, string hostUrl) {
    __android_log_print(ANDROID_LOG_DEBUG, "TAG", "HelloWorld::onLoginSuccess called : %s : %s \n", email.c_str(), token.c_str());
    }

ログインの失敗

このセクションでは、ログインに失敗するシナリオを示します。基本的なログインフローと高度なログインフローの両方に適用できます。

ログインに失敗すると、OnLoginFailedコールバック関数にエラーコードとエラーメッセージが表示されます。受信したエラーメッセージに基づいて、このエラーをさらに調査できます。

No nowGG account present

No nowGG account present(nowGGアカウントが存在しません)」というエラーでログインに失敗した場合は、以下のようにNowGGSDKクラスのaddNowGGGAccount関数を呼び出して、実行時にアカウントを追加することができます。

void HelloWorld::onLoginFailed(int code, string errorMsg) {
     __android_log_print(ANDROID_LOG_DEBUG, "TAG", "HelloWorld::onLoginFailed called : %d : %s \n", code, errorMsg.c_str());
     NowGGSDK::addNowGGAccount();
 }

プロフィール情報の使い方|基本的なログインの流れ

サインインに成功すると、tokenが取得できます。このトークンを使ってユーザープロファイル情報を取得することができます。

サインインしたユーザのユーザープロファイルを取得するには、バックエンドサーバーを使用することをお勧めします。しかし、自身のアプリにバックエンドサーバーがない場合は、以下のセクションを使用してユーザープロファイル情報を取得することができます。

重要な情報

  • 現在サインインしているユーザーをアプリのバックエンドサーバーに伝えるために、ユーザーのメールアドレスやユーザーIDを使用しないでください。
  • 代わりに、ユーザのIDトークンをバックエンドサーバに送信し、サーバ上でトークンを検証してください。

プロファイル情報の取得

サンプル実装を参照して、「on-device」APIコールを使用してログインユーザーのプロファイル情報を取得することができます。例えば、サインインしたユーザーのuserIdを含むユーザープロファイル情報を取得するには、VerifyToken関数を呼び出します。レスポンスとして、デコードされたユーザーのデータが返されます。

以下のコードは、この実装を示しています:

void HelloWorld::VerifyToken(string token, string client_id) {
     __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyToken called : %s \n", token.c_str());

     cocos2d::network::HttpRequest * request = new cocos2d::network::HttpRequest();
     request - > setUrl("https://now.gg/accounts/oauth2/v1/verify-token");
     std::vector < std::string > headers;
     headers.push_back("Content-Type:application/x-www-form-urlencoded");
     request - > setHeaders(headers);
     request - > setRequestType(cocos2d::network::HttpRequest::Type::POST);
     request - > setResponseCallback([ & , this](network::HttpClient * sender, network::HttpResponse * response) {
         if (!response - > isSucceed()) {
             __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyToken failed \n");
             return;
         }
         __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyToken success \n");
         std::vector < char > * buffer = response - > getResponseData();

         char * json = (char * ) malloc(buffer - > size() + 1);
         std::string s2(buffer - > begin(), buffer - > end());
         strcpy(json, s2.c_str());
         __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyToken response: %s \n", json);
     });

     string data = "token_type=id_token&token=" + token + "&client_id=<your client-id>";
     __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyToken data:%s \n", data.c_str());
     request - > setRequestData(data.c_str(), strlen(data.c_str()));
     cocos2d::network::HttpClient::getInstance() - > send(request);
     request - > release();
 }

ユーザー情報を取得したら、その情報をアプリのデータベースに保存し、次回ユーザーがアプリを起動したときにログインプロセスをスキップするために使用します。

注意:

  • ユーザーを識別するためにメールアドレスを使用しないことをお勧めします。代わりにuserIdを使用してください。
  • アプリにバックエンドサーバーがある場合は、verify token APIを呼び出し、デコードされたユーザーデータを含むレスポンスとしてuserIdを取得できます。

ユーザー情報とセッション情報の取得|高度なログインフロー

高度なログインフロー

  • アプリは、認証コードをアプリのバックエンドサーバーに送信することで、クライアント側で認証を受けます。
  • アプリのバックエンドサーバーは認証コードを交換して、now.ggサーバーから独自のtokenrefresh_tokenを取得します。
    • これにより、アプリのバックエンドサーバーは、ユーザーがオフラインの間にnow.ggサーバーにAPIコールを行うことができます。

注意:

  • このより安全なログイン認証フローは、バックエンドサーバーを持つアプリにのみ適用されます。
  • アプリにバックエンドサーバーがない場合は、基本的なログインフローを続けることができます。

1. トークンの生成とトークンの更新

認証コードを取得したら、アプリのバックエンドサーバーに送信し、Generate Tokens APIを使用してこのコードをnow.ggサーバーと交換し、tokenrefresh_tokenを取得します。

  • tokenを使用して、now.gg API(ユーザー情報とセッション情報)を呼び出します。
  • tokenの有効期限が切れた場合、新しいトークンを取得するためにrefresh_tokenを保存します。

2. トークンを使用してユーザー情報とセッション情報を取得

トークンを取得したら、それを使ってユーザー情報とセッション情報を取得します。

  • ユーザー情報を取得するには、UserInfo APIを使用します。
  • セッション情報を取得するには、SessionInfo APIを使用します。

3. トークンの更新

tokenの有効期限が切れている場合は、Generate Tokens APIを使用してrefresh_tokenを生成します。

サンプルプロジェクト

ダウンロードパッケージにはサンプルプロジェクトも含まれています。このプロジェクトを参照することで、now.ggのログインフローを理解することができます。

サンプルプロジェクトはcocosSDKSampleディレクトリに含まれています。

×
テキストがクリップボードにコピーされました。
copyLinkText
ご不明な点がございましたら、お気軽にお問い合わせください。 dev-support@now.gg