Gamebaseで対応している付加機能について説明します。
API
+ (NSString *)idfa;
[注意]
iOS 14から、IDFA値をリクエストする時、ユーザー権限を取得する必要があります。 ユーザー権限をリクエストする時に表示させる文言をinfo.plistに設定する必要があります。 info.plistに「Privacy - Tracking Usage Description」の設定を行ってください。
API
+ (NSString *)deviceLanguageCode;
メンテナンスポップアップなどでGamebaseが表示する言語は、端末に設定された言語と同じです。
しかしゲームで表示する言語を、端末に設定した言語ではなく、別のオプションで変更できるゲームがあります。 例えば、端末に設定された言語は英語ですが、ゲーム表示言語を日本語に変更した場合、 Gamebaseで表示する言語も日本語に変更したいですが、Gamebaseが表示する言語は端末に設定された言語の英語が表示されます。
このように端末に設定された言語ではなく、他の言語でGamebaseのメッセージを表示したい
アプリケーションのためにGamebaseはDisplay Language
という機能を提供します。
GamebaseはDisplay Languageで設定した言語でGamebaseのメッセージを表示します。 Display Languageに入力する言語コードは、以下の表(Gamebaseでサポートする言語コードの種類)で指定したコードだけを使用できます。
[注意]
- Display Languageは、端末設定言語と関係なくGamebaseの表示言語を変更したい場合にのみ使用してください。
- Display Language CodeはISO-639形式の値で、大文字/小文字を区別します。 'EN'または'zh-cn'と設定すると問題が発生する場合があります。
- もしDisplay Language Codeに入力した値が以下の表(Gamebaseでサポートする言語コードの種類)に存在しない場合、Display Langauge CodeはGamebaseコンソールで設定したデフォルト言語に指定されます。
- もしGamebaseコンソールで言語設定を行っていなければ英語(en)がデフォルト言語に設定されます。
[Note]
- Gamebaseのクライアントメッセージは英語(en)、韓国語(ko)、日本語(ja)のみ含んでいるため、下記の表に存在する言語コードであっても、英語(en)、韓国語(ko)、日本語(ja)以外の言語を指定するとデフォルト値の英語(en)に自動設定されます。
- Gamebaseのクライアントに含まれていない言語セットは直接追加できます。 新規言語セット追加項目を参照してください。
Code | Name |
---|---|
de | German |
en | English |
es | Spanish |
fi | Finnish |
fr | French |
id | Indonesian |
it | Italian |
ja | Japanese |
ko | Korean |
pt | Portuguese |
ru | Russian |
th | Thai |
vi | Vietnamese |
ms | Malay |
zh-CN | Chinese-Simplified |
zh-TW | Chinese-Traditional |
該当する言語コードは、「TCGBConstants.h」に定義されています。
#pragma mark - DisplayLanguageCode
extern NSString* const kTCGBDisplayLanguageCodeGerman;
extern NSString* const kTCGBDisplayLanguageCodeEnglish;
extern NSString* const kTCGBDisplayLanguageCodeSpanish;
extern NSString* const kTCGBDisplayLanguageCodeFinnish;
extern NSString* const kTCGBDisplayLanguageCodeFrench;
extern NSString* const kTCGBDisplayLanguageCodeIndonesian;
extern NSString* const kTCGBDisplayLanguageCodeItalian;
extern NSString* const kTCGBDisplayLanguageCodeJapanese;
extern NSString* const kTCGBDisplayLanguageCodeKorean;
extern NSString* const kTCGBDisplayLanguageCodePortuguese;
extern NSString* const kTCGBDisplayLanguageCodeRussian;
extern NSString* const kTCGBDisplayLanguageCodeThai;
extern NSString* const kTCGBDisplayLanguageCodeVietnamese;
extern NSString* const kTCGBDisplayLanguageCodeMalay;
extern NSString* const kTCGBDisplayLanguageCodeChineseSimplified;
extern NSString* const kTCGBDisplayLanguageCodeChineseTraditional;
Gamebaseを初期化する際にDisplay Languageを設定することができます。
API
+ (void)initializeWithConfiguration:(TCGBConfiguration *)configuration completion:(InitializeCompletion)completion;
Example
- (void)initializeWithDisplayLanguageConfiguration {
TCGBConfiguration* config = [TCGBConfiguration configurationWithAppID:@"your app(project) ID" appVersion:@"your app version"];
[config setDisplayLanguageCode:kTCGBDisplayLanguageCodeEnglish];
[TCGBGamebase initializeWithConfiguration:config completion:^(LaunchingInfo launchingData, TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
NSLog(@"TCGBGamebase initialization is succeeded");
// Check status of you app.
// If status of app is maintenance or terminated service or etc, you must blocking UI and you should make user cannot log in your service.
// You can use [TCGBLaunching launchingStatus] method to check status of your app.
}
else {
NSLog(@"TCGBGamebase initialization is failed with error:[%@]", [error description]);
}
}];
}
Gamebaseを初期化する際に入力されたDisplay Languageを変更することができます。
API
+ (void)setDisplayLanguageCode:(NSString *)languageCode;
Example
- (void)setDisplayLanguageCode {
[TCGBGamebase setDisplayLanguageCode:kTCGBDisplayLanguageCodeEnglish];
}
現在適用されているDisplay Languageを照会することができます。
API
+ (NSString *)displayLanguageCode;
Example
- (void)getDisplayLanguageCode()
{
NSString* displayLanguage = [TCGBGamebase displayLanguageCode];
}
Gamebaseで提供するデフォルト言語(ko、en、ja、zh-CN、zh-TW、th)以外の言語を使用したい場合は、 XcodeプロジェクトのCopy Bundle Resources
にlocalizedstring.jsonファイルを追加してください。
localizedstring.jsonに定義されている形式は、次の通りです。
{
"en":{
"common_ok_button":"OK",
"common_cancel_button":"Cancel",
...
"launching_service_closed_title":"Service Closed"
},
"ko": {
"common_ok_button": "확인",
"common_cancel_button": "취소",
...
"launching_service_closed_title": "서비스 종료"
},
"ja": {
"common_ok_button": "確認",
"common_cancel_button": "キャンセル",
...
"launching_service_closed_title": "サービス終了"
},
"zh-CN": {
"common_ok_button": "确定",
"common_cancel_button": "取消",
...
"launching_service_closed_title": "关闭服务"
},
"zh-TW": {
"common_ok_button": "好",
"common_cancel_button": "取消",
...
"launching_service_closed_title": "服務關閉"
},
"th": {
"common_ok_button": "ยืนยัน",
"common_cancel_button": "ยกเลิก",
...
"launching_service_closed_title": "ปิดให้บริการ"
},
"de": {},
"es": {},
...
"ms": {}
}
他の言語の追加が必要な場合は、localizedstring.jsonファイルの該当言語コードに"key":"value"
形式で値を追加してください。
{
"en":{
"common_ok_button":"OK",
"common_cancel_button":"Cancel",
...
"launching_service_closed_title":"Service Closed"
},
...
"vi": {
"common_ok_button": "value",
"common_cancel_button": "value",
...
"launching_service_closed_title": "value"
},
"ms": {}
}
初期化及びsetDisplayLanguageCode:APIを通してDisplay Languageを設定する場合、最終的に適用されるDisplay Languageは、入力した値と違う値が適用されることがあります。
en
がデフォルト値に設定されます。API
+ (NSString *)deviceCountryCode;
API
+ (void)addEventHandler:(GamebaseEventHandler)handler;
+ (void)removeEventHandler:(GamebaseEventHandler)handler;
+ (void)removeAllEventHandler;
VO
@interface TCGBGamebaseEventMessage : NSObject <TCGBValueObject>
@property (nonatomic, strong, nonnull) NSString* category;
@property (nonatomic, strong, nullable) NSString* data;
@end
Example
- (void)eventHandler_addEventHandler {
void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
if ([message.category isEqualToString:kTCGBLoggedOut] == YES) {
if ([message.category isEqualToString:kTCGBIdPRevoked] == YES) {
TCGBGamebaseEventIdPRevokedData* idPRevokedData = [TCGBGamebaseEventIdPRevokedData gamebaseEventIdPRevokedDataFromJsonString:message.data];
if (idPRevokedData != nil) {
//TODO: process idp revoked
}
} else if ([message.category isEqualToString:kTCGBLoggedOut] == YES) {
TCGBGamebaseEventLoggedOutData* loggedOutData = [TCGBGamebaseEventLoggedOutData gamebaseEventLoggedOutDataFromJsonString:message.data];
if (loggedOutData != nil) {
//TODO: process loggedOut
}
} else if ([message.category isEqualToString:kTCGBServerPushAppKickoutMessageReceived] == YES
|| [message.category isEqualToString:kTCGBServerPushAppKickout] == YES
|| [message.category isEqualToString:kTCGBServerPushTransferKickout] == YES) {
TCGBGamebaseEventServerPushData* serverPushData = [TCGBGamebaseEventServerPushData gamebaseEventServerPushDataFromJsonString:message.data];
if (serverPushData != nil) {
//TODO: process server push
}
} else if ([message.category isEqualToString:kTCGBObserverLaunching] == YES
|| [message.category isEqualToString:kTCGBObserverHeartbeat] == YES
|| [message.category isEqualToString:kTCGBObserverNetwork] == YES) {
TCGBGamebaseEventObserverData* observerData = [TCGBGamebaseEventObserverData gamebaseEventObserverDataFromJsonString:message.data];
if (observerData != nil) {
//TODO: process observer
}
} else if ([message.category isEqualToString:kTCGBPurchaseUpdated] == YES) {
} else if ([message.category isEqualToString:kTCGBPushReceivedMessage] == YES) {
} else if ([message.category isEqualToString:kTCGBPushClickMessage] == YES) {
} else if ([message.category isEqualToString:kTCGBPushClickAction] == YES) {
}
};
[TCGBGamebase addEventHandler:eventHandler];
}
Event種類 | GamebaseEventCategory | VO変換方法 | 備考 |
---|---|---|---|
IdPRevoked | kTCGBIdPRevoked | [TCGBGamebaseEventIdPRevokedData gamebaseEventIdPRevokedDataFromJsonString:message.data] | - |
LoggedOut | kTCGBLoggedOut | [TCGBGamebaseEventLoggedOutData gamebaseEventLoggedOutDataFromJsonString:message.data] | - |
ServerPush | kTCGBServerPushAppKickoutMessageReceived kTCGBServerPushAppKickout kTCGBServerPushTransferKickout |
[TCGBGamebaseEventServerPushData gamebaseEventServerPushDataFromJsonString:message.data] | - |
Observer | kTCGBObserverLaunching kTCGBObserverHeartbeat kTCGBObserverNetwork |
[TCGBGamebaseEventObserverData gamebaseEventObserverDataFromJsonString:message.data] | - |
Purchase - プロモーション決済 | kTCGBPurchaseUpdated | [TCGBPurchasableReceipt purchasableReceiptFromJsonString:message.data] | - |
Push - メッセージ受信 | kTCGBPushReceivedMessage | [TCGBPushMessage pushMessageFromJsonString:message.data] | - |
Push - メッセージクリック | kTCGBPushClickMessage | [TCGBPushMessage pushFromJsonString:message.data] | - |
Push - アクションクリック | kTCGBPushClickAction | [TCGBPushMessage pushFromJsonString:message.data] | RichMessageボタンを押すと動作します。 |
[参考]
iOS Appleidログインを使用する場合にのみ発生するイベントです。
@interface TCGBGamebaseEventIdPRevokedData : NSObject <TCGBValueObject>
@property (nonatomic, assign) int64_t code;
@property (nonatomic, strong) NSString* idPType;
@property (nonatomic, strong) NSArray<NSString *>* authMappingList;
@property (nonatomic, strong) NSString* extras;
@end
Example
- (void)eventHandler_addEventHandler {
void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
if ([message.category isEqualToString:kTCGBIdPRevoked] == YES) {
TCGBGamebaseEventIdPRevokedData *idPRevokedData = [TCGBGamebaseEventIdPRevokedData gamebaseEventIdPRevokedDataFromJsonString:message.data];
if (idPRevokedData == nil) { return; }
NSString *revokedIdP = idPRevokedData.idPType;
switch (idPRevokedData.code) {
case IDP_REVOKED_WITHDRAW:
{
// 現在使用停止しているIdPでログインしていて、マッピングされたIdPリストがないことを意味します。
// ユーザーに現在のアカウントが退会していることを伝えてください。
[TCGBGamebase withdrawWithViewController:nil completion:^(TCGBError *error) {
...
}];
break;
}
case IDP_REVOKED_OVERWRITE_LOGIN_AND_REMOVE_MAPPING:
{
// 現在使用停止しているIdPでログインしていて、使用停止したIdP以外のIdPがマッピングされている場合を意味します。
// ユーザーがauthMappingListのうちどのIdPで再度ログインするか選択し、選択したIdPでログインした後、使用停止したIdPについては連動を解除してください。
NSString *selectedIdPType = "ユーザーが選択したIdP";
NSMutableDictionary *additionalInfo = [NSMutableDictionary dictionary];
additionalInfo[kTCGBAuthLoginWithCredentialIgnoreAlreadyLoggedInKeyname] = @(YES);
[TCGBGamebase loginWithType:selectedIdPType additionalInfo:additionalInfo viewController:viewController completion:^(TCGBAuthToken *authToken, TCGBError *loginError) {
if ([TCGBGamebase isSuccessWithError:loginError]) {
[TCGBGamebase removeMappingWithType:revokedIdP viewController:nil completion:^(TCGBError * _Nullable removeMappingError) {
...
}];
}
}];
break;
}
case IDP_REVOKED_REMOVE_MAPPING:
{
// 現在のアカウントにマッピングされているIdPのうち使用停止しているIdPがある場合を意味します。
// ユーザーに現在のアカウントで使用停止しているIdPが連動解除されたことを伝えてください。
[TCGBGamebase removeMappingWithType:revokedIdP viewController:nil completion:^(TCGBError *error) {
...
}];
break;
}
}
}
};
[TCGBGamebase addEventHandler:eventHandler];
}
Example
- (void)eventHandler_addEventHandler {
void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
[self printLogAndShowAlertWithData:[message prettyJsonString] error:nil alertTitle:@"addEventHandler Result"];
if ([message.category isEqualToString:kTCGBLoggedOut] == YES) {
TCGBGamebaseEventLoggedOutData* loggedOutData = [TCGBGamebaseEventLoggedOutData gamebaseEventLoggedOutDataFromJsonString:message.data];
if (loggedOutData != nil) {
//TODO: process loggedOut
}
}
};
[TCGBGamebase addEventHandler:eventHandler];
}
Example
- (void)eventHandler_addEventHandler {
void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
[self printLogAndShowAlertWithData:[message prettyJsonString] error:nil alertTitle:@"addEventHandler Result"];
if ([message.category isEqualToString:kTCGBServerPushAppKickoutMessageReceived] == YES) {
TCGBGamebaseEventServerPushData* serverPushData = [TCGBGamebaseEventServerPushData gamebaseEventServerPushDataFromJsonString:message.data];
if (serverPushData != nil) {
//TODO: process server push
}
} else if ([message.category isEqualToString:kTCGBServerPushAppKickout] == YES) {
TCGBGamebaseEventServerPushData* serverPushData = [TCGBGamebaseEventServerPushData gamebaseEventServerPushDataFromJsonString:message.data];
if (serverPushData != nil) {
//TODO: process server push
}
} else if ([message.category isEqualToString:kTCGBServerPushTransferKickout] == YES) {
TCGBGamebaseEventServerPushData* serverPushData = [TCGBGamebaseEventServerPushData gamebaseEventServerPushDataFromJsonString:message.data];
if (serverPushData != nil) {
//TODO: process server push
}
}
};
[TCGBGamebase addEventHandler:eventHandler];
}
VO
@interface TCGBGamebaseEventObserverData : NSObject <TCGBValueObject>
@property (nonatomic, assign) int64_t code;
@property (nonatomic, strong, nullable) NSString* message;
@property (nonatomic, strong, nullable) NSString* extras;
'@end
Example
- (void)eventHandler_addEventHandler {
void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
if ([message.category isEqualToString:kTCGBObserverLaunching] == YES) {
TCGBGamebaseEventObserverData* observerData = [TCGBGamebaseEventObserverData gamebaseEventObserverDataFromJsonString:message.data];
if (observerData != nil) {
int launchingStatusCode = observerData.code;
NSString* launchingMessage = observerData.message;
switch (launchingStatusCode) {
case IN_SERVICE:
// Finished maintenance.
break;
case INSPECTING_SERVICE:
case INSPECTING_ALL_SERVICES:
// Under maintenance.
break;
...
}
}
}
else if ([message.category isEqualToString:kTCGBObserverHeartbeat] == YES) {
TCGBGamebaseEventObserverData* observerData = [TCGBGamebaseEventObserverData gamebaseEventObserverDataFromJsonString:message.data];
int errorCode = observerData.code;
switch (errorCode) {
case TCGB_ERROR_INVALID_MEMBER:
// You can check the invalid user session in here.
// ex) After transferred account to another device.
break;
case TCGB_ERROR_BANNED_MEMBER:
// You can check the banned user session in here.
break;
}
}
else if ([message.category isEqualToString:kTCGBObserverNetwork] == YES) {
TCGBGamebaseEventObserverData* observerData = [TCGBGamebaseEventObserverData gamebaseEventObserverDataFromJsonString:message.data];
NetworkStatus networkTypeCode = observerData.code;
// You can check the changed network status in here.
if (networkTypeCode == NotReachable || networkTypeCode == ReachabilityIsNotDefined) {
// Network disconnected.
} else {
// Network connected.
}
}
};
[TCGBGamebase addEventHandler:eventHandler];
}
Example
- (void)eventHandler_addEventHandler {
void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
TCGBPurchasableReceipt* receipt = [TCGBPurchasableReceipt purchasableReceiptFromJsonString:message.data];
if (receipt != nil) {
// If user purchase item from appstore promoting iap
// this event will be occurred.
}
};
[TCGBGamebase addEventHandler:eventHandler];
}
VO
@interface TCGBPushMessage : NSObject <TCGBValueObject>
@property (nonatomic, strong, nonnull) NSString* identifier;
@property (nonatomic, strong, nullable) NSString* title;
@property (nonatomic, strong, nullable) NSString* body;
@property (nonatomic, strong, nonnull) NSString* extras;
@end
Example
- (void)eventHandler_addEventHandler {
void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
if ([message.category isEqualToString:kTCGBPushReceivedMessage] == YES) {
TCGBPushMessage* pushMessage = [TCGBPushMessage pushMessageFromJsonString:message.data];
if (pusMessage != nil) {
//TODO: process
}
}
};
[TCGBGamebase addEventHandler:eventHandler];
}
Example
- (void)eventHandler_addEventHandler {
void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
if ([message.category isEqualToString:kTCGBPushClickMessage] == YES) {
TCGBPushMessage* pushMessage = [TCGBPushMessage pushMessageFromJsonString:message.data];
if (pusMessage != nil) {
//TODO: process
}
}
};
[TCGBGamebase addEventHandler:eventHandler];
}
VO
@interface TCGBPushAction : NSObject <TCGBValueObject>
@property (nonatomic, strong, nonnull) NSString* actionType;
@property (nonatomic, strong, nullable) TCGBPushMessage* message;
@property (nonatomic, strong, nullable) NSString* userText;
@end
Example
- (void)eventHandler_addEventHandler {
void(^eventHandler)(TCGBGamebaseEventMessage *) = ^(TCGBGamebaseEventMessage * _Nonnull message) {
if ([message.category isEqualToString:kTCGBPushClickAction] == YES) {
TCGBPushAction* pushMessage = [TCGBPushAction pushActionFromJsonString:message.data];
if (pushAction != nil) {
//TODO: process
}
}
};
[TCGBGamebase addEventHandler:eventHandler];
}
ゲーム指標をGamebaseサーバーに伝送できます。
[注意]
Gamebase AnalyticsでサポートするすべてのAPIは、ログイン後に呼び出すことができます。
[TIP]
TCGBPurchaseのrequestPurchaseWithItemSeq:viewController:completion APIを呼び出して決済するか、setPromotionIAPHandlerを呼び出してプロモーション決済を完了すると、自動的に指標を伝送します。
Analyticsコンソールの使用方法は、下記のガイドを参照してください。
ゲームログイン後、ゲームユーザーレベル情報を指標として伝送できます。
[注意]
ゲームログイン後にsetGameUserData APIを呼び出さない場合、他の指標でレベル情報が抜ける場合があります。
APIの呼び出しに必要なパラメータは下記の通りです。
ゲームログイン後にsetGameUserData APIを呼び出さない場合、他の指標でレベル情報が抜ける場合があります。
GameUserData
Name | Mandatory(M) / Optional(O) | type | Desc |
---|---|---|---|
userLevel | M | int | ゲームユーザーレベルを表すフィールドです。 |
channelId | O | String | チャンネルを表すフィールドです。 |
characterId | O | String | キャラクター名を表すフィールドです。 |
classId | O | String | 職業を表すフィールドです。 |
API
+ (void)setGameUserData:(nonnull TCGBAnalyticsGameUserData *)gameUserData;
Example
- (void)setGameUserDataWithLevel:(int)level channelId:(NSString *)channelId characterId:(NSString *)characterId {
TCGBAnalyticsGameUserData* gameUserData = [TCGBAnalyticsGameUserData gameUserDataWithUserLevel:level];
[gameUserData setChannelId:channelId];
[gameUserData setCharacterId:characterId];
[TCGBAnalytics setGameUserData:gameUserData];
}
レベルアップすると、ゲームユーザーレベル情報を指標として伝送できます。
APIの呼び出しに必要なパラメータは下記の通りです。
LevelUpData
Name | Mandatory (M) / Optional (O) | type | Desc |
---|---|---|---|
userLevel | M | int | ゲームユーザーレベルを表すフィールドです。 |
levelUpTime | M | long | Epoch timeで入力します。ミリ秒(ms)単位で入力します。 |
API
+ (void)traceLevelUpWithLevelUpData:(nonnull TCGBAnalyticsLevelUpData *)levelUpData;
Example
- (void)traceLevelUpWith:(int)level levelUpTime:(long long)levelUpTime channelId:(NSString *)channelId characterId:(NSString *)characterId {
TCGBAnalyticsLevelUpData* levelUpData = [TCGBAnalyticsLevelUpData levelUpDataWithUserLevel:level levelUpTime:levelUpTime];
[TCGBAnalytics traceLevelUpWithLevelUpData:levelUpData];
}
Gamebaseでは顧客からの問い合わせに対応するための機能を提供します。
[TIP]
NHN Cloud Contactサービスと連動して使用すると、より簡単に顧客からのお問い合わせに対応できます。 詳細なNHN Cloud Contactサービスの利用方法は以下のガイドを参照してください。 NHN Cloud Online Contact Guide
Gamebaseコンソール > App > InApp URL > Service center では、以下のように3つのタイプのサポートを選択できます。
Customer Service Type | Required Login |
---|---|
Developer customer center | X |
Gamebase customer center | △ |
NHN Cloud Online Contact | △ |
各タイプに応じて、Gamebase SDKのサポートAPIは次のURLを使用します。
Gamebaseコンソールに入力したサポートURL Webビューを表示できる機能です。 TCGBContactConfigurationでURLに追加情報を伝達できます。
TCGBContactConfiguration
Parameter | Mandatory(M) / Optional(O) |
Values | Description |
---|---|---|---|
userName | O | string | ユーザー名前(ニックネーム) default : nil |
additionalURL | O | string | 開発会社独自のサポートURLの後ろにつく追加のURL サポートタイプが CUSTOM の場合にのみ使用default : nil |
additionalParameters | O | dictionary<string, string> | サポートURLの後ろにつく追加のパラメータ default : nil |
extraData | O | dictionary<string, string> | 開発会社が任意のextra dataをサポートオープン時に伝達 default : nil |
API
+ (void)openContactWithViewController:(UIViewController *)viewController
completion:(void(^)(TCGBError *error))completion;
+ (void)openContactWithViewController:(UIViewController *)viewController
configuration:(TCGBContactConfiguration *)configuration
completion:(void(^)(TCGBError *error))completion;
Error Code
Error | Error Code | Description |
---|---|---|
TCGB_ERROR_NOT_INITIALIZED | 1 | Gamebaseが初期化されていません。 |
TCGB_ERROR_UI_CONTACT_FAIL_INVALID_URL | 6911 | サポートURLが存在しません。 GamebaseコンソールのサポートURLを確認してください。 |
TCGB_ERROR_UI_CONTACT_FAIL_ISSUE_SHORT_TERM_TICKET | 6912 | ユーザーを識別するための臨時チケットの発行に失敗しました。 |
Example
[TCGBContact openContactWithViewController:self completion:^(TCGBError *error) {
if ([TCGBGamebase isSuccessWithError:error] == YES) {
// A user close the contact web view.
} else if (error.code == TCGB_ERROR_UI_CONTACT_FAIL_INVALID_URL) {
// TODO: Gamebase Console Service Center URL is invalid.
// Please check the url field in the TOAST Gamebase Console.
} else {
// TODO: Error occur when opening the contact web view.
}
}];
[注意]
サポートへのお問い合わせの際、ファイルを添付するために、カメラまたはアルバムへのアクセスが必要な場合があります。 info.plistに'Privacy - Camera Usage Description', 'Privacy — Microphone Usage Description'設定をしてください。
サポートWebビューを表示するのに使用されるURLを取得できます。
API
+ (void)requestContactURLWithCompletion:(void(^)(NSString *contactUrl, TCGBError *error))completion;
+ (void)requestContactURLWithConfiguration:(TCGBContactConfiguration *)configuration
completion:(void(^)(NSString *contactUrl, TCGBError *error))completion;
Error Code
Error | Error Code | Description |
---|---|---|
TCGB_ERROR_NOT_INITIALIZED | 1 | Gamebaseが初期化されていません。 |
TCGB_ERROR_UI_CONTACT_FAIL_INVALID_URL | 6911 | サポートURLが存在しません。 GamebaseコンソールのサポートURLを確認してください。 |
TCGB_ERROR_UI_CONTACT_FAIL_ISSUE_SHORT_TERM_TICKET | 6912 | ユーザーを識別するための臨時チケットの発行に失敗しました。 |
Example
[TCGBContact requestContactURLWithCompletion^(NSString *contactUrl, TCGBError *error){
if ([TCGBGamebase isSuccessWithError:error] == YES) {
NSLog(@"ContactURL : %@", contactUrl);
} else if (error.code == TCGB_ERROR_UI_CONTACT_FAIL_INVALID_URL) {
// TODO: Gamebase Console Service Center URL is invalid.
// Please check the url field in the TOAST Gamebase Console.
} else {
// TODO: Error occur when request contact url.
}
}];