Cocos専用now.ggログインモジュールを使えば、Cocosプラットフォーム上のアプリ/ゲームにnow.ggログインを実装することができます。
now.ggログインを統合する方法は以下の通りです。
注意:プロジェクトのAndroid SDKの最小バージョンはバージョン19以下であってはなりません。
Cocos専用now.ggログインモジュールはダウンロードパッケージ (nowgg_sdk_cocos-1.2.6.2001.zip
) に含まれています。
now.ggログインを自身のCocosプロジェクトに追加するには、以下の手順に従ってください。
ログインモジュールがインポートされたら、必要な依存関係をプロジェクトに追加します。
if(ANDROID)
セクションに以下のコードを追加します。
list(APPEND GAME_HEADER proj.android/app/jni/nowggsdk/include/nowgg_sdk.h )
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)
gradle.properties
fileに以下の行を追加します。
android.useAndroidX=true
HelloWorldScene.h
クラスを見つけます。
#include "../proj.android/app/jni/nowggsdk/include/nowgg_sdk.h"
class HelloWorld : public cocos2d::Scene, public nowgg::NowGGSDKListener
HelloWorldScene.h
クラスに以下の仮想関数を追加します。
private: virtual void onLoginSuccess(string email, string token, string hostUrl) override; virtual void onLoginFailed(int code, string errorMsg) override;
※「HelloWorldScene.cpp」にて上記の仮想関数の定義を追加してください。
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ログインを開始するには、以下の2つのフローのいずれかを使用します。
このフローを使用すると、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>"); }
このフローを使うと、now.ggログインを実装し、詳細なユーザー情報とセッション情報を取得することができます。
これは、token
とrefresh_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
が取得できます。このトークンを使ってユーザープロファイル情報を取得することができます。
サインインしたユーザのユーザープロファイルを取得するには、バックエンドサーバーを使用することをお勧めします。しかし、自身のアプリにバックエンドサーバーがない場合は、以下のセクションを使用してユーザープロファイル情報を取得することができます。
重要な情報
サンプル実装を参照して、「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
を取得できます。高度なログインフロー
token
とrefresh_token
を取得します。
注意:
1. トークンの生成とトークンの更新
認証コードを取得したら、アプリのバックエンドサーバーに送信し、Generate Tokens APIを使用してこのコードをnow.ggサーバーと交換し、token
とrefresh_token
を取得します。
token
を使用して、now.gg API(ユーザー情報とセッション情報)を呼び出します。token
の有効期限が切れた場合、新しいトークンを取得するためにrefresh_token
を保存します。2. トークンを使用してユーザー情報とセッション情報を取得
トークンを取得したら、それを使ってユーザー情報とセッション情報を取得します。
3. トークンの更新
token
の有効期限が切れている場合は、Generate Tokens APIを使用してrefresh_token
を生成します。
ダウンロードパッケージにはサンプルプロジェクトも含まれています。このプロジェクトを参照することで、now.ggのログインフローを理解することができます。
サンプルプロジェクトはcocosSDKSample
ディレクトリに含まれています。
ユーザーアカウントサービス
ユーザーアカウントサービス
ドキュメント改訂版 1.0