Hive SDK v1.19.6부터는 Hive SDK v1 패키지가 개선되어 HiveSDK v1.19.6이라는 이름으로 가이드를 제공합니다. 아래의 가이드를 통해 변경된 라이브러리 구성과 설정 방법에 대해 알아보세요.
본 가이드는 Xcode 13.3.1 환경을 기준으로 안내합니다.
HiveSDK v1.19.6 패키징 파일 구조
a. framework
HiveSDK v1.19.6 iOS framework로 구성되어 있습니다. 기존 Hive SDK v1 framework를 모두 제거한 후 새 framework 폴더로 교체하세요.
b. include
HiveSDK v1.19.6 iOS header 파일로 구성되어 있습니다.
c. resource
HiveSDK v1.19.6 iOS의 resource는 모든 모듈의 resource가 통합된 HIVEResource.bundle로 구성되어 있습니다. 기존 Hive SDK v1 resources 폴더와 폴더 내 bundle 파일 제거 후 새 resource 폴더로 교체하세요.
설정 변경사항
v1 설정 변경사항은 Hive SDK v1.19.6 적용 시 기존 적용 사항과의 변경점에 대해 안내합니다. 이 가이드에서 안내하지 않는 내용은 기존의 Hive 설정하기 > iOS 가이드를 참고하세요.
프레임워크 추가하기
- 기존 HiveSDK v1 프레임워크를 모두 제거하고 HiveSDK v1.19.6 프레임워크로 교체하세요.
- HiveSDK v1.19.6 프레임워크
- Unity 빌드 시: HIVE_SDK_UnityPlugin.framework
그 외: HIVE_SDK_Plugin.framework - HiveAppTrackingTransparency.framework
- HIVEBase.framework
- HIVECore.framework
- HIVEExtensions.framework
- HIVEIAPV4.framework
- HIVEProtocol.framework
- HIVEService.framework
- HIVEUI.framework
- ProviderAdapter.framework
- ProviderAdjust.framework (선택사항)
- ProviderQQ.framework (선택사항)
- ProviderSingular.framework (선택사항)
- Unity 빌드 시: HIVE_SDK_UnityPlugin.framework
- HiveSDK v1.19.6 프레임워크
- Xcode 내장 프레임워크도 정리되었습니다.
- Xcode 내장 프레임워크
- AppTrackingTransparency.framework
- Accelerate.framework
- CFNetwork.framework
- libc++.tbd
- libz.tbd
- libsqlite3.tbd
- StoreKit.framework
- AdSupport.framework
- CoreData.framework
- CoreTelephony.framework
- SafariServices.framework
- Security.framework
- UIKit.framework
- iAd.framework
- MobileCoreServices.framework
- WebKit.framework
- Xcode 내장 프레임워크
- provider framework는 사용하지 않는다면 제거 가능합니다.
- ProviderAdjust.framework: Adjust Tracker 사용
- ProviderSingular.framework: Singular Tracker 사용
- ProviderQQ.framework, TencentOpenAPI.framework: QQ signin 사용
프레임워크 설치하기
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 |
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '10.0' use_frameworks! inhibit_all_warnings! workspace 'HIVE_GAME' project 'ProjectPath/Project/HIVE_GAME.xcodeproj' def fb_libs pod 'FBSDKCoreKit', '~>12.3.1' pod 'FBSDKShareKit', '~>12.3.1' pod 'FBSDKLoginKit', '~>12.3.1' end def google_libs pod 'GoogleSignIn', '6.1.0' end def analytics_libs pod 'Adjust', '~> 4.29.7' pod 'Singular-SDK', '~> 11.0.4' pod 'AppsFlyerFramework', '~> 6.5.2' end def open_libs pod 'SDWebImage', '5.12.5', end target ‘HIVE_GAME_COOL’ do project ‘ProjectPath/Project/HIVE_GAME.xcodeproj’ fb_libs google_libs analytics_libs open_libs end |
라이브러리 추가하기
모든 라이브러리가 framework 기준으로 작동하도록 변경되었습니다. 기존 HiveSDK v1 라이브러리 내 폴더와 파일을 삭제하세요.
- Build Settings > Serch Paths > Library Search Paths 내 라이브러리 설정을 제거하세요.
- libC2SModule_iphoneos.a
- libC2SModule_iphoneosd.a
- libC2SModule_iphonesimulator.a
- libC2SModule_iphonesimulatord.a
리소스 추가하기
모든 resource가 하나로 통합되었습니다. 기존 HiveSDK v1 리소스를 모두 삭제하고 HiveSDK v1.19.6 리소스 파일인 HIVEResource.bundle로 교체하세요.
헤더파일 추가하기
헤더 파일 내부 값이 변경되었습니다. 기존 HiveSDK v1 헤더파일을 모두 삭제하고 HiveSDK v1.19.6 헤더파일로 교체하세요. 그 외 설정 방법은 SDK v1 개발 > Hive 설정하기 > iOS > 헤더파일 추가하기 가이드를 확인하세요.
일반 설정하기
- (변경사항 없음) HiveSDK v1의 일반 설정하기 목록 중 변경된 사항은 없습니다.
화이트 리스트 추가하기
Facebook Scheme을 화이트 리스트에 추가하려면 프로젝트 창을 이용하거나 Info.plist 파일에 코드를 직접 추가하는 방법이 있습니다.
iOS 9부터, 외부 앱으로 전환 시 화이트 리스트에 추가된 Scheme에 대해서만 전환이 허용됩니다. iOS 9 환경에서 유저가 여러분의 게임에서 Facebook으로 로그인 할 때 Hive는 사파리 뷰 컨트롤러를 활용하여, 사파리 웹뷰로 Facebook 로그인을 진행시킵니다. 때문에, 게임 앱에서 Facebook 앱으로의 전환이 발생하지 않고 앱 내부의 브라우저를 이용하여 로그인을 처리할 수 있습니다.
Facebook은 화이트 리스트에 Facebook Scheme을 기본적으로 등록하도록 권장하고 있습니다. Facebook SDK 문서 보기
프로젝트 창에서 수정하기
- Xcode 프로젝트 창의 프로젝트 네비게이터에서 여러분의 프로젝트를 선택하세요.
- TARGETS 목록에서 여러분의 앱을 선택하세요.
- Info 탭을 클릭하세요.
- Info 탭의 LSApplicationQueriesSchemes 클릭하고 + 버튼을 클릭하여 아래의 Scheme을 추가하세요.
Info.plist 직접 수정하기
Info.plist에 아래 코드를 직접 추가하는 방법도 있습니다.
1 2 3 4 5 |
"LSApplicationQueriesSchemes" : [ "fbapi", "fb-messenger-share-api", ] |
QQ Scheme을 화이트 리스트에 추가하려면 프로젝트 창을 이용하거나 Info.plist 파일에 코드를 직접 추가하는 방법이 있습니다.
프로젝트 창에서 수정하기
- Xcode 프로젝트 창의 프로젝트 네비게이터에서 여러분의 프로젝트를 선택하세요.
- TARGETS 목록에서 여러분의 앱을 선택하세요.
- Info 탭을 클릭하세요.
- Info 탭의 LSApplicationQueriesSchemes 클릭하고 + 버튼을 클릭하여 다음의 여섯 개 Scheme을 추가하세요.
* mqqOpensdkSSoLogin
* mqqopensdkapiV2
* mqqopensdkapiV3
* wtloginmqq2
* mqq
* mqqapi
Info.plist 직접 수정하기
Info.plist에 아래 코드를 직접 추가하는 방법도 있습니다.
1 2 3 4 5 6 7 8 9 |
"LSApplicationQueriesSchemes" : [ "mqqOpensdkSSoLogin", "mqqopensdkapiV2", "mqqopensdkapiV3", "wtloginmqq2", "mqq", "mqqapi" ] |
Hive 설정하기
- (변경사항 없음) HiveSDK v1의 Hive 설정하기 목록 중 변경된 사항은 없습니다.
Facebook 설정하기
1. Xcode 프로젝트 창의 프로젝트 네비게이터에서 여러분의 프로젝트를 선택하세요.
2. TARGETS 목록에서 여러분의 앱을 선택하세요.
3. Info 탭을 클릭하세요.
4. Info 탭 안의 Custom iOS Target Properties 항목을 클릭하고 FacebookAppID 속성에 Facebook App ID를 입력하세요.
* 앱 대시보드에서 설정 > 고급 > 보안 > 클라이언트 토큰 진입하여 FacebookClientToken 속성에 Facebook Client Token을 입력하세요. (Facebook 13 이상 버전 사용 시 필수) (참조 가이드)
5. Info 탭 안의 **URL Types** 항목을 클릭한 후 **+** 아이콘을 클릭하여 Additional url type properties 항목을 생성하세요.
6. Additional url type properties 항목 URL Schemes 란에 fb를 덧붙인 Facebook AppID를 입력하세요. 예. fb012342478841523
AppDelegate 적용하기
- Unity 빌드 시 AppDelegate 설정은 제공된 HiveAppController.m에서 자동으로 진행됩니다.
- AppDelegate.m 파일의 API 호출이 자동으로 진행됩니다.
- Delegate 함수는 추가하되 내부 로직 진행은 생략하세요.
- Hive Orientation 설정을 위해
supportedInterfaceOrientationsForWindow
를 추가하세요.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960@interface AppDelegate ()@end@implementation AppDelegate- (void) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// 필수 추가 사항// Unity 엔진을 사용하는 경우 : C2SAppController 클래스 외 UnityAppController를 상속받는 클래스가 없다면 구현하지 않아도 무방return [C2SAppDelegate application:application didFinishLaunchingWithOptions:launchOptions];}- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{// 내부 로직 진행하여 불필요한 API 호출 제거// [C2SModulePush Register:@{@”deviceToken”:deviceToken} error:nil];}- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo{// 내부 로직 진행하여 불필요한 API 호출 제거// if((application.applicationState != UIApplicationStateActive) || ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)){// [C2SModulePush Register:@{@”remotePushOpen”:userInfo} error:nil];//}}- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfofetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler{// 내부 로직 진행하여 불필요한 API 호출 제거// [self application:application didReceiveRemoteNotification:userInfo];}- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplicationannotation:(id)annotation{// 내부 로직 진행하여 불필요한 API 호출 제거// [C2SModuleSocial openURL:url sourceApplication:sourceApplication annotation:annotation];return YES;}- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary< NSString*, id> *)options{// 내부 로직 진행하여 불필요한 API 호출 제거// return [self application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];return YES;}// HiveUI Orientation 필수 설정 부분- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {// TODO: 가로 전용 게임return UIInterfaceOrientationMaskLandscape;// TODO: 세로 전용 게임return UIInterfaceOrientationMaskPortrait;// TODO: 가로와 세로 모두 지원하는 게임return UIInterfaceOrientationMaskAll;}
빌드 설정하기
Xcode 프로젝트의 빌드 설정 시 Other Linker Flags 필드에 추가한 아래의 값을 삭제하세요. (기존 가이드 참조)
-
- -lC2SModule_$(PLATFORM_NAME)d
- -lC2SModule_$(PLATFORM_NAME)
아래의 값은 반드시 추가해야 합니다. (필수사항)
-
- -ObjC
앱 접근 권한에 대한 고지 화면 커스터마이징
화면 문구 변경 파일의 저장 경로가 변경되었습니다. 맞춤식 권한 고지 팝업 이용 시 다국어 지원 파일의 ko.lproj 폴더에서(기존 가이드 참조) Permission.strings 파일을 제거하고 변경 가이드에 따라 다시 설정하세요. (Permission.strings 파일의 내용은 변경사항 없습니다.)
추가 API
HiveSDK v1.19.6 적용 시 반드시 적용해야하는 API는 다음과 같습니다. 자세한 사항은 API의 참조 가이드로 안내된 페이지에서 확인하세요.
Social_Initianlize
- 참조 가이드: SDK v1 개발 > Hive 초기화 > Social Initialize
- Social_Initianlize API 호출 arg에 HiveSDK UI Orientation을 설정할 수 있는
hiveOrientation
이 추가되었습니다.
Argument Name Type Desc Platform 비고 hiveOrientation string - Hive SDK UI 방향을 설정한다.
- “all”, “portrait” or “landscape”
default “UNDEFINED”
“all”일 경우 기기 방향에 따라 HiveUI가 실시간 회전을 지원한다.
all 1.19.6+ 실시간 회전을 지원하지 않는 게임에서는 반드시 게임 지원 방향에 맞춰 호출해야 합니다.
변경 또는 사용 중단된 API
HiveSDK v1.19.6 적용 시 변경되거나 사용 중단된 API는 다음과 같습니다. 자세한 사항은 각 API의 참조 가이드로 안내된 페이지에서 확인하세요.
Social_SetGameInfo
- 참조 가이드: SDK v1 개발 > Hive 초기화 > Social SetGameInfo
- Social_SetGameInfo API 호출 arg의
vid
가emergencyMode
로 바뀌었습니다.
vid 값을 전달받아 세팅하던 기존 방식과는 다르게, emergencyMode 로 호출 시 마지막으로 로그인한 vid를 SDK에서 자동으로 세팅합니다.Argument Name Type Desc Platform 비고 emergencyMode bool true일 경우 SDK에 저장된 계정 정보로 긴급 로그인을 진행한다.
저장된 계정 정보가 없을 땐 false 반환 및 에러 전달all 1.19.6+ Return Callback: 저장된 계정 정보를 전달합니다.
Argument Name Type Desc Platform 비고 vid string 긴급 로그인 계정의 vid all 1.19.6+ did string 긴급 로그인 계정의 did all 1.19.6+ accessToken string 긴급 로그인 계정의 accessToken all 1.19.6+
Engagement
- HiveSDK v1.19.6부터 Engagement scheme을 SDK에서 자체적으로 확인합니다. 확인 작업이 중복 진행되지 않도록 관련 설정 및 API 호출 구현부를 삭제하세요.
- AppController(AppDelegate)에 코드 추가 부분을 제거
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{/* engagement Scheme 받아 호출하는 부분 제거 (sdk 내부 자동화 처리)if(url){NSError *error = nil;NSLog(@"%@",url.absoluteString);BOOL apiResult = [C2SModuleEngagement ProcessScheme:@{@"scheme":url.absoluteString,@"immediately":@(YES)} error:&error completionHandler:^(NSDictionary *arg, NSError *error) {// host가 game인 경우 게임에서 정의된 데이타로 캐싱했다가 인게임에서 정의된 데로 로직 구현NSArray* events = arg[@"events"];if(events != nil) {for(NSDictionary* iter in events) {NSNumber* nowIndex = iter[@"index"];NSDictionary* nowEvent = iter[@"event"];NSString* scheme = nowEvent[@"scheme"];NSString* host = nowEvent[@"host"];NSString* path = nowEvent[@"path"];NSDictionary* query = nowEvent[@"query"];if(query != nill) {NSString* queryData = query[@"(keyname)"];}}}}];if (!apiResult || error) {NSLog(@"process scheme with openurl fail : %@", error);}}*/return true}- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary <nsstring*, id=""> *)options{return true;}- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo{/* engagement Scheme 받아 호출하는 부분 제거 (sdk 내부 자동화 처리)if((application.applicationState != UIApplicationStateActive) || ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)){NSLog(@"didREcieveRemoteNotification UIApplicationStateActive");NSError * error = nil;BOOL apiResult = [C2SModuleEngagement ProcessScheme:@{@"scheme":userInfo[@"action"],@"immediately":@(YES)} error:&error completionHandler:^(NSDictionary *arg, NSError *error) {// host가 game인 경우 게임에서 정의된 데이타로 캐싱했다가 인게임에서 정의된 데로 로직 구현}];if (!apiResult || error) {NSLog(@"process scheme with push fail : %@", error); }}else {NSLog(@"Ignore remote notification when applicationState is active.");}*/}- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo{/* engagement Scheme 받아 호출하는 부분 제거 (sdk 내부 자동화 처리)if((application.applicationState != UIApplicationStateActive) || ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)){NSLog(@"didREcieveRemoteNotification UIApplicationStateActive");NSError * error = nil;BOOL apiResult = [C2SModuleEngagement ProcessScheme:@{@"scheme":userInfo[@"action"],@"immediately":@(YES)} error:&error completionHandler:^(NSDictionary *arg, NSError *error) {// host가 game인 경우 게임에서 정의된 데이타로 캐싱했다가 인게임에서 정의된 데로 로직 구현}];if (!apiResult || error) {NSLog(@"process scheme with push fail : %@", error); }}else {NSLog(@"Ignore remote notification when applicationState is active.");}*/}- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler{/* engagement Scheme 받아 호출하는 부분 제거 (sdk 내부 자동화 처리)if((application.applicationState != UIApplicationStateActive) || ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)){NSLog(@"didREcieveRemoteNotification UIApplicationStateActive");NSError * error = nil;BOOL apiResult = [C2SModuleEngagement ProcessScheme:@{@"scheme":userInfo[@"action"],@"immediately":@(YES)} error:&error completionHandler:^(NSDictionary *arg, NSError *error) {// host가 game인 경우 게임에서 정의된 데이타로 캐싱했다가 인게임에서 정의된 데로 로직 구현}];if (!apiResult || error) {NSLog(@"process scheme with push fail : %@", error);}}else {NSLog(@"Ignore remote notification when applicationState is active.");}*/}- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler{/* engagement Scheme 받아 호출하는 부분 제거 (sdk 내부 자동화 처리)if((application.applicationState != UIApplicationStateActive) || ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)){NSLog(@"didREcieveRemoteNotification UIApplicationStateActive");NSError * error = nil;BOOL apiResult = [C2SModuleEngagement ProcessScheme:@{@"scheme":userInfo[@"action"],@"immediately":@(YES)} error:&error completionHandler:^(NSDictionary *arg, NSError *error) {// host가 game인 경우 게임에서 정의된 데이타로 캐싱했다가 인게임에서 정의된 데로 로직 구현}];if (!apiResult || error) {NSLog(@"process scheme with push fail : %@", error);}}else {NSLog(@"Ignore remote notification when applicationState is active.");}*/}
- AppController(AppDelegate)에 코드 추가 부분을 제거
Engagement_ProcessScheme
API 호출 부분은 제거됩니다.Engagement_ConsumeCoupon
API는couponId
직접 처리 시에만 사용하며, delegate의 결과로 호출하는 로직은 제거됩니다.
기타 API
HiveSDK v1.19.6부터 다음의 API는 자동으로 설정되므로 호출하여도 동작하지 않습니다.
-
- Push_Register: “deviceToken”
- Push_Register: “remotePushOpen”
- Social_openURL