Skip to content

iOS implement LobiRecSDK Cocos2d x

osawa-shunsuke edited this page Mar 3, 2016 · 28 revisions

Cocos2d-x Lobi Rec SDK 導入手順書


事前にお読みください

Cocos2d-x 導入準備

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導入までのフローを参照してください。

Xcodeプロジェクトへのフレームワーク追加・プロジェクト設定

LobiCoreフレームワークの追加

LobiSDKでは、各機能のチャット / Rec / ランキングを利用する際にLobiCoreフレームワークが必要になります。
LobiCore.framework、LobiCore.bundleをファイルシステムからドラッグしてXcodeプロジェクトに追加します。

LobiRecフレームワークの追加

LobiRec.framework、LobiRec.bundleをファイルシステムからドラッグしてXcodeプロジェクトに追加します。

Info.plistの設定

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初期化処理

Lobi SDKの初期化処理

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 を指定してください。

※LobiSDK/LobiRecの初期化設定は必ず以下のイベントが発生する前までに完了させてください。

  • LobiAPIクラスを利用してAPIを利用する
  • LobiCore / LobiRec / LobiRankingが提供するviewを表示する、機能を利用する

viewControllerの設定

LobiSDKのチャットやプロフィール画面などを表示するために、UIWindowクラスに設定されるviewControllerをLobiCoresetRootViewControllerメソッドで設定します。

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スキームへの対応処理

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は現在、日本語/英語/台湾語/韓国語の表記に対応しています。 日本語のみを対象としているゲーム内のLobiSDKにおいて英語しか表示されないといった場合には、導入されるプロジェクト自体のデフォルト言語を変更する必要があります。

下図のようにTARGETのInfoタブより、Localization native development regionの値をJapanに設定し、Localizationsの値をJapaneseに変更することで対応可能です。

デフォルトの言語を変更しても日本語のLobiSDKが表示されない場合は、プロジェクトにInfoPlist.stringsを追加します。

Xcode右のユーティリティを開き、InfoPlist.stringsのローカライズを行います。

追加したInfoPlist.stringsが言語ごとに作成されます。


他のフレームワークの実装・導入

Clone this wiki locally