Repository navigation
iOS Everyplay Tutorial_ja
ここではEveryplayTutorialを簡単に見てみます。これはeveryplay-ios-examplesリポジトリからのサンプルアプリです。
このドキュメントで扱う範囲:
- 基本的なEveryplay clientid / secret の初期化
- Everyplayデリゲートハンドリング
- 録画した動画にメタデータを追加し、ユーザーエクスペリエンス・ナビゲーションを向上する
- Everyplayビューを起動、録画を開始・停止、 直近に録画した動画を再生するシンプルなUIボタンを追加する
有効なメソッドに関する詳細な情報についてはiOS Class リファレンスドキュメンテーションをご参照下さい。
このドキュメントを読みはじめる前に、下記の必須資料を読み、理解していることを確認して下さい:
Everyplay SDKとサンプルをGithubからダウンロードする
% git clone https://github.com/Everyplay/everyplay-ios-sdk.git
% git clone https://github.com/Everyplay/everyplay-ios-examples.git
% cd everyplay-ios-examples
% open -a Xcode EveryplayTutorial.xcodeproj
- Everyplay.frameworkとEveryplay.bundleをEveryplayTutorialプロジェクトへドラッグします
-
EveryplayTutorialターゲットを選択し、SummaryタブからLinked Frameworks and Librariesをチェックし、最低でも次のフレームワークには必ずリンクして下さい:- AdSupport (iOS 6+, pre-iOS 6 互換用に
Optionalリンクを設定して下さい) - AssetsLibrary
- AudioToolbox (EveryplayTutorialに前もって追加してあります)
- AVFoundation
- CoreGraphics (EveryplayTutorialに前もって追加してあります)
- CoreImage (iOS 5+, pre-iOS 5 互換用に
Optionalリンクを設定して下さい) - CoreMedia
- CoreVideo
- Foundation (EveryplayTutorialに前もって追加してあります)
- MessageUI
- MobileCoreServices
- OpenGLES (EveryplayTutorialに前もって追加してあります)
- QuartzCore (EveryplayTutorialに前もって追加してあります)
- Security
- Social (iOS 6+, set to pre-iOS 6互換用に
Optionalリンクを設定して下さい) - StoreKit
- SystemConfiguration
- Twitter (iOS 5+, pre-iOS 5 互換用に
Optionalリンクを設定して下さい) - UIKit (EveryplayTutorialに前もって追加してあります)
- AdSupport (iOS 6+, pre-iOS 6 互換用に
- ビューコントローラヘッダ
ERViewController.h内でEveryplayヘッダアンブレラをインポートし、 Everyplay用のデリゲートを追加して下さい。
*/
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
#import "EAGLView.h"
#import "Config.h"
-@interface ERViewController :UIViewController {
+#import <Everyplay/Everyplay.h>
+
+@interface ERViewController :UIViewController <EveryplayDelegate> {
EAGLContext *context;
GLuint program;
BOOL animating;
NSInteger animationFrameInterval;
CADisplayLink *__unsafe_unretained displayLink;-
アプリケーションデリゲート実装
ERAppDelegate.m内で、 clientId・secret・リダイレクトURIを用いたapplication:didFinishLaunchingWithOptions:メソッドによるEveryplayの初期化を追加します。Everyplayデリゲートとビューハンドリングには、 デリゲートハンドリングに使用するインスタンスとビューコントローラを渡す必要があります。この例では、両方とも
ERViewControllerで扱います。
self.viewController = [[ERViewController alloc] initWithNibName:@"ERViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ERViewController alloc] initWithNibName:@"ERViewController_iPad" bundle:nil];
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
+ // 私共のclient id と secretでEveryplay SDKを初期化します。
+ // これらは https://developers.everyplay.com で生成できます。
+ [Everyplay setClientId:@"b459897317dc88c80b4515e380e1378022f874d2" clientSecret:@"f1a162969efb1c27aac6977f35b34127e68ee163" redirectURI:@"https://m.everyplay.com/auth"];
+
+ // Everyplayに 私共のrootViewControllerを使用してpresenting viewsおよびdelegate callsを処理するよう命令します。
+ [Everyplay initWithDelegate:self.viewController andParentViewController:self.window.rootViewController];
+
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
// アプリケーションがactive状態からinactive状態へ移行しようとする際に送られます。これは特定のタイプのテンポラリインタラプション(電話着信やSMS受信など)もしくはユーザーによるアプリケーション終了にともなって発生し得ます。そうするとbackground状態への移行が始まります。
// このメソッドは実行中タスクの中断、タイマーの無効化、OpenGL ES フレームレートの引き下げに使用します。ゲームの中断にはこのメソッドを使用して下さい。-
テスティングに近づいてきました!ボタンをいくつか作って、
ERViewControllerの実装にEveryplayデリゲートハンドラを追加すれば、アプリのビルドと実行の準備ができます。everyplayRecordingStoppedでは、録画したばかりのセッションにメタデータを追加します。あなたのゲームの、 ハイスコア・プレイしたレベル・使ったキャラクターなどをメタデータにできます。ユーザーエクスペリエンス向上のため、メタデータを追加してナビゲーションと検索を強化しましょう。 Everyplayは後々この情報をゲームプレイに関する情報の表示に使用することになりますし、 サーバーAPIを通じてあなたが個人的に使用することもできます。。
NUM_ATTRIBUTES
};
@interface ERViewController ()
@property (nonatomic, strong) EAGLContext *context;
@property (nonatomic, unsafe_unretained) CADisplayLink *__unsafe_unretained displayLink;
@property (nonatomic) NSString *song1;
+@property (nonatomic, retain) IBOutlet UIButton *everyplayButton;
+@property (nonatomic, retain) IBOutlet UIButton *recordButton;
+@property (nonatomic, retain) IBOutlet UIButton *videoButton;
+
- (BOOL)loadShaders;
- (BOOL)compileShader:(GLuint *)shader type:(GLenum)type file:(NSString *)file;
- (BOOL)linkProgram:(GLuint)prog;
- (BOOL)validateProgram:(GLuint)prog;
@end
@implementation ERViewController
@synthesize animating;
@synthesize context;
@synthesize displayLink;
+@synthesize everyplayButton;
+@synthesize recordButton;
+@synthesize videoButton;
+
- (void)dealloc
{
if (program) {
glDeleteProgram(program);
program = 0;
}
...
[_song1 getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];
result = fmod_system->createSound(buffer, FMOD_SOFTWARE | FMOD_LOOP_NORMAL, NULL, &sound1);
result = fmod_system->playSound(FMOD_CHANNEL_FREE, sound1, false, &channel);
#endif
// ビューのロード後は、例によってnibから追加設定を行います。
+ [self createButtons];
}
- (void)viewDidUnload
{
[super viewDidUnload];
if (program) {
...
- (BOOL) shouldAutorotate {
return YES;
}
#pragma mark -
+- (void)createButtons {
+ int buttonX = 10;
+ int buttonY = 10;
+ int buttonWidth = 200;
+ int buttonHeight = 40;
+ int padding = 8;
+
+ everyplayButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
+ everyplayButton.frame = CGRectMake(buttonX, buttonY, buttonWidth, buttonHeight);
+ [everyplayButton setTitle:@"Everyplay" forState:UIControlStateNormal];
+ [everyplayButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
+ [everyplayButton setTitleColor:[UIColor yellowColor] forState:UIControlStateHighlighted];
+
+ [everyplayButton addTarget:self action:@selector(everyplayButtonPressed:)
+ forControlEvents:UIControlEventTouchUpInside];
+ [self.view addSubview: everyplayButton];
+
+ buttonY = buttonY + buttonHeight + padding;
+ recordButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
+ recordButton.frame = CGRectMake(buttonX, buttonY, buttonWidth, buttonHeight);
+ [recordButton setTitle:@"Start Recording" forState:UIControlStateNormal];
+ [recordButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
+ [recordButton setTitleColor:[UIColor yellowColor] forState:UIControlStateHighlighted];
+
+ [recordButton addTarget:self action:@selector(recordButtonPressed:)
+ forControlEvents:UIControlEventTouchUpInside];
+ [self.view addSubview: recordButton];
+
+ buttonY = buttonY + buttonHeight + padding;
+ videoButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
+ videoButton.frame = CGRectMake(buttonX, buttonY, buttonWidth, buttonHeight);
+ [videoButton setTitle:@"Play Last Recording" forState:UIControlStateNormal];
+ [videoButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
+ [videoButton setTitleColor:[UIColor yellowColor] forState:UIControlStateHighlighted];
+ videoButton.hidden = YES;
+
+ [videoButton addTarget:self action:@selector(videoButtonPressed:)
+ forControlEvents:UIControlEventTouchUpInside];
+ [self.view addSubview: videoButton];
+}
+
+- (IBAction)everyplayButtonPressed:(id)sender {
+ [[Everyplay sharedInstance] showEveryplay];
+}
+
+- (IBAction)recordButtonPressed:(id)sender {
+ if ([[[Everyplay sharedInstance] capture] isRecording]) {
+ [[[Everyplay sharedInstance] capture] stopRecording];
+ } else {
+ [[[Everyplay sharedInstance] capture] startRecording];
+ }
+}
+
+- (IBAction)videoButtonPressed:(id)sender {
+ [[Everyplay sharedInstance] playLastRecording];
+}
+
+#pragma mark - Delegate Methods
+- (void)everyplayShown {
+ NSLog(@"everyplayShown");
+
+ [self stopAnimation];
+#if USE_AUDIO
+ channel->setMute(true);
+#endif
+}
+
+- (void)everyplayHidden {
+ NSLog(@"everyplayHidden");
+
+ [self startAnimation];
+#if USE_AUDIO
+ channel->setMute(false);
+#endif
+}
+
+- (void)everyplayRecordingStarted {
+ NSLog(@"everyplayRecordingStarted");
+
+ [recordButton setTitle:@"Stop Recording" forState:UIControlStateNormal];
+}
+
+- (void)everyplayRecordingStopped {
+ NSLog(@"everyplayRecordingStopped");
+
+ [recordButton setTitle:@"Start Recording" forState:UIControlStateNormal];
+ videoButton.hidden = NO;
+
+ [[Everyplay sharedInstance] mergeSessionDeveloperData:@{@"testString" :@"hello"}];
+ [[Everyplay sharedInstance] mergeSessionDeveloperData:@{@"testInteger" :@42}];
+}
+
@end- EveryplayTutorialはいくつか追加項目を足した完了例として、 everyplay-ios-examplesでご覧になれます。

