cocos2d-x 프로젝트에 UnityAds 도입 (iOS 편)

UnityAds라는 Unity 공식 광고 SDK가 있습니다.
게임에 특화된 동영상 광고로 매우 매력적입니다.
그래서 cocos2d-x 게임에 도입해 보았습니다.

UnityAds에 통합 가이드가 있지만 cocos2d-x 용이 아니라
아래와 같이 해도 동작하지 않았으므로 통합 가이드의 보충 메모입니다.
※UnityAds에서의 계정, 게임 등록은 이미 실시하고 있는 전제입니다
h tp : // 성게 ds. jp / help / 도쿠 멘 타치 온 푸 루 푸 b ぃしぇ rs / 엔테 g 라치 온 굿

1. 다운로드



h tp : // 성게 ds. jp / help / 도쿠 멘 타치 온 푸 루 푸 b ぃ し rs / 드 w ぉ 아 ds
가이드와 같이 gitHub에서 설치합니다.

2. framework, bundle의 도입



UnityAds.bundle은 항상 프로젝트에 추가합니다.
(Resources로 bundle이 없으면 런타임 오류가 발생합니다)



Linked framework and Libraries에 다음을 설정합니다.
통합 가이드와 달리 iOS7 이상에서도 AdSupport는 필수인 것 같습니다.
또한 SystemConfiguration, CoreTelephony, CoreMedia도 필수와 같으므로 추가했습니다.
StoreKit도 필수이지만 cocos 표준 프로젝트에 추가되어 있으므로 설명을 생략합니다



3. 코드 수정



통합 가이드에서는 AppDelegate를 수정하고 있지만 cocos에서는 AppController를 수정합니다.
(왜 왜 여기에 광고를 표시하기 전에 UnityAds에 UIViewController를 전달해야합니다..)
AppController.h는 import 추가 및 UnityAdsDelegate 추가

AppController.h

#import <UIKit/UIKit.h>

//UnityAds
#import <UnityAds/UnityAds.h>

@class RootViewController;

@interface AppController : NSObject <UIApplicationDelegate, UnityAdsDelegate> {
    UIWindow *window;
}

@property(nonatomic, readonly) RootViewController* viewController;

@end


AppController.mm에서는 다음을 수행합니다. cocos2d-x 3.5의 소스입니다.
- _viewController 설정 후 startWithGameId 호출
- unityAdsVideoCompleted 추가

AppController.mm
:
    // Use RootViewController manage CCEAGLView 
    _viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    _viewController.wantsFullScreenLayout = YES;
    _viewController.view = eaglView;

    //Unity Ads
//  [[UnityAds sharedInstance] setTestMode:YES];
//  [[UnityAds sharedInstance] setDebugMode:YES];
    [[UnityAds sharedInstance] startWithGameId:@"[GameID]" andViewController:_viewController];
    [[UnityAds sharedInstance] setDelegate:self];
:
}

//Unity Ads
- (void)unityAdsVideoCompleted:(NSString *)rewardItemKey skipped:(BOOL)skipped
{
    //callback
}


4. Bridge 만들기



bridge를 만들고 동영상 광고를 게재하고 싶을 때 부르면 최소한의 도입 완료입니다.
통합 가이드는 canShowAds의 판별이지만
영어판 문서에서는 canShow와 canShowAds를 판별했으므로 그쪽에 맞추었습니다.

UnityAdsBridge.h
#pragma once

class UnityAdsBridge
{
public:
    static void show();
    static void hide();
};

UnityAdsBridge.mm
#include "UnityAdsBridge.h"
#import <UnityAds/UnityAds.h>

void UnityAdsBridge::show()
{
    if ([[UnityAds sharedInstance] canShow] && [[UnityAds sharedInstance] canShowAds]) {
        [[UnityAds sharedInstance] show];
    } else {
        //cannot show
    }
}

void UnityAdsBridge::hide()
{
    [[UnityAds sharedInstance] hide];
}

기타


  • 앱 신규 등록 직후의 몇 시간은 start시에 서버 에러가 되어 광고가 게재되지 않았습니다.
  • 동영상 광고이므로 UnityAds # show () 때는 BGM을 off합니다.
  • 실제 기계는 물론, iOS Simulator에서도 광고 테스트가 가능했습니다 (감사합니다).
  • 좋은 웹페이지 즐겨찾기