Hive에서는 Facebook , Google+, 주소록을 통한 자동으로 Hive 친구 동기화가 이루어질 수 있다.
- 가입 또는 로그인 단계에서 Facebook 및 Google+ 친구 중에 Hive에 가입하고 Facebook 및 Google+를 연동한 사용자들을 자동 Hive 친구 맺음
- 주소록에 있는 정보를 Hive에 업로드하여 이미 자신의 핸드폰 번호를 등록한 Hive 사용자들 중에 매칭되는 것이 있다면 자동 Hive친구 맺음
이로써 맺어지는 친구 관계는 실제 지인 및 친구 관계와 거의 동일함
자동 주소록 동기화 (1.8.0+)
- Hive 서버에서 받아오는 주소록 동기화 주기값을 받아온 후 해당 값보다 크거나 같은 경우와 MDN 있는 상태일 경우 Hive 서버로 클라이언트 내 주소록을 전송
- 현재 주소록 동기화 주기는 로그인 총 Count 30회로 설정 됨. (30회 달성 리셋 후 다시 카운트 체크)
- 로그인에 성공 했을 시에만 해당 과정이 진행되며 주소록 전송 성공시 로컬에 저장된 로그인 Count는 리셋
- 연동 가능 조건
1) 단 한 번이라도 주소록 연동을 했고, DB에 MDN 정보가 있고, 각 OS별 퍼미션 권한 수락을 한 경우
2) IOS, Android 모두 Permission 수락을 했을 경우에만 연동 - IOS : 전화 인증 Y + 주소록 접근 권한 Y
- Android : Android 6.0 (폰 퍼미션 수락 Y + 주소록 퍼미션 수락 Y)
Android 6.0 외 (폰 퍼미션 수락 Y) -
연동 불가 조건
1) 게스트 회원일 경우 스킵
2) IOS, Android 모두 Permission 권한이 없으면 자동 연동 불가 -
기타
웰컴 플로우, 프로필 주소록 연동 버튼, 친구 관리 주소록 연동 버튼 부분에는 적용 될 필요 없음
(로그인 완료시에만 체크)
Hive 친구 초대 진행 프로세스
Hive 친구에게 초대 메시지는 기본적으로 Hive 상에 친구관계인 유저에게만 메시지 및 초대 메시지를 보낼 수 있다.
- “game”: Hive 친구이면서 게임을 하는 친구
- “other”: Hive 친구이면서 게임을 하지 않는 친구
- “all”, N/A: 전체 Hive 친구
게임 친구를 Hive 친구와 연동하는 사례 소개
- 게임 서버 내 Hive 유저를 Base로 추천 친구 리스트를 구성하여 게임 내 친구 리스트를 따로 구성
(예: 서머너즈 워) - Hive 친구 중 같은 게임을 하는 Hive 친구 리스트를 바탕으로 그 친구 중 게임 내 친구 리스트를 따로 구성
(예: 홈런배틀 3D) - Hive 친구 중 함께 해당 게임을 하는 친구 리스트를 그대로 게임 내 친구 리스트로 사용
(예: 피싱, 골프스타, 아임히어로)
Hive 도입 전에 컴투스 허브로 가입한 유저는 vid가 0으로 내려오기 때문에 vid가 0인 경우 arg[“uid”]에 uid 값을 세팅해야 한다.
Hive 친구초대 도식도
C2SModuleSns_Friends
친구 정보를 요청한다.(Hive 친구 초대 하기 관련된 내용을 빨간색으로 표시)
페이스북으로 나를 초대한 유저의 정보를 얻어올 수 있다.
Request
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
type | string | “game” : 게임 친구를 요청 “other” : 게임 하지않는 친구를 요청 “all” : 전체 친구를 요청 N/A : 전체 친구를 요청 “receivedInvite”: service가 “facebook” 일 경우에만 해당. 추가로 전달 할 경우 해당 게임 에서 나를 초대한 친구 리스트 정보 목록. (1.3.0+) “friendsList” : service가 facebook일 경우에만 해당. 해당 게임을 하는 내 페이스북 친구 리스트 정보 목록 (1.10.3+) |
all | |
service | string | “facebook” : 페이스북의 친구리스트를 요청 N/A : Hive 친구리스트를 요청 |
all | |
limit | int | type이 receivedInvite일 경우 초대한 친구 리스트를 받아올 갯수이다. 입력하지 않을 경우 가장 최근에 초대한 1명의 정보만 받아온다. |
all | 1.3.0+ |
Response
친구에 대해 요청한 정보를 받는다.
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
service | string | “facebook” N/A |
all | |
game | array | 게임 친구 리스트 | all | |
other | array | 게임하지 않는 친구 리스트 | all | |
service == “facebook” 일 경우 | ||||
receivedInvite | array | 나를 초대한 페북 유저들 | all | 1.3.0+ |
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+ |
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 |
C2SModule.Error error; C2SModule.Parameter arg; arg["type"] = "other"; if( !C2SModule.Sns.Friends( arg, out error )) { // Error 시 처리 } |
API Reference: HiveSDKUESns_Friends
- void HiveSDKUESns_Friends(FString fstrJson);
1 2 3 4 5 6 |
TSharedPtr arg = MakeShareable(new FJsonObject); arg->SetStringField(TEXT("type"), TEXT("all")); FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(arg.ToSharedRef(), Writer); FHiveSDKModule::Get().HiveSDKUESns_Friends(OutputString); |
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 28 29 30 31 |
NSError* error; NSString* type = @"all"; //상황에 맞게 "other" 또는 "game"으로 이용 NSString* service = nil; //상황에 맞게 "facebook", "googleplus"로 이용 NSMutableDictionary* friendReqArg = [[NSMutableDictionary alloc]init]; [friendReqArg setObject:type forKey:@"type"]; if(service != nil) [friendReqArg setObject:service forKey:@"service"]; [C2SModuleSns Friends:friendReqArg error:&error completionHandler:^(NSDictionary *resultArg, NSError *resultError) { if(resultError == nil) { NSMutableArray* friends = [[NSMutableArray alloc]init]; //"game" : 게임 친구의 정보 리스트 //"other" : 게임하지 않는 친구의 정보 리스트 if([type isEqualToString:@"all"] == YES || [type isEqualToString:@"game"] == YES) { [friends addObjectsFromArray:resultArg[@"game"]]; } if([type isEqualToString:@"all"] == YES || [type isEqualToString:@"other"] == YES) { [friends addObjectsFromArray:resultArg[@"other"]]; } for(NSArray* friendList in friends) { for(NSDictionary* friend in friendList) { //친구 데이터를 파싱합니다. } } } }]; |
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 |
Json::Value arg; arg["type"] = "all"; Json::StyledWriter writer; std::string strJSON = writer.write(arg); C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleSns_Friends( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Friends error (%s)", error.get()->GetMessage() ); } |
C2SModuleSns_Message
대상에게 Hive 메시지 발송(Hive 친구 초대 하기 관련된 내용을 빨간색으로 표시)
Request
argument name | type | desc | platform | 비고 |
---|---|---|---|---|
Hive 유저 메시지 | ||||
vid | string, string array |
메시지를 받는 유저의 로그인 센터 아이디 | all | |
uid | string, string array |
게스트가가 아닌 유저의 platform id | all | |
message | string | 메시지의 내용 | all | |
imageURL | string | (Optional) 전송될 이미지의 url | all | |
thumbnailURL | string | (Optional) (imageURL과 함께 입력) 썸네일의 url | all | |
usePush | bool | true 일 경우 푸시를 발송한다. | all | |
invite | bool | true 일 경우 초대 메시지를 전송한다. (linkShare 보다 우선시 된다.) |
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 15 16 17 18 19 20 21 22 23 |
C2SModule.Error error; C2SModule.Parameter arg = new C2SModule.Parameter(); arg["vid"] = "1111"; arg["message"] = "test message"; if( !C2SModule.Sns.Message( arg, out error )) { // Error 시 처리 } // Acquisition 초대 링크를 Hive 메세지로 발송 C2SModule.Error error; C2SModule.Parameter requestArg = new C2SModule.Parameter(); requestArg["uid"] = "1111"; requestArg["message"] = "test message"; requestArg["linkShare"] = true // 링크 발송 시 linkShare는 true requestArg["linkShareURL"] = resultArg["inviteHivemsgLink"] as string; //집객 정보 HivemsgLink 값 if( !C2SModule.Sns.Message(requestArg, out error )) { // 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 |
TSharedPtr arg = MakeShareable(new FJsonObject); arg->SetStringField(TEXT("vid"), TEXT("0")); // UID 또는 VID 택 1, iOS에서 유효하지 않은 VID 입력시 Crash arg->SetStringField(TEXT("uid"), TEXT("97211900")); arg->SetStringField(TEXT("message"), TEXT("SNS Freind test Message")); //arg->SetStringField(TEXT("imageURL"), imageURL); //arg->SetStringField(TEXT("thumbnailURL"), thumbnailURL); //arg->SetBoolField(TEXT("usePush"), usePush); //arg->SetBoolField(TEXT("invite"), invite); FString OutputString; TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); FJsonSerializer::Serialize(arg.ToSharedRef(), Writer); FHiveSDKModule::Get().HiveSDKUESns_Message(OutputString); |
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 25 26 27 28 |
NSString* messageVid = @"341341"; //메세지를 보내고자 하는 상대의 VID입력 NSString* messageUid = @"4144232"; //메세지를 보내고자 하는 상대의 UID입력 NSString* message = "Hello"; NSError* error; NSMutableDictionary* arg = [[NSMutableDictionary alloc]init]; //메세지를 보내고자 하는 상대 셋팅 if([messageVid isEqualToString:@"0"] == NO) [arg setObject:messageVid forKey:@"vid"]; else [arg setObject:messageUid forKey:@"uid"]; //메세지 [arg setObject:message forKey:@"message"]; [C2SModuleSns Message:arg error:&error completionHandler:^(NSDictionary *resultArg, NSError *resultError) { }]; //Acquisition 초대 링크를 Hive 메세지로 발송 NSMutableDictionary* requestArg= [[NSMu tableDictionary alloc]init]; requestArg[@"uid"] = messageUid; requestArg[@"message"] = @"Hive Invite link" requestArg[@"linkShare"] = true; // 링크 발송 시 linkShare는 true requestArg[@"linkShareURL"] = resultArg[@ "inviteHivemsgLink"] // 집객 정보 HivemsgLink 값 [C2SModuleSns Message:requestArg error: &error completionHandler:^(NSDictionary * resultArg, NSError *resultError) { }]; |
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 |
Json::Value arg; arg["uid"] = targetUid; arg["message"] = "test"; Json::StyledWriter writer; std::string strJSON = writer.write(arg); C2SModule_Cocos2dx::C2SModuleError error; // C2SModuleSns_Message를 이용하여 메세지 전달 if( ::C2SModuleSns_Message( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Message error (%s)", error.get()->GetMessage() ); } // Acquisition 초대 링크를 Hive 메시지로 발송 Json::Value requestArg; requestArg["uid"] = targetUid; requestArg["message"] = "Hive_Invite_link"; requestArg["linkShare"] = true; // 링크 발송 시 linkShare는 true requestArg["linkShareURL"] = resultArg.inviteHivemsgLink; // 집객 정보 HivemsgLink 값 Json::StyledWriter writer; std::string strJSON = writer.write(requestArg); C2SModule_Cocos2dx::C2SModuleError error; if( ::C2SModuleSns_Message( strJSON.c_str(), &error ) == false ) { CCLog( "====>>>> Message error (%s)", error.get()->GetMessage() ); } |