이슈
- 페이스북 초대 즉시 보상은 페이스북 정책 위반으로 모니터링 시 바로 API가 막힐 리스크 있음
- 기존 초대 API 사용을 위해서는 Canvas URL을 등록하여야 하나, 현재 Canvas URL은 페이스북에서 지칭하는 Canvas URL이 아님
- Hive SDK v1.3.0+ 에서는 페이스북 클라이언트 사이드 로그인을 적용해야 하며 페이스북 등록 설정 시 페이스북 캔버스를 등록 하면 안됨
- 페이스북 캔버스 삭제되면서 페이스북 친구 초대 메세지는 모바일 웹 과 페이스북 앱에서만 확인 가능함
(PC에서 확인 불가)
해결 방법
- 게임에서 페이스북 친구 초대 시 바로 보상을 주는 기획의 변경 필요
- 친구 초대 관련 API 를 페이스북 UI Dialog로 변경 구현
- 백오피스 AppID 관리 메뉴를 통해 페북 클라이언트 로그인 여부를 on/off 할 수 있음
적용 버전
* Hive SDK v1.3.0 이상 페이스북 친구 초대 Dialog방식으로 변경
Facebook 친구초대 도식도
C2SModuleSns_Friends
친구 정보를 요청한다.
Hive SDK v1.3.0 이상에서 페이스북으로 나를 초대한 유저의 정보를 얻어올 수 있다.
(Facebook 친구 초대 하기관련된 내용을 빨간색으로 표시)
Request
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
type | string | “game” : 게임 친구를 요청 “other” : 게임 하지않는 친구를 요청 “all” : 전체 친구를 요청 N/A : 전체 친구를 요청 “friendsList” : facebook 친구이면서 해당 게임을 하는 Hive 유저 정보 (1.10.2b+) “receivedInvite” : service가 facebook일 경우에만 해당. 추가로 전달 할 경우 해당 게임에서 나를 초대한 친구 리스트 정보 목록 (1.3.0+) |
all | |
service | string | “facebook” : 페이스북의 친구리스트를 요청 N/A : Hive 친구리스트를 요청 |
all | |
limit | int | service가 facebook일 경우 초대한 친구 리스트를 받아올 갯수 입력하지 않을 경우 가장 최근에 초대한 1명의 정보만 받아옴 |
all | 1.3.0+ |
Response
친구에 대해 요청한 정보를 받는다.
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
service | string | “facebook” N/A |
all | |
type | string | “game” “other” “all” N/A “friendsList” (1.10.3+) “receivedInvite” |
all | |
game | array | 게임 친구 리스트 | ||
other | array | 게임하지 않는 친구 리스트 | ||
service == “facebook” && type == “receivedInvite” | ||||
receivedInvite | array | 나를 초대한 페북 유저들 | all | 1.3.0+ |
service == “facebook” && type == “friendsList” | ||||
list | array | facebook 친구이면서 해당 게임을 하는 Hive 유저 정보 리스트 | 1.10.2b+ |
array type for Hive game and other
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
vid | string | 로그인 센터 id, 게임 친구가 아닐 경우 vid = 0 | all | |
uid | string | Hive platform id | all | |
nickName | string | 닉네임, Hive id | all | |
profileImageURL | string | 프로필 이미지 다운로드 url | all | |
messageBlocked | bool | true : 메시지가 상대방에 의해 블럭되어 있음 false : 메시지를 보낼 수 있는 상태 |
all | |
isFacebook | bool | 최초 친구 루트 : 페이스북 | all | 1.10.1+ |
isHive | bool | 최초 친구 루트 : Hive | all | 1.10.1+ |
isGame | bool | 최초 친구 루트 : 게임 | all | 1.10.1+ |
isContact | bool | 최초 친구 루트 : 주소록 | all | 1.10.1+ |
array type for list
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
uid | string | Hive uid | all | 1.10.3+ |
vid | string | Hive vid | all | 1.10.3+ |
appScopedId | string | facebook appScopedId | all | 1.10.3+ |
fbUserName | string | facebook 유저 이름 | all | 1.11.3+ |
fbProfileImageURL | string | facebook Profile 이미지 URL | all | 1.11.3+ |
array type for facebook receivedInvite
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
message | string | 초대 내용 | all | |
created_time | string | 초대 보낸 시각(GMT yyyy-mm-d’T’HH:mm:ss+0000 | all | |
application | dictionary | 초대 받은 app정보 | all | |
to | dictionary | 받은 유저 정보 | all | |
from | dictionary | 초대를 보낸 친구의 정보 | all |
dictionary type for application
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
name | string | 어플리케이션 이름 | all | |
id | string | 어플리케이션 FB Key | all |
dictionary type for “to”
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
name | string | 나의 이름 | all | |
id | string | 나의 appscope id | all |
dictionary type for “from”
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
name | string | 초대를 보낸 친구의 이름 | all | |
id | string | 초대를 보낸 친구의 appscope id | all |
샘플 소스
API Reference: C2SModule.Sns.Friends
- public static bool C2SModule.Sns.Friends(C2SModule.Parameter arg, out C2SModule.Error error);
- public static bool C2SModule.Sns.Friends(C2SModule.Parameter arg, out C2SModule.Error error,
C2SModule.CompletionHandler completionHandler);
1 2 3 4 5 6 7 8 9 10 11 12 |
C2SModule.Error error; C2SModule.Parameter arg; arg["service"] = "facebook"; arg["type"] = "receivedInvite"; if( !C2SModule.Sns.Friends( arg, out error, delegate(C2SModule.Parameter arg2, C2SModule.Error error) { // 나를 초대한 친구의 AppScoped ID List List list = arg["receivedInvite"] as List; })) { // Error 시 처리 } |
API Reference: HiveSDKUESns_Friends
- void HiveSDKUESns_Friends(FString fstrJson);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
TSharedPtr arg = MakeShareable(new FJsonObject); arg->SetStringField(TEXT("type"), "receivedInvite"); arg->SetStringField(TEXT("service"), TEXT("facebook")); arg->SetNumberField(TEXT("limit"),10)); FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(arg.ToSharedRef(), Writer); UE_LOG(LogTemp, Warning, TEXT( " sns friendList :.. %s"), *OutputString); FHiveSDKModule::Get().HiveSDKUESns_Friends(OutputString); [result delegate] switch(api){ case C2SModuleApi_SnsFriends: { TSharedPtr arg; TSharedRef< TJsonReader<> > reader = TJsonReaderFactory<>::Create( json ); if ( FJsonSerializer::Deserialize( reader, arg ) == false ){ return; } if( arg->HasField(TEXT("service"))) { FString type = arg->GetStringField(TEXT("type")); if( !type.IsEmpty() && type.Compare("facebook") == 0 ) // std::string id = arg["receivedInvite"][0]["from"]["id"].asString(); TArray<TSharedPtr> receivedInvite; receivedInvite = arg->GetArrayField(TEXT("receivedInvite")); FString id = receivedInvite[0]->AsObject()->GetObjectField(TEXT("from"))->GetStringField(TEXT("id")); UE_LOG(LogTemp, Warning, TEXT( "====>>>> C2SModuleApi_SnsFriends id %s"), *id); } } } } |
API Reference: C2SModuleSns Friends
- +(BOOL)Friends:(id)arg error:(NSError**)error;
- +(BOOL)Friends:(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 20 21 22 23 24 25 26 27 |
NSError* error; NSString* type = @"receivedInvite"; //나를 초대한 친구 목록은 receivedInvite NSString* service = @"facebook"; //얻어올 목록 수, 최근 초대한 친구부터 시간 역순으로 limit만큼 얻어옴( 입력하지 않으면 limit 는 1명 ) NSNumber* limit = [NSNumber numberWithInt:1]; NSMutableDictionary* friendReqArg = [[NSMutableDictionary alloc]init]; [friendReqArg setObject:type forKey:@"type"]; [friendReqArg setObject:service forKey:@"service"]; [friendReqArg setObject:limit forKey:@"limit"]; [C2SModuleSns Friends:friendReqArg error:&error completionHandler:^(NSDictionary *resultArg, NSError *resultError) { if(resultError == nil) { NSMutableArray* friends = [[NSMutableArray alloc]init]; NSString* type = [resultArg objectForKey:@"type"]; NSString* service = [resultArg objectForKey:@"service"]; if(type != nil && [type isEqualToString:@"receivedInvite"] && service != nil && [service isEqualToString:@"facebook"]) { friends = [resultArg objectForKey:@"receivedInvite"]; } for(NSDictionary* friend n friends) { //친구 데이터를 파싱합니다. } } }]; |
API Reference: C2SModuleSns_Friends
- bool C2SModuleSns_Friends(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 20 21 22 23 24 25 26 27 28 29 30 31 |
JJson::Value arg; arg["service"] = "facebook"; arg["type"] = "receivedInvite"; arg["limit"] = 10; // 생략시 가장 최근에 초대한 1명 Json::StyledWriter writer; std::string strJSON = writer.write(arg); C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleSns_Friends( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Facebook Invited List error (%s)", error.get()->GetMessage() );} [result delegate] switch(api){ case C2SModuleApi_SnsFriends: { Json::Value arg; Json::Reader reader; if( reader.parse(json, arg) == false ) { CCLog( "====>>>> parse failed : (%s)", json ); return; } if( arg.isMember("service") ) { std::string type = arg.get("type", "").asString(); if(!type.empty() && type.compare("facebook") == 0) { std::string id = arg["receivedInvite"][0]["from"]["id"].asString(); CCLog("====>>>> C2SModuleApi_SnsFriends id %s", value.c_str()); } } } } |
C2SModuleSns_Message
대상에게 메시지 발송
(페이스북 친구 초대 하기 관련된 내용을 빨간색으로 표시) 를 발송한다.
Request
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
Hive 유저 메시지 | ||||
vid | string, string array |
메시지를 받는 유저의 로그인 센터 아이디 | all | |
uid | string, string array |
guest가 아닌 유저의 platform id | all | |
message | string | 메시지의 내용 | all | |
imageURL | string | 전송될 이미지의 url | all | |
thumbnailURL | string | 썸네일의 url | all | |
usePush | bool | true 일 경우 푸시를 발송한다. | all | |
invite | bool | true 일 경우 초대 메시지를 전송한다. | all | |
linkShare | bool | true 일 경우 집객 초대 메세지를 전송한다. (invite가 false거나 없을 때 적용된다.) |
all | 1.9.0+ |
linkShareURL | string | 집객 초대 URL (Promotion_Acquisition의 콜백값 ‘inviteHivemsgLink’) |
all | 1.9.0+ |
facebook 친구리스트 dialog 사용 시 | ||||
service | string | “facebook” | all | 1.3.0+ |
type | string | “inviteDialog” 페이스북 친구를 선택하는 다이얼 로그를 띄움 | all | 1.3.0+ |
message | string | 메시지 내용 | all | 1.3.0+ |
Response
메시지를 받는 유저의 정보를 받는다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
Hive 유저 메시지인 경우 | ||||
vid | string, string array |
메시지를 받는 유저의 vid | all | |
uid | string, string array |
메시지를 받는 유저의 uid | all | |
facebook 유저 메시지인 경우 | ||||
service | string | “facebook” | all | 1.3.0+ |
facebookId | string, string array |
메시지를 받는 유저의 appscope id | all | 1.3.0+ |
샘플 소스
API Reference: C2SModule.Sns.Message
- public static bool C2SModule.Sns.Message(C2SModule.Parameter arg, out C2SModule.Error error);
- public static bool C2SModule.Sns.Message(C2SModule.Parameter arg, out C2SModule.Error error,
C2SModule.CompletionHandler completionHandler);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
C2SModule.Error error; C2SModule.Parameter arg; arg["service"] = "facebook"; arg["type"] = "inviteDialog"; arg["message"] = "test message"; if( !C2SModule.Sns.Message( arg, out error, delegate(C2SModule.Parameter arg2, C2SModule.Error error) { // 초대한 Facebook 친구 AppScoped ID List list = arg2["facebookId"] as List; })) { // Error 시 처리 } |
API Reference: HiveSDKUESns_Message
- void HiveSDKUESns_Message(FString fstrJson);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
TSharedPtr arg = MakeShareable(new FJsonObject); arg->SetStringField(TEXT("service"), TEXT("facebook")); arg->SetStringField(TEXT("type"), TEXT("inviteDialog")); arg->SetStringField(TEXT("message"), TEXT("Test Message")); FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(arg.ToSharedRef(), Writer); FHiveSDKModule::Get().HiveSDKUESns_Message(OutputString); [result delegate] void MYGAMECLASS::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message){ switch(api) { case C2SModuleApi_SnsMessage: { TSharedPtr arg; TSharedRef< TJsonReader<> > reader = TJsonReaderFactory<>::Create( json ); if ( FJsonSerializer::Deserialize( reader, arg ) == false ){ return; } if( arg->HasField(TEXT("service"))) { FString service = arg->GetStringField(TEXT("service")); if( ! service.IsEmpty() && service.Compare("facebook") == 0 ) //친구 초대를 성공한 경우 결과 인자로 "service", "facebookId"가 넘어오며, // 취소등의 이유로 실패한 경우 "service" 인자만 넘어온다. UE_LOG(LogTemp, Warning, TEXT( "====>>>> C2SModuleApi_SnsMessage service : %s"), *service); if( arg->HasField(TEXT("facebookId")) ) { //메세지 전송 실패할 경우 해당 값은 안내려온다. FString facebookId = (arg->GetArrayField(TEXT("facebookId")))[0]->AsString(); } } } } |
API Reference: C2SModuleSns Message
- +(BOOL)Message:(id)arg error:(NSError**)error;
- +(BOOL)Message:(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 20 21 22 23 24 |
NSString* type = @"inviteDialog"; //초대 다이얼로그를 이용해 게임에 초대합니다. NSString* message = @"XX게임에 초대합니다!"; NSError* error; NSMutableDictionary* arg = [[NSMutableDictionary alloc]init]; //메세지 보내는 타입 설정. [arg setObject:type forKey:@"type"]; //서비스 설정 [arg setObject:@"facebook" forKey:@"service"]; //메세지 [arg setObject:message forKey:@"message"]; [C2SModuleSns Message:arg error:&error completionHandler:^(NSDictionary *resultArg, NSError *resultError) { if(resultError == nil) { NSString* service = [resultArg objectForKey:@"service"]; if(service != nil && [service isEqualToString:@"facebook"]) { //초대를 발송한 유저들의 AppScope ID NSArray* inviteAppScopeIDList = [resultArg objectForKey:@"facebookId"]; } } }]; |
API Reference: C2SModuleSns_Message
- bool C2SModuleSns_Message(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 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Json::Value arg; arg["service"] = "facebook"; arg["type"] = "inviteDialog"; arg["message"] = "Test Message"; Json::StyledWriter writer; std::string strJSON = writer.write(arg); C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleSns_Message( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Facebook Invite Dialog error (%s)", error.get()->GetMessage() ); } [result delegate] void SampleProject::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message){ switch(api) { case C2SModuleApi_SnsMessage: { Json::Value arg; Json::Reader reader; if( reader.parse(json, arg) == false ) { CCLog( "====>>>> parse failed : (%s)", json ); return; } if( arg.isMember("service") ) //Invite Dialog를 호출한 경우 { std::string type = arg.get("service", "").asString(); if(!type.empty() && type.compare("facebook") == 0) { //친구 초대를 성공한 경우 결과 인자로 "service", "facebookId"가 넘어오며, // 취소등의 이유로 실패한 경우 "service" 인자만 넘어온다. CCLog("====>>>> C2SModuleApi_SnsMessage service : %s", arg.get("service", "").asString().c_str()); if( arg.isMember("facebookId") ) { //메세지 전송 실패할 경우 해당 값은 내려오지 않는다. std::string facebook Id = arg["facebookId"][0].asString().c_str()); } } } } } } |
C2SModuleSns_User
Hive 로그인한 사용자의 정보를 요청 한다.
또는 페이스북 관련된 정보를 요청 한다.
( type == “facebook” 일때 페이북 로그인이 안되었을 경우 페이스북 로그인을 띄운다.)
(facebook 관련된 내용을 빨간색으로 표시)
Request
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
Hive 정보 요청 | ||||
vid | string, string array |
vid 대상의 정보를 요청 N/A : 자신의 정보를 요청 |
all | |
facebook 본인의 정보 정보 요청 | ||||
type | string | “facebook” | all | 1.3.0+ |
facebook appscope Id의 User Profile Image 요청 | ||||
type | string | “facebook” | all | 1.3.0+ |
facebookId | string | facebook App Stored Id 입력 할 경우 해당 id | all | 1.3.0+ |
Response
요청한 Hive 로그인 혹은 페이스북 관련 유저의 정보를 전달 받는다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
Hive 유저 정보 요청 (service = null) | ||||
list | array | 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+ |
bio | string | null | all | 1.3.0+ |
페이스북 프로필 이미지 URL 요청 (service = “facebook” 이고 facebookId = facebook App Scope ID) | ||||
service | string | “facebook” : 페이스북 본인의 정보를 요청과 페이스북 프로필 이미지를 얻을 경우 |
all | 1.3.0+ |
url | string | 페이스북 프로필 이미지 url | all | 1.3.0+ |
array type for list
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
vid | string | 로그인 센터 아이디 | all | |
uid | string | 게스트가 아닌 유저의 platform id | all | |
nickName | string | 닉네임 (Hive id) | all | |
profileImageURL | string | 프로필 이미지 링크 | all | |
alias | string | (optional) 개별 사용자가 설정한 이름 | all | |
country | string | (optional) 유저의 국가 정보 | withhive | |
birthday | string | (optional) 생년월일 | withhive | |
gender | string | (optional) 성별 | withhive | |
comment | string | (optional) 오늘의 한마디 | withhive | |
string | (optional) 이메일 | withhive | ||
facebookId | string | (optional) 페이스북 아이디 | withhive | |
newMessageCount | 32bit signed |
(optional) 자신의 정보일때만 데이터가 존재함, 받은 메시지의 개수 | withhive | |
newFriendCount | 32bit signed |
(optional) 자신의 정보일때만 데이터가 존재함, 새로 수락된 친구의 카운트 | withhive | |
newRequestCount | 32bit signed |
(optional) 자신의 정보일때만 데이터가 존재함, 받은 친구 요청 카운트 | withhive |
샘플 소스
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 25 |
[페이스북 내 계정 정보 요청] [Facebook 유저 정보] C2SModuel.Parameter arg; arg["type"] = "facebook"; C2SModule.Error; C2SModule.Sns.User( arg, out error, delegate( C2SModule.Parameter arg2, C2SModule.Error error2) { string uid = arg2["uid"] as string; string email = arg2["e-mail"] as string; string gender = arg2["gender"] as string; string language = arg2["language"] as string; string country = arg2["country"] as string; string screenName = arg2["screen_name"] as string; string username = arg2["username"] as string; string secondEmail = arg2["second_email"] as string; string bio = arg2["bio"] as string; // string service = arg2["service"] as string; }); [Facebook User Profile Image URL] C2SModuel.Parameter arg; arg["facebookId"] = "123456789"; // Facebook App Scoped ID C2SModule.Sns.User( arg, out error, delegate( C2SModule.Parameter arg2, C2SModule.Error error2) { string url = arg2["url"] as string; // string service = arg2["service"] as string; }); |
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 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
[페이스북 내 계정 정보 요청] TSharedPtr arg = MakeShareable(new FJsonObject); arg->SetStringField(TEXT("type"), TEXT("facebook")); FString OutputString; UE_LOG(LogTemp, Warning, TEXT( " sns User Json :.. %s"), *OutputString); FHiveSDKModule::Get().HiveSDKUESns_User(OutputString); [result delegate] switch(api){ case C2SModuleApi_SnsUser: { TSharedPtr arg; TSharedRef< TJsonReader<> > reader = TJsonReaderFactory<>::Create( json ); if ( FJsonSerializer::Deserialize( reader, arg ) == false ){ return; } if( arg->HasField(TEXT("service"))) { FString service = arg->GetStringField(TEXT("service")); if(!service.IsEmpty() && service.Compare("facebook") == 0 ) if(arg->HasField(TEXT("uid")) ) // 나의 Facebook 계정 정보를 호출한 경우 { FString uid = arg->GetStringField(TEXT("uid")); } } } else { UE_LOG(LogTemp, Warning, TEXT("====>>>> C2SModuleApi_SnsUser Hive My User Info")); } } } [페이스북 유저 프로필 이미지 url요청] TSharedPtr arg = MakeShareable(new FJsonObject); arg->SetStringField(TEXT("facebookId"), TEXT("12345678")); FString OutputString; UE_LOG(LogTemp, Warning, TEXT( " sns User Json :.. %s"), *OutputString); FHiveSDKModule::Get().HiveSDKUESns_User(OutputString); [result delegate] switch(api){ case C2SModuleApi_SnsUser: { TSharedPtr arg; TSharedRef< TJsonReader<> > reader = TJsonReaderFactory<>::Create( json ); if ( FJsonSerializer::Deserialize( reader, arg ) == false ){ return; } if( arg->HasField(TEXT("service"))) { FString service = arg->GetStringField(TEXT("service")); if(!service.IsEmpty() && service.Compare("facebook") == 0 ) { if(arg->HasField(TEXT("url")) ) // 나의 Facebook 계정 정보를 호출한 경우 { FString url = arg->GetStringField(TEXT("url")); } } } } } |
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 20 21 22 23 24 25 26 |
[페이스북 내 계정 정보 요청] [C2SModuleSns User:@{@"type":@"facebook"} error:&error completionHandler:^(NSDictionary *resultArg, NSError *resultError) { if(resultError == nil) { NSString* service = [resultArg objectForKey:@"service"]; if(service != nil && [service isEqualToString:@"facebook"]) { // AppScope ID 이며 키가 uid임에 주의 필요 NSString* appScopeID = [resultArg objectForKey:@"uid"]; } } }]; [페이스북 유저 프로필 이미지 url요청] NSString* user_AppScopeID = @"1230123"; //이미지를 얻어올 유저의 AppScope ID [C2SModuleSns User:@{@"facebookId":user_AppScopeID} error:&error completionHandler:^(NSDictionary *resultArg, NSError *resultError) { if(resultError == nil) { NSString* service = [resultArg objectForKey:@"service"]; if(service != nil && [service isEqualToString:@"facebook"]) { //이미지의 Url 입니다. NSString* appScopeID = [resultArg objectForKey:@"url"]; } } }]; |
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 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
[페이스북 내 계정 정보 요청] Json::Value arg; arg["type"] = "facebook"; Json::StyledWriter writer; std::string strJSON = writer.write(arg); C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleSns_User( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Facebook User Info error (%s)", error.get()->GetMessage() ); } [result delegate] switch(api){ case C2SModuleApi_SnsUser: { Json::Value arg; Json::Reader reader; if( reader.parse(json, arg) == false ) { CCLog( "====>>>> parse failed : (%s)", json ); return; } if( arg.isMember("service") ) { std::string type = arg.get("service", "").asString(); if(!type.empty() && type.compare("facebook") == 0) { if( arg.isMember("uid") ) // 나의 Facebook 계정 정보를 호출한 경우 { std::string uid = arg.get("uid", "").asString().c_str()); } } } else { CCLog("====>>>> C2SModuleApi_SnsUser Hive My User Info"); } } } [페이스북 유저 프로필 이미지 url요청] NJson::Value arg; arg["facebookId"] = "12345678"; Json::StyledWriter writer; std::string strJSON = writer.write(arg); C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleSns_User( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Facebook Friend Profile Image url error (%s)", error.get()->GetMessage() ); } [result delegate] switch(api){ case C2SModuleApi_SnsUser: { Json::Value arg; Json::Reader reader; if( reader.parse(json, arg) == false ) { CCLog( "====>>>> parse failed : (%s)", json ); return; } if( arg.isMember("service") ) { std::string type = arg.get("service", "").asString(); if(!type.empty() && type.compare("facebook") == 0) { if( arg.isMember("url") ) { std:string url = arg.get("url", "").asString().c_str()); } } } } } |
C2SModuleSns_Session
- 로그인 센터 로그인 세션 정보
- 페이스북 로그인 여부
(페이스북 관련된 내용을 빨간색으로 표시)
Request
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
service | string | NA : Hive 로그인센터 세션키 요청 “facebook” : 페이스북 로그인 여부 요청 (1.3.0+) |
all |
Response
Hive 로그인 센터 세션키 혹은 페이스북 로그인 여부
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
sessionToken | string | service=NA일 때 Hive 로그인 센터 세션키값 | all | |
isAuthorized | bool | service=facebook일 때 페이스북 로그인 여부 (iOS의 경우 is_authorized로 나타난다.) |
all | 1.3.0+ |
샘플 코드
API Reference: C2SModule.Sns.Session
- public static bool C2SModule.Sns.Session(C2SModule.Parameter arg, out C2SModule.Error error) ;
- public static bool C2SModule.Sns.Session(C2SModule.Parameter arg, out C2SModule.Error error,
C2SModule.CompletionHandler completionHandler);
1 2 3 4 5 6 7 8 |
C2SModule.Error error; C2SModule.Parameter arg; arg["service"] = "facebook"; if(!C2SModule.Sns.Session(arg, out error)) { // Error시 처리 } |
API Reference: HiveSDKUESns_Session
- void HiveSDKUESns_Session(FString fstrJson);
1 2 3 4 5 6 7 8 |
TSharedPtr arg = MakeShareable(new FJsonObject); arg->SetStringField(TEXT("service"), TEXT("facebook")); FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(arg.ToSharedRef(), Writer); FHiveSDKModule::Get().HiveSDKUESns_Session(OutputString); |
API Reference: C2SModuleSns Session
- +(BOOL)Session:(id)arg error:(NSError**)error;
- +(BOOL)Session:(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 |
NSError* error; bool facebookIsAuthorized = false; // true(1) 혹은 false(0) 으로 리턴됩니다. NSString* service = @"facebook"; NSMutableDictionary* ReqArg = [[NSMutableDictionary alloc]init]; [ReqArg setObject:service forKey:@"service"]; [C2SModuleSns Session:ReqArg error:&error completionHandler:^(NSDictionary *resultArg, NSError *resultError) { if(resultError == nil) { NSString* service = [resultArg objectForKey:@"service"]; if(service != nil && [service isEqualToString:@"facebook"]) { facebookIsAuthorized = [resultArg objectForKey:@"is_authorized"]; } }]; |
API Reference: C2SModuleSns_Session
- 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 |
Json::Value arg; arg["service"] = "facebook"; Json::StyledWriter writer; std::string strJSON = writer.write(arg); C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleSns_Session( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Sns Session error (%s)", error.get()->GetMessage() ); } |