목적
플랫폼 기능 및 플랫폼과 게임간 연동성 향상을 통한 타겟팅 된 유저의 행동 유발
플랫폼 – 기능간 연동
Hive 로그인, 오퍼월, 새소식 배너 등등….
플랫폼 – 게임간 연동
게임 상점, 우편함 등등. 각 게임 별로 지정된 기능과의 연동….
제한 사항
– Hive SDK v1.10.0 미만에서만 작동
프로모션 타겟팅 API
api_name (소문자) | 기능 | |||
---|---|---|---|---|
social_login | 로그인 정식전환 포함 |
|||
social_inquery | 1:1 문의 | |||
social_message | 메시지 보내기 | |||
social_invitation | 초대하기 | |||
mercury_show | 특정 페이지 열기 | |||
offerwall_show | 페이지 열기 | |||
game_iapstore | IAP 상점 | |||
game_postbox | 우편함 | |||
game_xxx | 게임별 정의 |
호출 규격
scheme://hiveinterwork/api_name?parameter (URI format의 parameters)
예)
misample://hiveinterwork/social_login
misample://hiveinterwork/social_inquery
misample://hiveinterwork/mercury_show/param?type=210001
misample://hiveinterwork/offerwall_show
misample://hiveinterwork/game_iapstore
misample://hiveinterwork/game_postbox
misample://hiveinterwork/game_xxxxx
misample://hiveinterwork/social_message/param?uid=114560159&text=Hello World!!!
misample://hiveinterwork/social_invitation/param?uid=114560159&text=Hello World!!!
(주의)
모든 콜백의 형식은 Hive SDK의 common 콜백과 동일하다.
또한 머큐리 close 콜백을 제외한 콜백은 모두 Hive SDK의 common 콜백으로 전달한다.
머큐리 close 콜백은 개발사의 설정에 따라 completion 핸들러 또는 common 콜백으로 전달한다.
프로모션 타겟팅 도식도
Interwork Callback
Result – Api.Interwork_Start
프로모션 타겟팅이 시작되었을 때 불린다.
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
interworkArg | Dictionary | 프로모션 타겟팅 데이터 – url scheme 파싱해서 전달된 데이터 |
all |
key-value for interworkArg
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
type | string | 프로모션 타겟팅 Api 이름 전달 | all | |
파라메터들 | all | 프로모션 타겟팅 url scheme에 parameter가 있을 경우 담아서 전달. (json 형식의 데이터를 파싱하기 때문에 어떠한 데이터 타입도 올 수 있다.) |
all |
Result – Api.Promotion_Show
“misample://hiveinterwork/mercury_show/param?type=210001” or
“misample://hiveinterwork/offerwall_show” or
프로모션 타겟팅 시작이면 배너가 닫힐때 들어오게 된다. ( 1.7.0+)
Api.Promotion_Show 파라메터에서 isInterworkStart 됨
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
isInterworkStart | bool | 프로모션 타겟팅으로 시작되어 받는 콜백인지 여부 | android | 1.7.0 추가 |
Result – Api.Sns_Login
“misample://hiveinterwork/social_login”
내부적으로 로그인이 끝나게 되면 불려지게 된다.
Api.Sns_Login 파라메터에서 interworkArg 추가 됨
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
interworkArg | Dictionary | 프로모션 타겟팅 데이터 – url scheme 파싱해서 전달된 데이터 |
all |
key-value for interworkArg
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
type | string | 프로모션 타겟팅 Api 이름 전달 | all | |
파라메터들 | all | 프로모션 타겟팅 url scheme에 parameter가 있을 경우 담아서 전달. (json 형식의 데이터를 파싱하기 때문에 어떠한 데이터 타입도 올 수 있다.) |
all |
Result – Api.Sns_Show
“misample://hiveinterwork/social_inquery”
내부적으로 로그인이 끝나게 되면 불려지게 된다.
Api.Sns_Show 파라메터에서 interworkArg 추가됨
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
interworkArg | Dictionary | 프로모션 타겟팅 데이터 – url scheme 파싱해서 전달된 데이터 |
all |
key-value for interworkArg
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
type | string | 프로모션 타겟팅 Api 이름 전달 | all | |
파라메터들 | all | 프로모션 타겟팅 url scheme에 parameter가 있을 경우 담아서 전달. (json 형식의 데이터를 파싱하기 때문에 어떠한 데이터 타입도 올 수 있다.) |
all |
Result – Api.Sns_Message
“misample://hiveinterwork/social_message/param?uid=114560159&text=Hello World!!!”” or
“misample://hiveinterwork/social_invitation/param?uid=114560159&text=Hello World!!!”
내부적으로 처리가 끝나게 되면 불려지게 된다.
Api.Sns_Message 파라메터에서 interworkArg 추가됨
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
interworkArg | Dictionary | 프로모션 타겟팅 데이터 – url scheme 파싱해서 전달된 데이터 |
all |
key-value for interworkArg
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
type | string | 프로모션 타겟팅 Api 이름 전달 | all | |
파라메터들 | all | 프로모션 타겟팅 url scheme에 parameter가 있을 경우 담아서 전달. (json 형식의 데이터를 파싱하기 때문에 어떠한 데이터 타입도 올 수 있다.) |
all |
Result – Api.Interwork_Delegate
“misample://hiveinterwork/game_iapstore” 또는
“misample://hiveinterwork/game_postbox” 또는
“misample://hiveinterwork/game_xxxxx”
게임에서 구현해야할 인터워크 콜백의 경우 불리게 된다.
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
interworkArg | Dictionary | 프로모션 타겟팅 데이터 – url scheme 파싱해서 전달된 데이터 |
all |
key-value for interworkArg
argument type | type | desc | platform | 비고 |
---|---|---|---|---|
type | string | 프로모션 타겟팅 Api 이름 전달 | all | |
파라메터들 | all | 프로모션 타겟팅 url scheme에 parameter가 있을 경우 담아서 전달. (json 형식의 데이터를 파싱하기 때문에 어떠한 데이터 타입도 올 수 있다.) |
all |
예제 코드
Unity
– 프로모션 타겟팅이 시작되었을 때 불린다.
1 2 3 4 5 6 7 8 9 10 11 |
static void ResultDelegate(Api api, Parameter arg, Error error){ switch(api) { case C2SModule.Api.Interwork_Start : { if(arg.ContainsKey("interworkArg") == true) { //프로모션 타겟팅 시작 시 들어온다. Debug.Log(arg["interworkArg"]["type"]); //api명 } } break; } } |
– 프로모션 타겟팅이 시작으로 인해 배너가 닫힐 때 불린다.
1 2 3 4 5 6 7 8 9 10 |
static void ResultDelegate(Api api, Parameter arg, Error error){ switch(api) { case C2SModule.Api.Promotion_Show : { if(arg.ContainsKey("isInterworkStart") && (bool)arg["isInterworkStart"] == true) { //프로모션 타겟팅 시작으로 인해 프로모션 쇼가 종료되었을 경우 들어오게 된다. } } break; } } |
– 프로모션 타겟팅으로 로그인 api가 호출되어 로그인 처리가 완료 되었을 때 불린다.
(Hive API를 호출하는 것은 아래와 같은 형식으로 콜백이 온다. (sns_show, promotion_show, sns_message …)
1 2 3 4 5 6 7 8 9 10 11 12 |
static void ResultDelegate(Api api, Parameter arg, Error error){ switch(api) { case C2SModule.Api.Sns_Login : { if(arg.ContainsKey("interworkArg") == true) { DoLoginForInterwork(arg); } else { DoLogin(arg); } } break; } } |
– 게임 기능을 호출하는 것은 아래와 같은 형식으로 콜백이 온다. (game_iapstore, game_postbox, game_xxx)
1 2 3 4 5 6 7 8 9 10 11 |
static void ResultDelegate(Api api, Parameter arg, Error error){ switch(api) { case C2SModule.Api.Interwork_Delegate : { if(arg.ContainsKey("interworkArg") == true) { //arg["interworkArg"]["type"]를 검사하여 상황에 맞는 처리를 한다. DoLoginForInterwork(arg); } } break; } } |
Unreal
– 프로모션 타겟팅이 시작되었을 때 호출된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void MYGAMECLASS::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message) { //... switch(api) { case C2SModuleApi_InterworkStart: { if(arg->HasField(TEXT("interworkArg"))) { // 프로모션 타겟팅 시작시 들어옴 TSharedPtr arg2 = arg->GetObjectField(TEXT("interworkArg")); FString type = arg2->GetStringField(TEXT("type")); if(!type.IsEmpty()) CCLog( "====>>>> C2SModuleApi_InterworkStart type : %s",type.c_str() ); } } else { } } break; } } |
– 프로모션 타겟팅이 시작으로 인해 배너가 닫힐 때 호출된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void MYGAMECLASS::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message) { //... switch(api) { case C2SModuleApi_PromotionShow: { if(arg->HasField(TEXT("isInterworkStart")) { bool isInterworkStart = arg->GetBoolField(TEXT("isInterworkStart")) if(isInterworkStart) { // 프로모션 타겟팅 시작으로 인해 프로모션 쇼가 종료되고 interwork의 시작을 알림 } } } break; } } |
– 프로모션 타겟팅으로 로그인 api가 호출되어 로그인 처리가 완료 되었을 때 불린다.
Hive API를 호출하는 것은 아래와 같은 형식으로 콜백이 온다. (sns_show, promotion_show, sns_message …)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void MYGAMECLASS::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message) { //... switch(api) { case C2SModuleApi_SnsLogin: { if(arg->HasField("interworkArg")) { // 프로모션 타겟팅 시작시 로그인이 불린 경우 들어옴 // Interwork 상황의 로그인 처리. ( ex. DoInterworkLogin(arg); ) } else { // 일반적인 로그인 상황 ( ex. DoLogin(arg); ) } } break; } } |
– 게임 기능을 호출하는 것은 아래와 같은 형식으로 콜백이 온다. (game_iapstore, game_postbox, game_xxx)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void MYGAMECLASS::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message) { //... switch(api) { case C2SModuleApi_InterworkDelegate: { if(arg->HasField(TEXT("interworkArg"))) { // 프로모션 타겟팅 종료 및 게임기능 관련 들어옴 TSharedPtr arg2 = arg->GetObjectField(TEXT("interworkArg")); FString type = arg2->GetStringField(TEXT("type")); if(!type.IsEmpty()) { // 타입에 맞는 처리를 게임내에서 처리함 } } } break; } } |
iOS
– 프로모션 타겟팅이 시작되었을 때 불린다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-(void)C2SModuleResult:(C2SModuleApi)api parameter:(NSDictionary*)arg error:(NSError*)error { switch(api) { case C2SModuleApi_Interwork_Start : { NSDictionary* interworkArg = [arg objectForKey:@"interworkArg"]; if(interworkArg != nil) { //프로모션 타겟팅 시작 시 들어온다. NSLog([interworkArg objectForKey : @"type"]); //api명 } } break; } } |
– 프로모션 타겟팅이 시작으로 인해 배너가 닫힐 때 불린다.
1 2 3 4 5 6 7 8 9 10 11 12 |
-(void)C2SModuleResult:(C2SModuleApi)api parameter:(NSDictionary*)arg error:(NSError*)error { switch(api) { case C2SModuleApi_PromotionShow : { bool isInterworkStart = [[arg objectForKey:@"isInterworkStart"] boolValue]; if(isInterworkStart == true) { //프로모션 타겟팅 시작으로 인해 프로모션 쇼가 종료되었을 경우 들어오게 된다. } } break; } } |
– 프로모션 타겟팅으로 로그인 api가 호출되어 로그인 처리가 완료 되었을 때 불린다.
(Hive API를 호출하는 것은 아래와 같은 형식으로 콜백이 온다. (sns_show, promotion_show, sns_message …)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
-(void)C2SModuleResult:(C2SModuleApi)api parameter:(NSDictionary*)arg error:(NSError*)error { switch(api) { case C2SModuleApi_SnsLogin : { NSDictionary* interworkArg = [arg objectForKey:@"interworkArg"]; if(interworkArg != nil) { [self loginWithInterworkArg : arg]; } else{ [self loginWithArg : arg]; } } break; } } |
– 게임 기능을 호출하는 것은 아래와 같은 형식으로 콜백이 온다. (game_iapstore, game_postbox, game_xxx)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-(void)C2SModuleResult:(C2SModuleApi)api parameter:(NSDictionary*)arg error:(NSError*)error { switch(api) { case C2SModuleApi_InterworkDelegate : { NSDictionary* interworkArg = [arg objectForKey:@"interworkArg"]; if(interworkArg != nil) { //arg["interworkArg"]["type"]를 검사하여 상황에 맞는 처리를 한다. [self processInterworkWithArg:arg]; } } break; } } |
Cocos2d-x
– 프로모션 타겟팅이 시작되었을 때 불린다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
void SampleProject::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message) { switch(api) { case C2SModuleApi_InterworkStart: { if(arg.isMember("interworkArg")) { // 프로모션 타겟팅 시작시 들어옴 std::string type = arg["interworkArg"]["type"].asString(); if(!type.empty()) { CCLog( "====>>>> C2SModuleApi_InterworkStart type : %s",type.c_str() ); } } else { } } break; } } |
– 프로모션 타겟팅이 시작으로 인해 배너가 닫힐 때 불린다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void SampleProject::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message) { switch(api) { case C2SModuleApi_PromotionShow: { if(arg.isMember("isInterworkStart")) { bool isInterworkStart = arg.get("isInterworkStart", false).asBool(); if(isInterworkStart) { // 프로모션 타겟팅 시작으로 인해 프로모션 쇼가 종료되고 interwork의 시작을 알림 } } } break; } } |
– 프로모션 타겟팅으로 로그인 api가 호출되어 로그인 처리가 완료 되었을 때 불린다.
(Hive API를 호출하는 것은 아래와 같은 형식으로 콜백이 온다. (sns_show, promotion_show, sns_message …)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void SampleProject::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message) { switch(api) { case C2SModuleApi_SnsLogin: { if(arg.isMember("interworkArg")) { // 프로모션 타겟팅 시작시 로그인이 불린 경우 들어옴 // Interwork 상황의 로그인 처리. ( ex. DoInterworkLogin(arg); ) } else { // 일반적인 로그인 상황 ( ex. DoLogin(arg); ) } } break; } } |
– 게임 기능을 호출하는 것은 아래와 같은 형식으로 콜백이 온다. (game_iapstore, game_postbox, game_xxx)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void SampleProject::ResultDelegate(C2SModuleApi api, const char* json, C2SModuleErrorCode code, const char* message) { switch(api) { case C2SModuleApi_InterworkDelegate: { if(arg.isMember("interworkArg")) { // 프로모션 타겟팅 종료 및 게임기능 관련 들어옴 std::string type = arg["interworkArg"]["type"].asString(); if(!type.empty()) { // 타입에 맞는 처리를 게임내에서 처리함 } } } break; } } |