カスタムWebログインの実装
このガイドでは、Hive Platformが提供するWebログインページの代わりに、HiveサーバーAPIを使用してWebログインを直接実装する方法を説明します。独自のログインUIを構築し、IdP認証を自分で処理する場合に参照してください。
Note
カスタムWebログインAPIを利用するには、Hiveコンソールでアプリの登録とhive_certification_keyの発行を完了する必要があります。
概要
次のような場合に、カスタムWebログインを使用します。
- 独自のログインUI/UXを適用する場合
- 既存のWebサイトのデザインに合わせたログイン画面を実装する場合
- Webログインページにリダイレクトせず、自分のページ内でログインを処理する場合
API一覧
| APIエンドポイント | 説明 |
POST /game/auth/signinidp | IdPログイン |
POST /game/auth/connect | IdP連携 |
POST /game/auth/disconnect | IdP連携の解除 |
POST /game/player/delete | アカウント削除 |
共通リクエストヘッダー
| ヘッダー名 | 型 | 必須 | 説明 |
| Content-Type | String | Y | application/json固定 |
| Authorization | String | YまたはN | セッショントークン。トークン検証が必要なAPIでは必須、それ以外では任意 |
| ISCRYPT | Integer | Y | 暗号化を使用するかどうか。0固定 |
共通レスポンスヘッダー
| ヘッダー名 | 型 | 説明 |
| Authorization | String | 新しく発行されたセッショントークン。IdPログインリクエストでrequire_token: trueを設定した場合のみ発行 |
| ISCRYPT | Integer | レスポンスが暗号化されているかどうか |
共通レスポンス形式
成功レスポンス
{
"result_code": 0,
"result_msg": "SUCCESS",
"data": { }
}
失敗レスポンス
{
"result_code": 4000,
"result_msg": "Request has invalid format.",
"data": null
}
IdPログイン
IdP情報を使用して新しいプレイヤーを作成します。IdPがすでに登録されている場合は、既存のプレイヤー情報を返します。ログインに成功すると、data.player_idでPlayerIDを確認できます。
Warning
カスタムWebログインAPIでは、ゲスト(GUEST、idp_index: 0)アカウントの作成をサポートしていません。
Note
アカウント削除APIを利用する場合は、require_tokenをtrueに設定して、レスポンスヘッダーでAuthorizationの値を受け取ってください。アカウント削除機能を利用しない場合は、falseに設定できます。
リクエストURL
| 環境 | URL |
| 本番 | https://auth.qpyou.cn/game/auth/signinidp |
| サンドボックス | https://sandbox-auth.qpyou.cn/game/auth/signinidp |
| HTTPメソッド | POST |
| Content-Type | application/json |
リクエストボディ
| フィールド名 | 型 | 説明 | 必須 |
| appid | String | ゲームのアプリID(AppID) | Y |
| idp_index | Integer | IdPインデックスコード。IdPコード定義を参照 | Y |
| idp_user_id | String | IdPユーザーの一意の識別子 | Y |
| hive_certification_key | String | Hive認証キー | Y |
| require_token | Boolean | プレイヤートークンを要求するかどうか。アカウント削除APIを利用する場合はtrue、それ以外はfalseに設定 | Y |
リクエストボディの例
{
"appid": "com.com2us.example",
"idp_index": 3,
"idp_user_id": "google_67890",
"hive_certification_key": "your_certification_key",
"require_token": true
}
レスポンスヘッダー
| フィールド名 | 型 | 説明 |
| Content-Type | String | レスポンスデータ形式(JSON)と文字エンコーディング(UTF-8)の情報 |
| Authorization | String | セッショントークン |
レスポンスヘッダーの例
HTTP/1.1 200
Content-Type: application/json; charset=UTF-8
Authorization: abcdf7ebce779429ea878f91d5f1c8
Iscrypt: 0
レスポンスボディ
| フィールド名 | 型 | 説明 |
| result_code | Integer | 結果コード。0は成功を示す |
| result_msg | String | 結果メッセージ |
| data.player_id | Integer | PlayerID |
| data.idp_index | Integer | IdPインデックス |
| data.idp_id | String | IdP名 |
| data.idp_user_id | String | IdPユーザーID |
レスポンスボディの例(成功)
{
"result_code": 0,
"result_msg": "SUCCESS",
"data": {
"player_id": 100000002,
"idp_index": 3,
"idp_id": "GOOGLE",
"idp_user_id": "google_67890"
}
}
レスポンスボディの例(失敗)
{
"result_code": 4002,
"result_msg": "Invalid certfication key"
}
エラーコード
| コード | 説明 | 備考 |
| 4002 | 認証キーエラー | |
| 4200 | IdPが存在しない | |
| 5000 | データベースエラー | |
IdP連携
既存のプレイヤーアカウントに新しいIdPを連携します。IdPログインAPIでログインした後に、このAPIを呼び出す必要があります。
リクエストURL
| 環境 | URL |
| 本番 | https://auth.qpyou.cn/game/auth/connect |
| サンドボックス | https://sandbox-auth.qpyou.cn/game/auth/connect |
| HTTPメソッド | POST |
| Content-Type | application/json |
リクエストボディ
| フィールド名 | 型 | 説明 | 必須 |
| appid | String | ゲームのアプリID(AppID) | Y |
| idp_index | Integer | IdPインデックスコード。IdPコード定義を参照 | Y |
| idp_user_id | String | IdPユーザーの一意の識別子 | Y |
| player_id | Integer | 連携するPlayerID | Y |
| hive_certification_key | String | Hive認証キー | Y |
リクエストボディの例
{
"appid": "com.com2us.example",
"idp_index": 2,
"idp_user_id": "fb_12345678",
"player_id": 100000001,
"hive_certification_key": "your_certification_key"
}
レスポンスボディ
| フィールド名 | 型 | 説明 |
| result_code | Integer | 結果コード。0は成功を示す |
| result_msg | String | 結果メッセージ |
| data.player_id | Integer | PlayerID |
| data.idp_index | Integer | 連携したIdPのインデックス |
| data.idp_id | String | 連携したIdP名 |
| data.idp_user_id | String | IdPユーザーID |
レスポンスボディの例(成功)
{
"result_code": 0,
"result_msg": "SUCCESS",
"data": {
"player_id": 100000001,
"idp_index": 2,
"idp_id": "FACEBOOK",
"idp_user_id": "fb_12345678"
}
}
レスポンスボディの例(別のプレイヤーと連携済み)
{
"result_code": 1002,
"result_msg": "Already connected other player",
"data": {
"player_id": 100000002,
"idp_index": 2,
"idp_id": "FACEBOOK",
"idp_user_id": "fb_12345678"
}
}
エラーコード
| コード | 説明 | 備考 |
| 1002 | このIdPは別のプレイヤーと連携済み | |
| 1003 | 同じ種類のIdPが連携済み | |
| 2002 | プレイヤーが存在しない | |
| 4002 | 認証キーエラー | |
| 4200 | IdPが存在しない | |
| 5000 | データベースエラー | |
IdP連携の解除
プレイヤーアカウントに連携されているIdPの連携を解除します。IdPログインAPIでログインした後に、このAPIを呼び出す必要があります。
リクエストURL
| 環境 | URL |
| 本番 | https://auth.qpyou.cn/game/auth/disconnect |
| サンドボックス | https://sandbox-auth.qpyou.cn/game/auth/disconnect |
| HTTPメソッド | POST |
| Content-Type | application/json |
リクエストボディ
| フィールド名 | 型 | 説明 | 必須 |
| appid | String | ゲームのアプリID(AppID) | Y |
| idp_index | Integer | IdPインデックスコード。IdPコード定義を参照 | Y |
| idp_user_id | String | IdPユーザーの一意の識別子 | Y |
| player_id | Integer | PlayerID | Y |
| hive_certification_key | String | Hive認証キー | Y |
リクエストボディの例
{
"appid": "com.com2us.example",
"idp_index": 2,
"idp_user_id": "fb_12345678",
"player_id": 100000001,
"hive_certification_key": "your_certification_key"
}
レスポンスボディ
| フィールド名 | 型 | 説明 |
| result_code | Integer | 結果コード。0は成功を示す |
| result_msg | String | 結果メッセージ |
レスポンスボディの例(成功)
{
"result_code": 0,
"result_msg": "SUCCESS"
}
レスポンスボディの例(失敗)
{
"result_code": 4002,
"result_msg": "Invalid certfication key"
}
エラーコード
| コード | 説明 | 備考 |
| 4002 | 認証キーエラー | |
| 4006 | 連携済みのIdP情報がない | |
| 4200 | IdPが存在しない | |
| 7000 | 無効なトークン | |
アカウント削除
プレイヤーアカウントを削除します。IdPログインAPIでログインした後に、このAPIを呼び出す必要があります。
このAPIではトークン検証が必要なため、事前に次の手順を完了してください。
- IdPログインAPIを呼び出す際に、
require_tokenをtrueに設定します。 - IdPログインAPIのレスポンスヘッダーで返される
Authorizationの値を保存します。 - このAPIを呼び出す際に、保存した
Authorizationの値をリクエストヘッダーに含めます。
Warning
アカウントの削除は取り消せません。削除する前に、ユーザーに十分に案内してください。
リクエストURL
| 環境 | URL |
| 本番 | https://auth.qpyou.cn/game/player/delete |
| サンドボックス | https://sandbox-auth.qpyou.cn/game/player/delete |
| HTTPメソッド | POST |
| Content-Type | application/json |
リクエストヘッダー
| ヘッダー名 | 型 | 説明 | 必須 |
| Authorization | String | IdPログインの呼び出し時にrequire_token: trueを設定すると、レスポンスヘッダーで返されるセッショントークン | Y |
リクエストボディ
| フィールド名 | 型 | 説明 | 必須 |
| appid | String | ゲームのアプリID(AppID) | Y |
| player_id | Integer | 削除するPlayerID | Y |
| did | Integer | DID(Instance ID)。0固定 | Y |
| hive_certification_key | String | Hive認証キー | Y |
リクエストボディの例
{
"appid": "com.com2us.example",
"player_id": 100000001,
"did": 0,
"hive_certification_key": "your_certification_key"
}
レスポンスボディ
| フィールド名 | 型 | 説明 |
| result_code | Integer | 結果コード。0は成功を示す |
| result_msg | String | 結果メッセージ |
レスポンスボディの例(成功)
{
"result_code": 0,
"result_msg": "SUCCESS"
}
レスポンスボディの例(失敗)
{
"result_code": 7000,
"result_msg": "Invalid token."
}
エラーコード
| コード | 説明 | 備考 |
| 4002 | 認証キーエラー | |
| 7000 | 無効なトークン | |
| 7001 | ヘッダーにトークンがない | |
IdPコード定義
標準IdP
| コード | IDP_ID | 説明 |
| 0 | GUEST | ゲスト |
| 1 | HIVE | メンバーシップアカウント |
| 2 | FACEBOOK | Facebook |
| 3 | GOOGLE | Google |
| 4 | QQ | QQ |
| 5 | WEIBO | Weibo |
| 6 | VK | VK |
| 7 | WECHAT | WeChat |
| 8 | APPLE | Apple Game Center |
| 9 | SIGNIN_APPLE | Sign in with Apple |
| 10 | LINE | LINE |
| 11 | TWITTER | Twitter |
| 12 | WEVERSE | Weverse |
| 13 | NAVER | Naver |
| 14 | GOOGLE_PLAY_GAMES | Google Play Games |
| 15 | HUAWEI | Huawei |
| 16 | FUNTAP | Funtap |
| 18 | STEAM | Steam |
| 19 | X | X(旧Twitter) |
| 20 | TELEGRAM | Telegram |
| 21 | XIAOMI | Xiaomi |
| 22 | OPPO | OPPO |
| 23 | VIVO | VIVO |
カスタムIdP
| コード | IDP_ID | 説明 |
| 1100 | CUSTOM_GAME | ゲーム会社が提供するIdP |