iOS implement LobiRecSDK Cocos2d x
- Cocos2d-x 導入準備
- Xcodeプロジェクトへのライブラリ追加・プロジェクト設定
- プログラムの実装 - Lobi Rec初期化処理
- プログラムの実装 - 録画開始/終了
- プログラムの実装 - プレイ動画シェア画面
- プログラムの実装 - タグ機能
- プログラムの実装 - リプレイ動画一覧画面
- プログラムの実装 - 通知のハンドリング
- LobiSDKの多言語化対応
LobiRecフレームワークではiOSアプリにゲーム実況録画機能を提供します。
- 対応OS: iOS 5.1 またはそれ以降のバージョン
- 対応アーキテクチャ: armv7, armv7s, arm64
- 事前に用意いただくファイル・情報
- LobiCoreフレームワーク・バンドル (LobiSDK統合フレームワーク)
- LobiRecフレームワーク・バンドル
- Client ID
- LobiRec.framework
- LobiRec.bundle
- LobiCore.framework
- LobiCore.bundle
- Client ID
Lobi SDKを利用するには、クライアントIDを用意する必要があります。
クライアントIDは開発者向けページにて取得することができます。
詳しくはLobi SDK導入までのフローを参照してください。
LobiSDKでは、各機能のチャット / Rec / ランキングを利用する際にLobiCoreフレームワークが必要になります。
LobiCore.framework、LobiCore.bundleをファイルシステムからドラッグしてXcodeプロジェクトに追加します。
LobiRec.framework、LobiRec.bundleをファイルシステムからドラッグしてXcodeプロジェクトに追加します。
Lobi本体アプリへのアカウントの接続やアプリ間連携のため、URLスキームを設定します。
nakamapapp-<クライアントID>
という形式のURLスキームを登録してください。
クライアントIDの取得はLobi SDK導入までのフローを参照してください。
プロジェクトのTARGETの設定 -> Build PhasesのLink Binary with Librariesに下記のframeworkを追加してください。
※iOS4.3を含むiOSをターゲットとする場合、フレームワークをrequiredからoptionalに設定してください。
- LobiCore.framework
- libsqlite3.0.dylib
- OpenGLES.framework
- QuartzCore.framework
- MediaPlayer.framework
- MessageUI.framework
- CoreData.framework
- CoreMedia.framework
- Security.framework
- CoreVideo.framework
- CoreImage.framework (optional)
- StoreKit.framework (optional)
- AVFoundation.framework (optional)
- Foundation.framework (optional)
- AudioToolbox.framework (optional)
- AssetsLibrary.framework (optional)
- UIKit.framework (optional)
Lobi SDKを初期化するため、AppControllerに対して以下のヘッダーファイルをインポートしてください。
#import <LobiCore/LobiCore.h>
#import <LobiRec/LobiRec.h>
アプリ起動時にLobiSDK/LobiRecの初期化設定を行います。
AppDelegateのapplication:didFinishLaunchingWithOptions:
メソッドに以下のコードを挿入してください。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[LobiCore setupClientId:@"クライアントID" accountBaseName:@"デフォルトのユーザ名"];
[LobiRec useOpenGLES];
-
clientID
(必須)
開発者向けページ(http://developer.lobi.co)から取得したIDを指定してください。 -
accountBaseName
(必須)
LobiSDKにサインアップする際のデフォルトのユーザー名となります。
ユーザー名が重複している場合には自動的に異なるユーザー名に変更されます。
例えば、accountBaseName
を"勇者"とした場合、ユーザー名は"勇者1", "勇者2", "勇者3" ...となります。
製作アプリにアカウントの概念が存在する場合、そのアカウント名をaccountBaseName
とすることを推奨します。
アカウントの概念が存在しない場合には固定値を入れることも可能です。
連番部分を含めて1〜20文字になるような文字列を設定してください。
-
[LobiRec useOpenGLES]
(必須)
現状、Cocos2d-xではMetalに対応していないため常に OpenGLES
を指定してください。
- LobiAPIクラスを利用してAPIを利用する
- LobiCore / LobiRec / LobiRankingが提供するviewを表示する、機能を利用する
LobiSDKのチャットやプロフィール画面などを表示するために、UIWindowクラスに設定されるviewControllerをLobiCore
のsetRootViewController
メソッドで設定します。
AppDelegateのapplication:didFinishLaunchingWithOptions:
メソッドに以下のコードを挿入してください。
/// 中略...
viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
viewController.wantsFullScreenLayout = YES;
viewController.view = __glView;
// Set RootViewController to window
if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)
{
// warning: addSubView doesn't work on iOS6
[window addSubview: viewController.view];
}
else
{
// use this method on ios6
[window setRootViewController:viewController];
}
[LobiCore setRootViewController:viewController];
URLスキームによるイベントをハンドルするため、AppDelegateに以下のコードを追加してください。
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
if ([LobiCore handleOpenURL:url]) {
return YES;
}
return NO;
}
- safariから"nakamapapp-<クライアントID>://"にアクセスするとアプリが起動することを確認して下さい。
- clientIdの設定
- viewControllerの設定
- URLスキームの設定
以上を設定後、録画開始、終了のテストコードを設定し録画されることを確認します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 冒頭に記述してください。
// クライアントID、アカウント名の設定
[LobiCore setupClientId:@"<clientId>" accountBaseName:@"<kayac>"];
// cocos2dのゲームの画面初期化・・・
// 処理の最後に記述してください。
// viewControllerの設定
[LobiCore setRootViewController:navController_];
// 録画開始
[LobiRec startCapturing];
// 10秒後録画停止。ポスト画面を開きます。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[LobiRec stopCapturingWithHandler:^{
[LobiRec presentLobiPostWithTitle:@"キタコレ"
postDescrition:@"まじキタコレ"
postScore:100
postCategory:@""
prepareHandler:^{
cocos2d::CCDirector::sharedDirector()->stopAnimation();
} afterHandler:^{
cocos2d::CCDirector::sharedDirector()->startAnimation();
}];
}];
});
return YES;
}
ゲーム録画は任意のタイミングで行えます。録画の開始をする場合は
LobiRec
クラスの
+ (void)startCapturing
を呼びます。
録画開始までに以下の録画設定を行うことができます。
-
@property (nonatomic, assign) KLVLiveWipeStatus liveWipeStatus;
録画中に表示するワイプの状態を設定します。 -
@property (nonatomic, assign) CGFloat wipePositionX;
録画中に表示するワイプのx座標を設定します。デバイス毎に設定する必要があります。 -
@property (nonatomic, assign) CGFloat wipePositionY;
録画中に表示するワイプのy座標を設定します。デバイス毎に設定する必要があります。 -
@property (nonatomic, assign) CGFloat wipeSquareSize;
録画中に表示するワイプのサイズを設定します。 -
@property (nonatomic, assign) CGFloat gameSoundVolume;
録画中のゲームボリュームの大きさを設定します。(0.0 - 1.0) -
@property (nonatomic, assign) CGFloat afterRecordingVolume;
アフレコ録画中のボリュームの大きさを設定します。(0.0 - 1.0) -
@property (nonatomic, assign) CGFloat micVolume;
録画中のマイク入力ボリュームの大きさを設定します。(0.0 - 1.0) -
@property (nonatomic, assign) BOOL micEnable;
録画中のマイク入力可否を設定します。 -
@property (nonatomic, assign) BOOL preventSpoiler;
録画中このプロパティがtrueの間、ゲーム録画ファイルにモザイク処理がかかります。 -
@property (nonatomic, assign) BOOL hideFaceOnPreview;
録画中このプロパティがtrueの間、ゲーム画面にワイプの表示がされません。 -
@property (nonatomic, assign) NSUInteger capturePerFrame;
レンダリングループのフレームに対してゲーム録画ファイルに出力する回数を設定します。
インターフェイスを作成し、ゲーム実装からLobiRecフレームワークを呼び出せるようにします。(c++)
録画開始処理のインターフェイス
namespace LobiInterface
{
void recStart();
録画開始処理インターフェイスの実装
void LobiInterface::recStart()
{
static int const offset = 8;
static int const wipesize = 100;
[LobiRec sharedInstance].liveWipeStatus = KLVWipeStatusInCamera;
[LobiRec sharedInstance].wipeSquareSize = wipesize;
[LobiRec sharedInstance].wipePositionX = offset;
[LobiRec sharedInstance].wipePositionY = offset;
[LobiRec sharedInstance].micEnable = YES;
[LobiRec sharedInstance].micVolume = 1;
[LobiRec sharedInstance].gameSoundVolume = 1;
[LobiRec sharedInstance].hideFaceOnPreview = NO;
[LobiRec sharedInstance].preventSpoiler = NO;
[LobiRec sharedInstance].capturePerFrame = 1;
[LobiRec startCapturing];
}
録画の終了をする場合は
+ (void)stopCapturing
を呼びます。
録画開始処理のインターフェイス
namespace LobiInterface
{
// 中略...
void recStop();
録画終了処理インターフェイスの実装
void LobiInterface::recStop()
{
[LobiRec stopCapturing];
}
プレイ動画シェア画面のインターフェイス
namespace LobiInterface
{
// 中略...
void presentShare();
プレイ動画シェア画面の実装
void LobiInterface::presentShare()
{
NSString *postTitle = @"プレイ動画をシェアします!";
NSString *postDescriotion = @"神懸ったこの華麗なプレイ。やばい。";
[LobiRec presentLobiPostWithTitle:postTitle
postDescrition:postDescriotion
postScore:100
postCategory:@""
prepareHandler:^{
cocos2d::CCDirector::sharedDirector()->stopAnimation();
} afterHandler:^{
cocos2d::CCDirector::sharedDirector()->startAnimation();
}];
}
録画されたプレイ動画シェア画面の表示には、
+ (void)presentLobiPostWithTitle:(NSString *)title
postDescrition:(NSString *)postDescrition
postScore:(int64_t)postScore
postCategory:(NSString *)postCategory
prepareHandler:(void(^)(void))prepareHandler
afterHandler:(void(^)(void))afterHandler;
を利用してください。
プレイ動画シェア画面では
- シェアタイトル
- コメント
- スコア
- カテゴリ
- ポスト完了アラート非表示フラグ
- オープンハンドラ
- クローズハンドラ
をパラメータにして表示することができます。
- カテゴリ
カテゴリにはLobi Developerサイトアプリ管理ページにて追加されたカテゴリIDを設定します。
カテゴリとは投稿された動画をゲームステージなどでカテゴリ分けして表示するための機能です。
- ポスト完了アラート非表示フラグ
動画を投稿するとLobiRecフレームワークから投稿完了のアラートが表示されます。
ゲームアプリ側でカスタムアラートを表示するなど、このアラートの表示を抑制する場合はYES
を設定してください。
後述のKLVDismissingPostVideoViewControllerNotification
通知名称を監視することで、動画の投稿の成功判定を含め情報を受け取ることができます。
- オープンハンドラ・クローズハンドラ
プレイ動画シェア画面表示時にcocos2dのアニメーションを停止・開始処理をハンドリングする必要があります。
prepareHandlerハンドラにてアニメーションの停止処理を実装してください。
cocos2d::CCDirector::sharedDirector()->stopAnimation();
afterHandlerハンドラにてアニメーションの開始処理を実装してください。
cocos2d::CCDirector::sharedDirector()->startAnimation();
詳しくは、Lobi Rec 動画メタ情報機能についてをご覧ください。
リプレイ動画一覧画面のインターフェイス
namespace LobiInterface
{
// 中略...
void presentLobiPlay();
リプレイ動画一覧画面の実装
void LobiInterface::presentShare()
{
// 録画中は表示しないようにする。
if (![LobiRec sharedInstance].isCapturing) {
[LobiRec presentLobiPlay];
}
}
Lobi Recでは以下のイベントで通知を行います。
適宜通知を受け取った際に処理してください。
-
NSString *const KLVDryingUpInStorageNotification;
ゲーム録画ファイルの保存領域が200MB以下になった際に録画処理が停止され、userInfoにnilを格納して通知する通知名称です。 -
NSString *const KLVMovieCreatedNotification;
ゲーム録画情報をサーバにPOSTした際に、userInfoに"url"をキーとしたhttp://play.lobi.coのプレビューURLを格納して通知する通知名称です。 -
NSString *const KLVMovieCreatedErrorNotification;
ゲーム録画情報をサーバにPOST中エラーが発生した際に、userInfoにnilを格納して通知する通知名称です。 -
NSString *const KLVMovieUploadedNotification;
ゲーム録画ファイルをサーバにPOSTした際に、userInfoにnilを格納して通知する通知名称です。 -
NSString *const KLVMovieUploadedErrorNotification;
ゲーム録画ファイルをサーバにPOST中エラーが発生した際に、userInfoにnilを格納して通知する通知名称です。 -
NSString *const KLVDismissingPostVideoViewControllerNotification;
動画ポストviewControllerを閉じた時に、userInfoに動画のポスト処理の有無を格納して通知する通知名称です。
LobiSDKは現在、日本語/英語/台湾語/韓国語の表記に対応しています。 日本語のみを対象としているゲーム内のLobiSDKにおいて英語しか表示されないといった場合には、導入されるプロジェクト自体のデフォルト言語を変更する必要があります。
下図のようにTARGETのInfoタブより、Localization native development region
の値をJapan
に設定し、Localizations
の値をJapanese
に変更することで対応可能です。
デフォルトの言語を変更しても日本語のLobiSDKが表示されない場合は、プロジェクトにInfoPlist.strings
を追加します。
Xcode右のユーティリティを開き、InfoPlist.strings
のローカライズを行います。
追加したInfoPlist.stringsが言語ごとに作成されます。