Hive에 가입 시 입력된 유저 정보를 요청할 수 있다.
Hive 메시지 수신 확인 기능 (1.8.0+)
- 본인이 받은 Hive 신규 메시지 개수 정보를 요청 한다.
- 메시지 개수 정보를 활용해서 게임 내 Hive 메시지 아이콘을 구성 할 수 있다.
(메시지 페이지 호출은 웹뷰 > 소셜 웹뷰 > SNS Show 1.8.0+ 내용 참고)
Hive 메시지 이용 가능 대상
- 게스트 유저는 Hive 메시지 이용 불가(Hive 유저만 지원)
- 게임 친구가 아니어도 Hive 친구 관계라면 이용 가능
(단, Hive 계정설정 메시지 수신 옵션에 모두에게 받기인 경우 Hive 친구가 아니어도 전송 가능)
Hive 메시지 아이콘 UI
- UI 디자인 및 개발은 각 게임에서 직접 제작 후 게임 내 적용 필요
- 새로 온 메시지 알림 뱃지는 신규 메시지 있으면 N, 없으면 뱃지 비노출 처리 필요
- New 뱃지 노출 시점은 게임 내 Hive 메시지 아이콘이 노출되는 시점에만 체크
Hive 메시지 New 뱃지 노출기준
- 노출: Hive 메시지에 새로 온 메시지가 있는 경우 (N으로만 노출 되고 숫자 노출 없음)
- 비 노출: 새로 온 Hive 메시지 모두 메시지 상세 페이지에서 읽어야지만 New 뱃지 비 노출
(C2SModuleSns_Show에서 type:message일 때 메시지 페이지로 이동하여 확인가능)
C2SModuleSns_User
Hive 로그인한 사용자의 정보를 요청한다. 또는 페이스북 관련된 정보를 요청한다.
본인이 받은 Hive 새 메시지의 개수 정보를 요청한다. 해당 정보로 뱃지 정보 구성이 가능하다. ( 1.8.0+)
( type == “facebook” 일 때 페이스북 로그인이 안 되었을 경우 페이스북 로그인 창이 뜨게된다.)
Request
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
vid | string, string array |
vid 대상의 정보를 요청 N/A : 자신의 정보를 요청 (게스트 로그인일 땐 사용불가) |
all | |
type | string | “facebook“: 페이스북 본인의 정보 요청 “message“: 본인의 받은 새 메시지 개수 요청 (1.8.0+) |
all | |
facebookId | string | 페이스북 AppScopeId 입력할 경우 해당 id의 페이스북 유저 프로필 이미지 요청 | all | 1.3.0+ |
Result
요청한 Hive 로그인 혹은 페이스북 관련 유저 정보를 전달 받는다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
Hive 유저 정보 요청 (service = null) | ||||
list | Dictionary | vid로 요청 했을때 유저들의 정보를 저장한 배열 | all | |
자신의 페이스북 유저 정보 요청 (service = “facebook”) | ||||
service | string | “facebook”: 페이스북 본인의 정보를 요청과 페이스북 프로필 이미지를 얻을 경우 |
all | 1.3.0+ |
uid | string | facebook App Scope ID | all | 1.3.0+ |
string | 이메일 | all | 1.3.0+ | |
gender | string | 성별 | all | 1.3.0+ |
language | string | 언어 | all | 1.3.0+ |
country | string | 국가코드 | all | 1.3.0+ |
username | string | 유저 이름 | all | 1.3.0+ |
second_email | string | 보조 이메일 | all | 1.3.0+ |
about | string | null | all | 1.8.10+ |
페이스북 프로필 이미지 URL 요청 (service = “facebook” 이고 facebookId = facebook App Scope ID) | ||||
service | string | “facebook”: 페이스북 본인의 정보를 요청과 페이스북 프로필 이미지를 얻을 경우 |
all | 1.3.0+ |
url | string | 페이스북 프로필 이미지 url | all | 1.3.0+ |
자신의 Hive 계정 새 메시지 개수 요청 (service = “message”) | ||||
messageCount | string | 받은 새 메시지의 개수 | all | 1.8.0+ |
array type for list
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
vid | string | 로그인 센터 고유 ID | all | |
uid | string | 게스트가 아닌 유저의 플랫폼 ID | all | |
nickName | string | 닉네임 (Hive ID) | all | |
profileImageURL | string | 프로필 이미지의 링크 | all | |
alias | string | (선택 사용) 개별 사용자가 설정한 이름 | all | |
country | string | (선택 사용) 유저의 국가 정보 | withhive | |
birthday | string | (선택 사용) 생년월일 | withhive | |
gender | string | (선택 사용) 성별 | withhive | |
comment | string | (선택 사용) 오늘의 한마디 | withhive | |
string | (선택 사용) 이메일 이메일이 없는 경우는 아래와 같다 1. 페이스북으로 가입했으나 이메일 인증을 하지 않은 계정일 경우 2. 시나웨이보로 가입했을 경우 3. 최근 구글로 가입했으나 퍼미션이 없을 경우 |
withhive | ||
facebookId | string | (선택 사용) 페이스북 ID | withhive | |
newMessageCount | 32bit signed |
(선택 사용) 자신의 정보일때만 데이터가 존재함, 받은 메시지의 개수 |
withhive | |
newFriendCount | 32bit signed |
(선택 사용) 자신의 정보일때만 데이터가 존재함, 새로 수락된 친구의 카운트 |
withhive | |
newRequestCount | 32bit signed |
(선택 사용) 자신의 정보일때만 데이터가 존재함, 받은 친구 요청 카운트 |
withhive |
샘플 코드
Unity®
API Reference: C2SModule.Sns.User
- public static bool C2SModule.Sns.User(C2SModule.Parameter arg, out C2SModule.Error error);
- public static bool C2SModule.Sns.User(C2SModule.Parameter arg, out C2SModule.Error error,
C2SModule.CompletionHandler completionHandler);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
C2SModule.Parameter arg; arg["vid"] = "1111"; C2SModule.Error error; C2SModule.Sns.User( arg, out error, delegate( C2SModule.Parameter arg2, C2SModule.Error error2) { if( arg2.ContainsKey("list") ) { List< object> userInfoList = arg2["list"] as List< object>; foreach( Dictionary<string, object=""> iter in userInfoList ) { // UserInfo 처리 } } }); /* 1.8.0 추가 */ /* 새로 받은 메시지가 있는지 확인 */ C2SModule.Parameter arg = new C2SModule.Parameter(); arg["type"] = "message"; C2SModule.Error error; if(!C2SModule.Sns.User(arg, out error, delegate(Parameter userArg, Error userError) { // messageCount 처리 })) |
Unreal
API Reference: HiveSDKUESns_User
- void HiveSDKUESns_User(FString fstrJson);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
TSharedPtr arg = MakeShareable(new FJsonObject); TArray<TSharedPtr> vidList; vidList.Add(MakeShareable(new FJsonValueString(TEXT("11112333424")))); vidList.Add(MakeShareable(new FJsonValueString(TEXT("11100011342")))); arg->SetArrayField(TEXT("vid"), vidList); FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(arg.ToSharedRef(), Writer); FHiveSDKModule::Get().HiveSDKUESns_User(OutputString); /* 1.8.0 추가 */ /* 새로 받은 메시지가 있는지 확인 */ TSharedPtr arg = MakeShareable(new FJsonObject); arg->SetStringField(TEXT("type"), TEXT("message")); TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(arg.ToSharedRef(), Writer); FHiveSDKModule::Get().HiveSDKUESns_User(OutputString); |
Cocos2d-x
API Reference: C2SModuleSns_User
- bool C2SModuleSns_User(const char* pstrJson, C2SModule_Cocos2dx::C2SModuleError* pkError,
C2SModule_Cocos2dx::C2SModuleCompletionHandler* completionHandler = NULL);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleSns_User( (char*)NULL, &error ) == false ) { CCLog( "====>>>> User Info error (%s)", error.get()->GetMessage() ); } /* 1.8.0 추가 */ /* 새로 받은 메시지가 있는지 확인 */ Json::Value arg; arg["type"] = "message"; Json::StyledWriter writer; std::string strJSON = writer.write(arg); C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleSns_User( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Sns User error (%s)", error.get()->GetMessage() ); } |
iOS
API Reference: C2SModuleSns User
- +(BOOL)User:(id)arg error:(NSError**)error;
- +(BOOL)User:(id)arg error:(NSError**)error completionHandler:(void(^)(NSDictionary *, NSError*))
completionHandler;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
NSArray* vidList = @[@"123123",@"1233333"] [C2SModuleSns User:@{@"vid":vidList} error:&error completionHandler:^(NSDictionary *resultArg, NSError *resultError) { if(resultError == nil) { //유저 정보 처리 } }]; /* 1.8.0 추가 */ /* 새로 받은 메시지가 있는지 확인 */ NSDictionary *arg = @{@"type" : @"message"}; [C2SModuleSns User:arg error:&error completionHandler:^(NSDictionary *resultArg, NSError *resultError) { if(resultError == nil) { // messageCount 처리 } }]; |
타임존 API
Public API
getTimezone
요청 데이터 중 IP 필드가 존재하면 해당 데이터를 이용하여 타임존 정보를 반환하고, 존재하지 않을 경우엔 요청자의 IP를 타임존 서비스에서 직접 판단한여 해당 IP의 타임존 정보를 반환함
Request 정보
상용 URL | https://timezone.qpyou.cn/public/api/getTimezone |
---|---|
Sandbox URL | https://sandbox-timezone.qpyou.cn/public/api/getTimezone |
Method | POST |
Request Parameter
Key | Type | Value | 비고 |
---|---|---|---|
ip | String | 아이피 | 선택 사용 |
Response
Key | Type | Value |
---|---|---|
zone_id | String | 타임존디비에서 제공하는 지역의 고유 식별자값 |
country_code | String | 국가 코드 |
zone_name | String | 지역 이름 |
country_name | String | 국가명 |
abbreviation | String | 표준시 약어 |
gmt_offset | String | 시차(초) |
dst | String | summer time 적용 여부 |
Sample
Request | { “ip”: “127.0.0.1” } |
---|---|
Response | { “result_code” : 0, “result_message”: “Success”, “timezone” : { “zone_id”:”212″, “country_code”:”KR”, “zone_name”:”Asia/Seoul”, “country_name”:”South Korea”, “abbreviation”:”KST”, “gmt_offset”:”32400″, “dst”: “0” } } |
getTimezoneByCountryCode
국가 코드를 이용하여 관련 타임존 정보를 반환
Request 정보
상용 URL | https://timezone.qpyou.cn/public/api/getTimezoneByCountryCode |
---|---|
Sandbox URL | https://sandbox-timezone.qpyou.cn/public/api/getTimezoneByCountryCode |
Method | POST |
Request Parameter
Key | Type | Value | 비고 |
---|---|---|---|
country_code | String | 국가 코드 | Required |
Response
Key | Type | Value |
---|---|---|
zone_id | String | 타임존 DB에서 제공하는 지역의 고유 식별자값 |
country_code | String | 국가 코드 |
zone_name | String | 지역 이름 |
country_name | String | 국가명 |
abbreviation | String | 표준시 약어 |
gmt_offset | String | 시차(초) |
dst | String | summer time 적용 여부 |
Sample
Request | { “country_code”: “KR” } |
---|---|
Response | { “result_code” : 0, “result_message”: “Success”, “timezone” : { “zone_id”:”212″, “country_code”:”KR”, “zone_name”:”Asia/Seoul”, “country_name”:”South Korea”, “abbreviation”:”KST”, “gmt_offset”:”32400″, “dst”: “0” } } |
Private API
getAllTimezone
모든 타임존 정보를 반환
Request 정보
상용 URL | https://timezone.qpyou.cn/private/api/getAllTimezone |
---|---|
Sandbox URL | https://sandbox-timezone.qpyou.cn/private/api/getAllTimezone |
Method | POST |
Request Parameter
Key | Type | Value | 비고 |
---|---|---|---|
client_key | String | 클라이언트 키 | 필수 사용 |
Response
Key | Type | Value |
---|---|---|
zone_id | String | 타임존디비에서 제공하는 지역의 고유 식별자값 |
country_code | String | 국가 코드 |
zone_name | String | 지역 이름 |
country_name | String | 국가명 |
abbreviation | String | 표준시 약어 |
gmt_offset | String | 시차(초) |
dst | String | summer time 적용 여부 |
Sample
Request | { “client_key”: “0ab687c6a138022a66174d53273e3d41717e” } |
---|---|
Response | { “result_code” : 0, “result_message”: “Success”, “timezone” : [{ “zone_id”:”406″, “country_code”:”US”, “zone_name”:”America/Adak”, “country_name”:”United States”, “abbreviation”:”HST”, “gmt_offset”:”-36000″, “dst”: “0” }, { “zone_id”:”407″, “country_code”:”US”, “zone_name”:”Pacific/Honolulu”, “country_name”:”United States”, “abbreviation”:”HST”, “gmt_offset”:”-36000″, “dst”: “0” }, { “zone_id”:”408″, “country_code”:”UY”, “zone_name”:”America/Montevideo”, “country_name”:”Uruguay”, “abbreviation”:”UYT”, “gmt_offset”:”-10800″, “dst”: “0” }, { “zone_id”:”409″, “country_code”:”UZ”, “zone_name”:”Asia/Samarkand”, “country_name”:”Uzbekistan”, “abbreviation”:”+05″, “gmt_offset”:”18000″, “dst”: “0” }, { “zone_id”:”410″, “country_code”:”UZ”, “zone_name”:”Asia/Tashkent”, “country_name”:”Uzbekistan”, “abbreviation”:”+05″, “gmt_offset”:”18000″, “dst”: “0” }, { “zone_id”:”411″, “country_code”:”VA”, “zone_name”:”Europe/Vatican”, “country_name”:”Vatican”, “abbreviation”:”CET”, “gmt_offset”:”3600″, “dst”: “0” }, … ] } |
Result Code
API 호출 시 Return 되는 코드와 Message
Code | Message | Comment | HTTP Status code |
---|---|---|---|
0 | Success | 성공 | 200 |
1 | MissingPostData | 요청 데이터가 누락됨 | 200 |
2 | InvalidPostData | 요청 데이터가 Json String이 아님 | 200 |
3 | MissingGetData | 요청 데이터가 누락됨 | 200 |
11 | MissingDomain | email 또는 receiver의 도메인이 누락됨 | 200 |
12 | InvalidDomain | email 또는 receiver의 도메인이 유효하지 않음 | 200 |
13 | DomainOnBlackList | email 또는 receiver의 도메인이 블랙리스트에 포함되어 있음 | 200 |
21 | MissingEmail | email 또는 receiver 필드가 누락됨 | 200 |
22 | InvalidEmail | email 또는 receiver 형식이 올바르지 않음 | 200 |
23 | EmailOnBlackList | email 또는 receiver가 블랙 리스트에 포함되어 있음 | 200 |
24 | EmailNotFoundFromBlackList | email이 블랙 리스트에 포함되어 있지 않음 | 200 |
25 | EmailOnBouceList | email 또는 receiver가 바운스 리스트에 포함되어 있음 | 200 |
26 | EmailNotFoundFromBounceList | email이 바운스 리스트에 포함되어 있지 않음 | 200 |
31 | MissingEmailSender | sender 필드가 누락됨 | 200 |
32 | MissingEmailReceiver | receiver 필드가 누락됨 | 200 |
33 | MissingEmailSubject | subject 필드가 누락됨 | 200 |
34 | MissingEmailBody | body 필드가 누락됨 | 200 |
41 | MissingClientName | client_name 필드가 누락됨 | 200 |
42 | MissingLimitTime | limit_time 필드가 누락됨 | 200 |
43 | MissingLimitCount | limit_count 필드가 누락됨 | 200 |
44 | ExceedUsageLimit | 제한횟수 초과 | 200 |
101 | MissingClientKey | client_key 필드가 누락됨 | 401 |
102 | InvalidClientKey | client_key가 등록되어 있지 않음 | 401 |
103 | AlreadyExsistClient | client_name이 이미 등록 되어 있음 | 401 |
401 | FailGetClientId | client_id 데이터 가져오기 실패 | 500 |
402 | FailGetCurCount | cur_count 데이터 가져오기 실패 | 500 |
403 | FailGetLimitCount | limit_count 데이터 가져오기 실패 | 500 |
404 | FailGetLimitTime | limit_time 데이터 가져오기 실패 | 500 |
405 | FailGetLimitDate | limit_date 데이터 가져오기 실패 | 500 |
406 | FailGetCurDate | cur_date 데이터 가져오기 실패 | 500 |
501 | DBConnectionError | 데이터베이스 서버 연결 실패 | 500 |
502 | DBQueryError | 데이터베이스 쿼리 실행 오류 | 500 |
601 | MQConnectionError | 메시지 큐 서버 연결 실패 | 500 |
602 | MQPublishError | 메시지 큐로 메시지 전송 실패 | 500 |
603 | MQConsumeError | 메시지 큐에서 메시지 수신 실패 | 500 |
999 | UnknownServerError | 알 수 없는 서버 오류 | 500 |