cocos2d-xプロジェクトにUnityAdsを導入する(iOS編)
UnityAdsというUnity公式の広告SDKがあるのですが
ゲームに特化したビデオ広告ということでとても魅力的です。
のでcocos2d-xのゲームに導入してみました。
UnityAdsに統合ガイドがあるのですがcocos2d-x向けではなく、
下記の通りにやっても動作しなかったので統合ガイドの補足メモです。
※UnityAdsでのアカウント、ゲーム登録はすでに行っている前提です
http://unityads.jp/help/documentation-for-publishers/integration-guide-for-ios
1. ダウンロード
http://unityads.jp/help/documentation-for-publishers/downloads
ガイドの通り、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追加
#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の追加
:
// 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を判別したのでそちらに合わせました。
#pragma once
class UnityAdsBridge
{
public:
static void show();
static void hide();
};
#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でも広告のテストが可能でした(ありがたい)
Author And Source
この問題について(cocos2d-xプロジェクトにUnityAdsを導入する(iOS編)), 我々は、より多くの情報をここで見つけました https://qiita.com/keidroid/items/32a87f99ec19d747bd5a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .