Gamebaseでは基本的にゲストログインに対応しています。
ログインを試みるIdPごとにadditionalInfoのパラメーターを入力しなければならない場合があります。
AdditionalInfoに対する説明は下のGamebaseで対応しているIdPの説明をご参考ください。
ログインを設計するViewControllerに次のヘッダーファイルを持ってきます。
#import <Gamebase/Gamebase.h>
多くのゲームが、タイトル画面でログインを実装します。
上述したロジックは、次のような手順で設計することができます。
最後にログインしたIdPでログインを試みます。該当するログイントークンの期限が切れていたり、
トークン検証などに失敗した場合、失敗を返します。
この場合、該当するIdPに対するログインを設計する必要があります。
- (void)automaticLogin {
[TCGBGamebase loginForLastLoggedInProviderWithViewController:topViewController completion:^(TCGBAuthToken *authToken, TCGBError *error){
if ([TCGBGamebase isSuccessWithError:error] == YES) {
NSLog(@"Login is succeeded.");
//TODO: 1. Do you want.
}
else {
if (error.code == TCGB_ERROR_SOCKET_ERROR || error.code == TCGB_ERROR_SOCKET_RESPONSE_TIMEOUT) {
NSLog(@"Retry loginForLastLoggedInProviderWithViewController:completion: or Notify to user -\n\terror[%@]", [error description]);
//TODO: 1. If the error had occured by network problem, you can retry by loginForLastLoggedInProviderWithViewController:completion:
}
else {
NSLog(@"Try to login with loginWithType:viewController:completion:");
// Last Logged In Provider Name
NSString *lastLoggedInProvider = [TCGBGamebase lastLoggedInProvider];
if (lastLoggedInProvider == nil || lastLoggedInProvider <= 0) {
//TODO: 1. Show your UI what user want to sign in.
//2. If the user has selected IdP, set lastLoggedInProvider to it.
//3. Invoke loginWithType:viewController:completion: method to try login.
}
// Try to login with IdP authentication
//Warning: If you receive an event asynchronously from async handler(callback), you can use codes below in the async handler.
[TCGBGamebase loginWithType:lastLoggedInProvider viewController:topViewController completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
NSLog(@"Login is succeeded.");
}
else {
NSLog(@"Login is failed.");
}
}];
}
}
}];
}
特定のIdPログインを呼び出すために[TCGBGamebase loginWithType:viewController:completion:]メソッドを呼び出します。
Gamebaseを通じてログインを初めて試みたり、ログイン情報(アクセストークン)の期限などが切れている場合、このAPIを使用してログインを試みる必要があります。
ログイン結果により(TCGBError *)errorの客体を利用して成功したかどうかを判断することができます。
また、TCGBAuthTokenの客体を利用してユーザーIDなどのユーザー情報及びトークン情報を取得することができます。
ログインに成功した場合、GamebaseのアクセストークンがLocal Storageに保存され、その後、loginForLastLoggedInProviderWithViewController:completion:のメソッドを使用する際に、保存されているアクセストークンを使用することになります。
ただし、IdPのアクセストークンは、各IdPが提供するSDKが管理します。
[参考]
iOSでサポートするIdPは TCGBConstants.hのTCGBAuthIDPs領域のkTCGBAuthXXXXXXに定義されています。
[参考]
ログインする時に追加情報を必要とするIdPもあります。 このような追加情報を設定できるように[TCGBGamebase loginWithType:additionalInfo:viewController:completion:]APIを提供します。 additionalInfoパラメータに必須情報をdictionary形式で入力してください。 additionalInfo値がある場合にはその値を使用し、nullの場合にはNHN Cloud Consoleに登録された値を使用します。
[参考]
LINE IdPはGamebase SDK 2.43.0からLINEサービス提供地域を設定できます。 当該地域はadditionalInfoに設定できます。
keyname | a use | 値の種類 |
---|---|---|
kTCGBAuthLoginWithCredentialLineChannelRegionKeyname | LINEサービス提供地域設定 | "japan" "thailand" "taiwan" "indonesia" |
API
+ (void)loginWithType:(NSString *)type viewController:(UIViewController *)viewController completion:(LoginCompletion)completion;
+ (void)loginWithType:(NSString *)type additionalInfo:(nullable NSDictionary<NSString *, id> *)additionalInfo viewController:(UIViewController *)viewController completion:(LoginCompletion)completion;
Example
- (void)loginFacebookButtonClick {
[TCGBGamebase loginWithType:kTCGBAuthFacebook viewController:topViewController completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
// To Login Succeeded
NSString *userId = [authToken.tcgbMember userId];
} else {
// To Login Failed
}
}];
}
- (void)loginLineButtonClick {
NSDictionary *additionalInfo = @{
kTCGBAuthLoginWithCredentialLineChannelRegionKeyname : @"japan"
};
[TCGBGamebase loginWithType:kTCGBAuthLine additionalInfo:additionalInfo viewController:viewController completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
// To Login Succeeded
NSString *userId = [authToken.tcgbMember userId];
} else {
// To Login Failed
}
}];
}
IdPが提供するSDKを使ってゲームで直接認証した後、発行されたアクセストークンなどを利用してGamebaseにログインできるインターフェースです。
keyname | a use | 値の種類 |
---|---|---|
kTCGBAuthLoginWithCredentialProviderNameKeyname | IdPタイプの設定 | facebook, iosgamecenter, naver, google, twitter, line, appleid, hangame, weibo, kakaogame |
kTCGBAuthLoginWithCredentialAccessTokenKeyname | IdPログイン後に取得した認証情報(アクセストークン)設定 | |
kTCGBAuthLoginWithCredentialIgnoreAlreadyLoggedInKeyname | Gamebaseログイン状態でログアウトを行わなくても、他のアカウントログイン試行を許可する | BOOL |
kTCGBAuthLoginWithCredentialLineChannelRegionKeyname | LINEサービス提供地域のうち、ログインを行う1つの地域 | Login with IdP参考 |
[参考]
ゲーム内で外部サービス(Facebookなど)の固有機能を使用しなければならないとき、必要になることがあります。
[注意]
外部のSDKで対応を求める開発事項は、外部SDKのAPIを使用して設計する必要があり、Gamebaseでは対応しておりません。
#import "TCGBConstants.h"
- (void)authLoginWithCredential {
NSDictionary *credentialDic = @{ kTCGBAuthLoginWithCredentialProviderNameKeyname: kTCGBAuthFacebook, kTCGBAuthLoginWithCredentialAccessTokenKeyname:@"ここにfacebook SDKで発行したAccess Tokenを入力してください" };
[TCGBGamebase loginWithCredential:credentialDic viewController:parentViewController completion:^(TCGBAuthToken *authToken, TCGBError *error) {
NSLog([authToken description]);
}];
}
ログアウトを設計するViewControllerに次のヘッダーファイルを持ってきます。
#import <Gamebase/Gamebase.h>
ログインされたIdPからのログアウトを試みます。主にゲームの設定画面にログアウトボタンを設け、ボタンをクリックすると実行されるように設計するケースが多いです。
ログアウトに成功してもゲームユーザーのデータは維持されます。
ログアウトに成功した場合、該当するIdPで認証を行った記録が削除されるため、次回ログインする時にID・パスワードの入力ウィンドウが表示されます。
次は、ログアウトボタンをクリックするとログアウトされるコード例です。
- (void)authLogout {
[TCGBGamebase logoutWithViewController:topViewController completion:^(TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
// To Logout Succeeded
} else {
// To Logout Failed
}
}];
}
退会を設計するViewControllerに次のヘッダーファイルを持ってきます。
#import <Gamebase/Gamebase.h>
ログイン状態で退会を試行します。
[注意]
複数のIdPを連携中の場合、すべてのIdP連携が解除され、Gamebaseユーザーデータが削除されます。
次は、退会ボタンをクリックすると退会されるコード例です。
- (void)authWithdrawal {
[TCGBGamebase withdrawWithViewController:topViewController completion:^(TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
// To Withdrawal Succeeded
} else {
// To Withdrawal Failed
}
}];
}
マッピングは、既にログインされているアカウントに他のIdPアカウントを連携させたり、解除する機能です。
ほとんどのゲームにおいて、一つのゲームユーザーアカウントに複数のIdPを連携(マッピング)させることができます。
GamebaseのマッピングAPIを使用すれば、既にログインされているアカウントに他のIdPアカウントを連携させたり、解除することができます。
つまり、連携中のIdPアカウントでログインを試みる場合、常に同じユーザーIDでログインされることになります。
注意すべき点は、各IdPは一つのアカウントにのみ連携させることができるという点です。
例えば、Googleアカウントに連携中の場合、他のGoogleアカウントを追加で連携させることができません。
アカウント連携の例は、次の通りです。
マッピングAPIにはマッピング追加APIとマッピング解除APIがあります。
[注意]
Guestログイン中にマッピングに成功すると、Guest IdPは消えます。
マッピングは、次の手順で設計することができます。
マッピングは、現在のアカウントにIdPアカウントの連携を追加する機能であるため、ログインされた状態でなければなりません。 まず、ログインAPIを呼び出してログインします。
[TCGBGamebase addMappingWithType:viewController:completion:]を呼び出してマッピングを試みます。
マッピングを設計するViewControllerに次のヘッダーファイルを持ってきます。
#import <Gamebase/Gamebase.h>
特定のIdPにログインされた状態で他のIdPへのマッピングを試みます。
keyname | a use | 値種類 |
---|---|---|
kTCGBAuthLoginWithCredentialLineChannelRegionKeyname | LINEサービス提供地域のうち、ログインを行う1つの地域 | Login with IdP参考 |
API
+ (void)addMappingWithType:(NSString *)type viewController:(UIViewController *)viewController completion:(LoginCompletion)completion;
'+ (void)addMappingWithType:(NSString *)type additionalInfo:(nullable NSDictionary<NSString *, id> *)additionalInfo viewController:(UIViewController *)viewController completion:(LoginCompletion)completion;
Example
次は、Facebookにマッピングを試みる例です。
- (void)authAddMapping {
[TCGBGamebase addMappingWithType:kTCGBAuthFacebook viewController:parentViewController completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
NSLog(@"AddMapping is succeeded.");
} else if (error.code == TCGB_ERROR_SOCKET_ERROR || error.code == TCGB_ERROR_SOCKET_RESPONSE_TIMEOUT) {
NSLog(@"Retry addMapping");
} else if (error.code == TCGB_ERROR_AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER) {
NSLog(@"Already mapped to other member");
} else {
NSLog(@"AddMapping Error - %@", [error description]);
}
}];
}
ゲームで直接IdPに提供するSDKで、予め認証を行いアクセストークンなどを利用してGamebase AddMappingをすることができるインターフェースです。
keyname | a use | 値の種類 |
---|---|---|
kTCGBAuthLoginWithCredentialProviderNameKeyname | IdPタイプの設定 | facebook, iosgamecenter, naver, google, twitter, line, appleid |
kTCGBAuthLoginWithCredentialAccessTokenKeyname | IdPログイン後に取得した認証情報(アクセストークン)設定 |
[参考]
ゲーム内で外部サービス(Facebookなど)の固有機能を使用しなければならないとき、必要になることがあります。
[注意]
外部のSDKで対応を求める開発事項は、外部SDKのAPIを使用して設計する必要があり、Gamebaseでは対応しておりません。
API
+ (void)addMappingWithCredential:(NSDictionary *)credentialInfo viewController:(UIViewController *)viewcontroller completion:(LoginCompletion)completion;
Example
- (void)authAddMappingCredential {
UIViewController* topViewController = nil;
NSString* facebookAccessToken = @"FACEBOOK_ACCESS_TOKEN";
NSMutableDictionary* credentialInfo = [NSMutableDictionary dictionary];
credentialInfo[kTCGBAuthLoginWithCredentialProviderNameKeyname] = kTCGBAuthFacebook;
credentialInfo[kTCGBAuthLoginWithCredentialAccessTokenKeyname] = facebookAccessToken;
[TCGBGamebase addMappingWithCredential:credentialInfo viewController:topViewController completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
NSLog(@"AddMapping is succeeded.");
}
else if (error.code == TCGB_ERROR_SOCKET_ERROR || error.code == TCGB_ERROR_SOCKET_RESPONSE_TIMEOUT) {
NSLog(@"Retry addMapping");
}
else if (error.code == TCGB_ERROR_AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER) {
NSLog(@"Already mapped to other member");
}
else {
NSLog(@"AddMapping Error - %@", [error description]);
}
}];
}
特定IdPにすでにマッピングされているアカウントがある時、強制的にマッピングを試行します。
強制マッピングを試行する時は、AddMapping APIで取得したForcingMappingTicket
が必要です。
API
+ (void)addMappingForciblyWithTicket:(TCGBForcingMappingTicket *)ticket viewController:(nullable UIViewController *)viewController completion:(LoginCompletion)completion;
Example
次はFacebookに強制マッピングを試行する例です。
- (void)authAddMappingForcibly {
[TCGBGamebase addMappingWithType:kTCGBAuthFacebook viewController:parentViewController completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
NSLog(@"AddMapping is succeeded.");
} else if (error.code == TCGB_ERROR_SOCKET_ERROR || error.code == TCGB_ERROR_SOCKET_RESPONSE_TIMEOUT) {
NSLog(@"Retry addMapping");
} else if (error.code == TCGB_ERROR_AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER) {
NSLog(@"Already mapped to other member");
TCGBForcingMappingTicket* ticket = [TCGBForcingMappingTicket forcingMappingTicketFromError:error];
[TCGBGamebase addMappingForciblyWithTicket:ticket viewController:self completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error]) {
// Mapping success.
}
else {
// Mapping failed.
}
}];
} else {
NSLog(@"AddMapping Error - %@", [error description]);
}
}];
}
特定IdPにすでにマッピングされているアカウントがある時、ログインアカウントを変更します。
ログインアカウントを変更する時はAddMapping APIで取得したForcingMappingTicket
が必要です。
Change Login APIの呼び出しが失敗した場合、以前のアカウントのログイン状態が維持されます。
API
+ (void)changeLoginWithForcingMappingTicket:(TCGBForcingMappingTicket *)ticket viewController:(nullable UIViewController *)viewController completion:(LoginCompletion)completion;
Example
次はFacebookにログインしているアカウントの変更を試行する例です。
- (void)authChangeLogin {
[TCGBGamebase addMappingWithType:kTCGBAuthFacebook viewController:parentViewController completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
NSLog(@"AddMapping is succeeded.");
} else if (error.code == TCGB_ERROR_SOCKET_ERROR || error.code == TCGB_ERROR_SOCKET_RESPONSE_TIMEOUT) {
NSLog(@"Retry addMapping");
} else if (error.code == TCGB_ERROR_AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER) {
NSLog(@"Already mapped to other member");
TCGBForcingMappingTicket* ticket = [TCGBForcingMappingTicket forcingMappingTicketFromError:error];
[TCGBGamebase changeLoginWithForcingMappingTicket:ticket viewController:self completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error]) {
// Change login successed.
}
else {
// Change login failed.
// The login status of the previous account is maintained.
}
}];
} else {
NSLog(@"AddMapping Error - %@", [error description]);
}
}];
}
特定のIDPに対する連携を解除します。
解除しようとしているIdP以外にIdPがない場合、失敗を返します。
連携を解除した後は、Gamebase内部で該当するIdPに対するログアウト処理を行います。
[TCGBGamebase removeMappingWithType:kTCGBAuthFacebook viewController:topViewController completion:^(TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
// To Remove Mapping Succeeded
} else {
// To Remove Mapping Failed cause of the error
}
}];
現在のアカウントがどんなIdPとマッピングされているか、リストを確認することができます。
// Obtaining Names of Mapping IdPs
NSArray* authMappingList = [TCGBGamebase authMappingList];
Gamebaseで認証フローを進めた後、アプリを制作する際に必要な情報を得ることができます。
[注意]
"[TCGBGamebase loginForLastLoggedInProvider]"APIでログインした場合、認証情報を取得することができません。
認証情報が必要な場合、"[TCGBGamebase loginForLastLoggedInProvider]"の代わりに、使用したいIDPCodeと同じ{IDP_CODE}をパラメータにして"[TCGBGamebase loginWithType:IDP_CODE viewController:topViewController completion:completion];" APIでログインすると、正常に認証情報を取得できます。
Gamebaseから発行された認証情報を取得することができます。
// Obtaining Gamebase UserID
NSString* gamebaseUserID = [TCGBGamebase userID];
// Obtaining Gamebase AccessToken
NSString* gamebaseAccessToken = [TCGBGamebase accessToken];
// Obtaining Last Logged In Provider
NSString* lastProviderName = [TCGBGamebase lastLoggedInProvider];
[注意]
- 外部IdPの認証情報はセキュリティのためにゲームサーバーで呼び出すことを推奨します。
- IdPによってはアクセストークンの有効期限が短い場合があります。
- 例えばGoogleは、ログインしてから2時間後にはアクセストークンの有効期限が切れます。
- ユーザー情報が必要な場合は、ログイン後すぐにGamebase Server APIを呼び出してください。
- "[TCGBGamebase loginForLastLoggedInProviderWithViewController:completion:]" APIでログインした場合は認証情報を取得できません。
- ユーザー情報が必要な場合は、"[TCGBGamebase loginForLastLoggedInProviderWithViewController:completion:]"の代わりに使用したいIDPCodeと同じ{IDP_CODE}をパラメータにして"[TCGBGamebase loginWithType:viewController:completion:]"APIでログインする必要があります。
[注意]
iOS 12以下のappleidログインの場合、認証情報を照会できません。
Gamebase Consoleに制裁されたゲームユーザーとして登録されている場合、 ログインを試行すると、以下のような利用制限情報コードが表示されることがあります。[TCGBBanInfo banInfoFromError:error]メソッドを利用して制裁情報を確認できます。
ゲストアカウントを他の端末に移行するためのキーを発行する機能です。
このキーをTransferAccountInfoと呼びます。 発行されたTransferAccountInfoは、他の端末でrequestTransferAccountAPIを呼び出してアカウントを移行できます。
[注意]
TransferAccountInfoは、ゲストログイン状態でのみ発行できます。 TransferAccountInfoを利用したアカウント移行は、ゲストログイン状態またはログインされていない状態でのみ可能です。 ログインしたゲストアカウントがすでに他の外部IdP(Google、Facebook など)アカウントとマッピングされている場合、アカウント移行がサポートされません。
ゲストアカウントを移行するためにTransferAccountInfoを発行します。
API
+ (void)issueTransferAccountWithCompletion:(TransferAccountCompletion)completion;
Example
- (void)issueTransferAccount {
[TCGBGamebase issueTransferAccountWithCompletion:^(TCGBTransferAccountInfo* transferAccount, TCGBError *error) {
NSLog(@"Issued TransferAccount => %@, error => %@", [transferAccount description], [error description]);
}];
}
ゲストアカウントを移行するために、すでに発行されているTransferAccountInfo情報をGamebaseサーバーに問い合わせます。
API
+ (void)queryTransferAccountWithCompletion:(TransferAccountCompletion)completion;
Example
- (void)queryTransferAccount {
[TCGBGamebase queryTransferAccountWithCompletion:^(TCGBTransferAccountInfo* transferAccount, TCGBError *error) {
NSLog(@"Published TransferAccount => %@, error => %@", [transferAccount description], [error description]);
}];
}
すでに発行されたTransferAccountInfo情報を更新します。 更新方法には自動更新と手動更新があり、パスワードのみ更新、IDとパスワードを更新を選択してTransferAccountInfo情報を更新できます。
+ (void)renewTransferAccountWithConfiguration:(TCGBTransferAccountRenewConfiguration *)config completion:(TransferAccountCompletion)completion;
Example
- (void)renewTransferAccount {
// If you want renew the account automatically, use this config.
TCGBTransferAccountRenewalTargetType renewalTargetType = TCGBTransferAccountRenewalTargetTypeIdPassword;
TCGBTransferAccountRenewConfiguration* autoConfig = [TCGBTransferAccountRenewConfiguration autoRenewConfigurationWithRenewalTarget:renewalTargetType];
// If you want renew the account manually, use this config.
TCGBTransferAccountRenewConfiguration* manualConfig = [TCGBTransferAccountRenewConfiguration manualRenewConfigurationWithAccountId:@"ID" accountPassword:@"PASSWORD"];
[TCGBGamebase renewTransferAccountWithConfiguration:autoConfig completion:^(TCGBTransferAccountInfo *transferAccount, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error]) {
// Renewing TransferAccount success.
NSString* accountId = transferAccount.account.accountId;
NSString* accountPw = transferAccount.account.accountPassword;
return;
}
else {
// Renewing TransferAccount failed.
}
}];
}
issueTransferAPIで発行したTransferAccountにアカウントを移行する機能です。 アカウントの移行に成功した時、TransferAccountを発行した端末から移行完了メッセージが表示される場合があり、ゲストログインすると新規のアカウントが作成されます。 アカウント移行が成功した端末では、TransferAccountを発行した端末のゲストアカウントを継続して使用できます。
[注意]
すでにゲストログインしている状態で移行が成功すると、端末にログインしていたゲストアカウントは消失します。 間違ったid/passwordを連続して入力した場合、AUTH_TRANSFERACCOUNT_BLOCK(3042)エラーが発生して、アカウント移行が一定時間できなくなります。 この場合は、以下の例のように、TCGBTransferAccountFailInfo値を利用して、いつまでアカウント移行ができないのかをユーザーに伝えることができます。
API
+ (void)transferAccountWithIdPLoginWithAccountId:(NSString *)accountId accountPassword:(NSString *)accountPassword completion:(void(^)(TCGBAuthToken* authToken, TCGBError* error))completion;
Example
- (void)transferOtherDevice {
[TCGBGamebase transferAccountWithIdPLoginWithAccountId:@"1Aie0198" accountPassword:@"1Aie0199" completion:^(TCGBAuthToken* authToken, TCGBError* error) {
if (error.code == TCGB_ERROR_AUTH_TRANSFERACCOUNT_BLOCK) {
// Transfering Account failed.
TCGBTransferAccountFailInfo* failInfo = [TCGBTransferAccountFailInfo transferAccountFailInfoFrom:error];
if (failInfo == nil) {
// Transfering Account failed by entering the wrong id / pw multiple times.
// You can tell when the account transfer is blocked by the TransferAccountFailInfo.
NSString *failedId = failInfo.accountId;
NSInteger failCount = failInfo.failCount;
NSDate *blockedDate = [NSDate dateTimeIntervalSince1970:(failInfo.blockEndDate / 1000.0)];
return;
}
// Transfering Account failed by another reason.
return;
}
// Transfering Account success.
// TODO: implements post login process
}];
}
「退会猶予」機能です。 一時退会をリクエストして即時に退会が行われずに一定期間の猶予期間が過ぎると、退会が行われます。 猶予期間はコンソールで変更できます。
[注意]
退会猶予機能を使用する場合には[TCGBGamebase withdrawWithViewController:completion:]APIを使用しないでください。 [TCGBGamebase withdrawWithViewController:completion:]APIは即時にアカウントを退会します。
ログインが成功すると、AuthToken.getTemporaryWithdrawalInfo() APIを呼び出して退会猶予状態のユーザーかを判断できます。
一時退会をリクエストします。 コンソールに指定した期間が過ぎると自動的に退会進行が完了します。
API
'+ (void)requestTemporaryWithdrawalWithViewController:(nullable UIViewController *)viewController completion:(nullable TemporaryWithdrawCompletion)completion;
ErrorCode
Error Code | Description |
---|---|
TCGB_ERROR_AUTH_WITHDRAW_ALREADY_TEMPORARY_WITHDRAW(3602) | すでに一時退会中のユーザーです。 |
Example
- (void)testRequestWithdraw {
[TCGBGamebase requestTemporaryWithdrawalWithViewController:parentViewController completion:^(TCGBTemporaryWithdrawalInfo *info, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == NO) {
if (error.code == TCGB_ERROR_AUTH_WITHDRAW_ALREADY_TEMPORARY_WITHDRAW) {
// Already requested temporary withdrawal before.
}
else {
// Request temporary withdrawal failed.
return;
}
}
// Request temporary withdrawal success.
}];
}
退会猶予を使用するゲームはログイン後に常にTCGBAuthToken.tcgbMember.temporaryWithdrawalを使用し、結果がnullではない有効なTemporaryWithdrawalInfoオブジェクトを返す場合、該当ユーザーに退会進行中であることを伝える必要があります。
Example
- (void)testLogin {
[TCGBGamebase loginWithType:@"appleid" viewController:parentViewController completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == NO) {
// Login failed
return;
}
// Check if user is requesting withdrawal
if (authToken.tcgbMember.temporaryWithdrawal != nil) {
// User is under temporary withdrawal
long gradePeriod = authToken.tcgbMember.temporaryWithdrawal.gracePeriodDate;
}
else {
// Login Success
}
}];
}
退会リクエストをキャンセルします。 退会リクエストした後、期間が満了して退会が完了すると、キャンセルができません。
API
+ (void)cancelTemporaryWithdrawalWithViewController:(UIViewController *)viewController completion:(WithdrawCompletion)completion;
ErrorCode
Error Code | Description |
---|---|
TCGB_ERROR_AUTH_WITHDRAW_NOT_TEMPORARY_WITHDRAW(3603) | 一時退会中のユーザーではありません。 |
Example
- (void)testCancelWithdraw {
[TCGBGamebase cancelTemporaryWithdrawalWithViewController:parentViewController completion:^(TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == NO) {
if (error.code == TCGB_ERROR_AUTH_WITHDRAW_NOT_TEMPORARY_WITHDRAW) {
// Never requested temporary withdrawal before.
}
else {
// Cancel temporary withdrawal failed.
return
}
}
// Cancel temporary withdrawal success.
}];
}
退会猶予期間を無視して、即時退会を進行します。 実際の内部動作は[TCGBGamebase withdrawWithViewController:completion:]APIと同じです。
即時退会はキャンセルできないため、実行するかどうかをユーザーによく確認してください。
API
+ (void)withdrawImmediatelyWithViewController:(UIViewController *)viewController completion:(WithdrawCompletion)completion;
Example
- (void)testWithdrawImmediately {
[TCGBGamebase withdrawImmediatelyWithViewController:parentViewController completion:^(TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == NO) {
// withdraw failed.
return;
}
// Withdraw success.
}];
}
Example
- (void)testGraceBanInfo {
[TCGBGamebase loginWithType:kTCGBAuthAppleID viewController:viewController completion:^(TCGBAuthToken *authToken, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == NO) {
// Login failed
return;
}
// Check if user is under grace ban
if (authToken.tcgbMember.graceBanInfo != nil) {
TCGBGraceBanInfo *graceBanInfo = authToken.tcgbMember.graceBanInfo;
// gracePeriodDate : epoch time in milliseconds
long long gracePeriodDate = graceBanInfo.gracePeriodDate;
NSString *message = [graceBanInfo.message stringByRemovingPercentEncoding];
if (graceBanInfo.paymentStatus != nil) {
TCGBPaymentStatus *paymentStatus = graceBanInfo.paymentStatus;
double paymentStatusAmount = paymentStatus.amount;
int paymentStatusCount = paymentStatus.count;
}
if (graceBanInfo.releaseRuleCondition != nil) {
TCGBReleaseRuleCondition *releaseRuleCondition = graceBanInfo.releaseRuleCondition;
double releaseRuleConditionAmount = releaseRuleCondition.amount;
int releaseRuleConditionCount = releaseRuleCondition.count;
NSString *releaseRuleConditionCurrency = releaseRuleCondition.currency;
// condition type : "AND", "OR"
NSString *releaseRuleConditionType = releaseRuleCondition.conditionType;
}
// Guide the user through the UI how to finish the grace ban status.
}
else {
// Login Success
}
}];
}
Category | Error | Error Code | Description |
---|---|---|---|
Auth | TCGB_ERROR_INVALID_MEMBER | 6 | 無効な会員へのリクエストです。 |
TCGB_ERROR_BANNED_MEMBER | 7 | 制裁中の会員です。 | |
TCGB_ERROR_AUTH_USER_CANCELED | 3001 | ログインがキャンセルされました。 | |
TCGB_ERROR_AUTH_NOT_SUPPORTED_PROVIDER | 3002 | サポートしていない認証方式です。 | |
TCGB_ERROR_AUTH_NOT_EXIST_MEMBER | 3003 | 存在しないか、退会した会員です。 | |
TCGB_ERROR_AUTH_EXTERNAL_LIBRARY_INITIALIZATION_ERROR | 3006 | 外部認証ライブラリの初期化に失敗しました。 | |
TCGB_ERROR_AUTH_EXTERNAL_LIBRARY_ERROR | 3009 | 外部認証ライブラリエラーです。 詳細エラーを確認してください。 |
|
TCGB_ERROR_AUTH_INVALID_GAMEBASE_TOKEN | 3011 | Gamebase Access Tokenが有効ではないためログアウトしました。 ログインを再試行してください。 |
|
Auth (Login) | TCGB_ERROR_AUTH_TOKEN_LOGIN_FAILED | 3101 | トークンのログインに失敗しました。 |
TCGB_ERROR_AUTH_TOKEN_LOGIN_INVALID_TOKEN_INFO | 3102 | トークン情報が有効ではありません。 | |
TCGB_ERROR_AUTH_TOKEN_LOGIN_INVALID_LAST_LOGGED_IN_IDP | 3103 | 最近ログインしたIdP情報がありません。 | |
IdP Login | TCGB_ERROR_AUTH_IDP_LOGIN_FAILED | 3201 | IdPログインに失敗しました。 |
TCGB_ERROR_AUTH_IDP_LOGIN_INVALID_IDP_INFO | 3202 | IdP情報が有効ではありません。 (Consoleに該当IdP情報がありません。) | |
TCGB_ERROR_AUTH_IDP_LOGIN_EXTERNAL_AUTHENTICATION_REQUIRED | 3203 | Gamebaseログインを要求する前に、まず IdP ログインしている必要があります。 | |
Add Mapping | TCGB_ERROR_AUTH_ADD_MAPPING_FAILED | 3301 | マッピングの追加に失敗しました。 |
TCGB_ERROR_AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER | 3302 | すでに他のメンバーにマッピングされています。 | |
TCGB_ERROR_AUTH_ADD_MAPPING_ALREADY_HAS_SAME_IDP | 3303 | すでに同じIdPにマッピングされています。 | |
TCGB_ERROR_AUTH_ADD_MAPPING_INVALID_IDP_INFO | 3304 | IdP情報が有効ではありません。 (Consoleに該当IdP情報がありません。) | |
TCGB_ERROR_AUTH_ADD_MAPPING_CANNOT_ADD_GUEST_IDP | 3305 | ゲストIdPではAddMappingができません。 | |
Remove Mapping | TCGB_ERROR_AUTH_REMOVE_MAPPING_FAILED | 3401 | マッピングの削除に失敗しました。 |
TCGB_ERROR_AUTH_REMOVE_MAPPING_LAST_MAPPED_IDP | 3402 | 最後にマッピングされたIdPは削除できません。 | |
TCGB_ERROR_AUTH_REMOVE_MAPPING_LOGGED_IN_IDP | 3403 | 現在ログインしているIdPです。 | |
Logout | TCGB_ERROR_AUTH_LOGOUT_FAILED | 3501 | ログアウトに失敗しました。 |
Withdrawal | TCGB_ERROR_AUTH_WITHDRAW_FAILED | 3601 | 退会に失敗しました。 |
TCGB_ERROR_AUTH_WITHDRAW_ALREADY_TEMPORARY_WITHDRAW | 3602 | すでに一時退会中のユーザーです。 | |
TCGB_ERROR_AUTH_WITHDRAW_NOT_TEMPORARY_WITHDRAW | 3603 | 一時退会中のユーザーではありません。 | |
Not Playable | TCGB_ERROR_AUTH_NOT_PLAYABLE | 3701 | プレイできない状態です(メンテナンスまたはサービス終了など)。 |
Auth(Unknown) | TCGB_ERROR_AUTH_UNKNOWN_ERROR | 3999 | 不明なエラーです。 (定義されていないエラーです。) |
TCGB_ERROR_AUTH_EXTERNAL_LIBRARY_ERROR
TCGBError *tcgbError = error; // TCGBError object via callback
NSInteger detailErrorCode = [error detailErrorCode];
NSString *detailErrorMessage = [error detailErrorMessage];
// If you use **description** method, you can get entire information of this object by JSON Format
NSLog(@"TCGBError: %@", [tcgbError description]);