グロースハッカーとは




数年前から、少しずつ耳にしていたグロースハッカーという名称。
気になってみたので調べてみた所、結構な記事が沢山あり書籍も発売されていたので早速購入してみました。



あっという間に読み終えれました。


ボリュームもそこまで多くなく様々な事例や実際にクックパッドの現場で実行されている
一例などがあがっているといった内容です。


読んでみた感想とグロースハッカーについてざっくりとまとめてみます。


グロースハッカーとは



まず名称の定義から。


「グロース」とは「成長」をさします。
製品やサービスはもちろん、ベースにある企業・事業・組織なども含めます。


では「ハッカー」とは。
私の身近でもそうですが、ハッカーと聞くとパソコンを利用して不正行為を行う悪い人
みたいなイメージがある気がします?
映画などでそういった人達をハッカーなんて呼んだりしてますよね。


実際はそんな事はなく
主にコンピュータ等で常人より深い技術知識を持ち、その知識を利用して課題をクリアしたり成果を出す人
をさします。


実際に、不正行為を行う人々は「クラッカー 」と呼ばれる人達が該当します。


ではグロースハッカーは何をする人たちなのか。


書籍の中では以下のキーワードから始まります。
グロースハッカーは新世代のマーケティング担当幹部である


簡単に言えばデータ分析を行いながら様々なパターンを繰り返し、
お金をかけずに製品・企業・サービスを成長させていく人。


非常に地味な仕事でも仮説を立て、実施し、その結果を分析・検証をし
成長・売る為に必要な項目は全て自発的に提案・実施を行っていく。


グロースハックのカバー範囲は非常に広く、プロモーションのみでなく
必要があれば製品のコンセプト自体も変えてしまいます。


グロースハッカーに必要な能力



ここについては様々な意見がありますが、個人的には以下があればいいかなと思います。
・コーディング能力
・技術的な知識
・分析力
・ユーザー視点で物事を考えれること
・些細で地味なことも実施し繰り返せること
・固定概念にとらわれないこと


書籍の中でも
グロースハッカーはマーケターとエンジニアのハイブリッドで「うちの製品の顧客をどうやって獲得するか」という旧来の課題に、A/Bテスト、ランディングページ、バイラル関数、メール到達品質、オープングラフなどを駆使して答える。
とあります。


グロースハッカーが見出した新しいマーケティング手法



ここ最近でグロースハッカーが活躍したスタートアップは沢山あります。
・ドロップボックス
・ジンガ
グルーポン
・インスタグラムなど


いずれも今や大儲けの会社に成長していますね。


書籍の中でも事例がいくつかのっていて以下が共通項としてあげられるのが
十分な予算がない中で、企業を成長させるためのアイデアを出し実行した所だと思います。


グロースハッカーマインドセット



書籍の中でマインドの一つとして以下の記述がありました。
製品開発とマーケティングを完全に別のプロセスとして行う方法はもう古い


グロースハッカーは大きなマーケティングコストは使わず
製品を利用するユーザーにとって大事かを考え、
無から何かを作り出し、それを非常に短期間で拡大させる処理を行います。


書籍の中で面白かったのがホットメールの事例。
同様のアイデアをベースにした施策は実は現在も大手で採用されていたりします。
iPhoneのデフォルトのメール設定にはメールの一番下に
iPhoneからの送信」
というテキストが設定されています。


製品を売るためには



書籍の中でも取り上げられていますが、従来のマーケターはすでに出来上がった製品、それがパッとしない製品でも
それを売り込むことを仕事として受け入れてきたと思います。
グロースハッカーはそれを否定していきます。


製品やサービス、あるいは事業そのものやビジネスモデルは、
それを見た最初の人が強い反応を占めるレベルになるまで改良できたりするものであり、
また、そうすべきだとグロースハッカーは考える。
と記載されています。


例として書籍では企業価値が25億ドルを超えるエアビーアンドビーやインスタグラムの実績を本書で述べていました。


グロースハッカープロダクト・マーケット・フィット(PMFと呼べるサービスに到達するまで
長い時間をかえて調査・イテレーションを行い成長させていきます。


つかんだユーザーを手放さない



従来のマーケターは獲得する時点で終了しているものだと思います。
しかしグロースハッカーマーケティングで獲得した新規顧客を定着させることを行います。


なぜならば熱心な顧客の存在自体がクチコミを行うという
マーケティングツールになりえるからです。
その為の仕組みを製品開発の時点から行えるように提案していきます。


本書の中ではツイッターの定着率が低かったことを改善した実績が載っています。


エンジニアではなかった作者の実践



同書ではエンジニアではなかった(元々マーケター)の方が自身でグロースハックを実行した実績が載っています。
私自身はエンジニアですが、グロースハックを行う上で必ずしも技術力が必要であるとは思いません。


ですが、専門的な知識や技術力はあった方が色々な事ができるのは間違いないです。


大事なのはグロースハックのマインドセットPMFを行う事だと思います。


クックパッドで行われていること



この章は実際のクックパッドで働かれている方の記載になっており中々面白いものでした。
実際のサービスでのA/Bテストの結果を踏まえて記載していただけています。


ここで書かれていることで共通していることだと思うのは
地味な仕事という事だと思います。


まとめ



今回、同書籍とWEBを見て思ったことは
自身の過去の仕事と何ら大きな変わりがないことをしていたのだなと思いました。

私自身はソーシャルゲームのプロデューサー兼エンジニアという立場でやってきて
現在はオンラインに関わる全般の仕事を行っています。


ソーシャルゲームを運用していて実施していたこと
・予算をかけずにユーザーをいかに呼び込むか。その為の仕掛けを考える
・ユーザーがいかに使いやすいものにしていくか。日々細かい修正を行い分析していく
・ユーザーを定着させるために常にサービスを向上させていく


今は様々なSNSWEBサービスAPIが充実しており
私だけでなく、多くの方が意識もせず行っていたりする可能性があります。
ただ、根底にある大事なものは
従来のマーケティング概念に縛られず、ユーザーに良いサービスを利用してもらうために
日々最大限の努力を行う
という事だと思います。


非常に読みやすい書籍だったので
まだの方は是非。
それでは〜。


グロースハック関連



参考サイト
グロースハックとは何か 最もホットな仕事 グロースハッカーとは? | Skillhub[スキルハブ]
サービスを急成長させる「グロースハッカー」とは何者か? | 日経 xTECH(クロステック)
第1回 グロースハッカーって何者なのか? | 日経 xTECH(クロステック)
“グロースハッカー”はWEBビジネスに何をもたらすか?―シリコンバレーの第一人者の言葉をまとめる。 | キャリアハック

Shareしていただけると励みになりますので
良ければよろしくお願いします

今更聞けないソーシャルゲーム・オンラインゲームの基本KPI ARMについて




ソーシャルゲーム運用で施策を行う際の項目を
今更ながらまとめてみる。


あまり数字にとらわれるのは、個人的に不本意であり
それでゲームの面白さを失うなどは絶対に避けないといけないですが
指標としてウォッチしていく事は必要不可欠だと思います。


KPI要素は大きく分けて
3つのカテゴリの項目に分けられるかなと思う。


・Acquisition(アクイジション)
・Retention(リテンション)
・Monetization(マネタイゼーション


これをまとめてARMモデルなんて呼んだりします。


ARMは、それぞれがうまく流れていないと運用が厳しくなってきます。
たとえば、ユーザーにとても気に入られているゲームでも売上げがなければ
運用をとめねばならなくなりますし、毎日ユーザーが遊びに来てくれている状態でも
新規獲得が思ったようにできなければどんどんシュリンクしていき
これも運用が厳しくなっていきます。


ARMをざっくり図でまとめるとこんな感じ。



Acquisition(アクイジション)

取得を意味し新規のユーザーさんをいかに獲得できるかという事です。
ソーシャルゲーム上でのKPIとして確認できる項目は
New User(新規流入数)、MAU、DAU
を見ます。


この項目に対する施策例だと
・友達招待
・外部の広告通知
TwitterFacebookといったSNS連携
・各PFとの連携
・事前登録
などなど。


Retention(リテンション)

維持を意味し各ゲームユーザーさんがいかに、継続して
このゲームを遊んでくれるかという事です。


ゲームを開始したユーザーがどれくらい長く遊んでくれてるかという参考になり
ここに該当する数字が悪ければ、単純にゲームが面白くなかったり
魅力的ではなかったりします。


KPIとしてよく確認するのは
継続率、DAU、MAUです。
D1,D2,D7,D14,D30など、何日間続けて遊んでもらえているか?
という項目を見ます。


この項目に対する施策例だと
・ログインボーナス
・カムバックキャンペーン
・期間限定イベント
などがあると思います。

Monetization(マネタイゼーション

貨幣を発行を意味し
ユーザーさんにゲーム内で課金をしてゲームを遊んでもらうための項目です。
KPIとして確認するのは
課金者数、CVR(コンバージョンレート)、ARPPUです。


この項目に対する施策例だと
・時短アイテム
・ガチャ
・セール
・期間限定イベント
などがあると思います。


特に直近、重要視されるのは、
Retention(リテンション)です。
ここが良くないといくらプロモーション費用をかけたりしてユーザーさんを集めても
離脱につながりゲームが活性化されません。
要するにユーザーが楽しんでリピートしてくれるものでないといけないということですね。


それでは〜。


ゲーム製作おすすめ本



Shareしていただけると励みになりますので
良ければよろしくお願いします

アプリ開発時の画面設計モックアップツールはPencil Project




スマホ開発をする場合に画面設計などは
よく悩む項目の一つだと思います。


個人でやる場合は手書きでやる事が多かったりしてました。
UI STENCILSのStencil Kit使えば手書きでも結構行けますし。



ただ企業相手の場合だと中々そうもいかなくて
過去、PowerPointやらExcelやらで一生懸命作ったりしてましたが。。。


正直、大変です。


作るまでに結構な時間を要します。パーツ作るのも涙目です。
ついでにペーパーレスでどうにかできないかなーとも思ったり。


要素としては、以下が整っているものを前提として。


1. 使い勝手が良い(ドラッグ&ドロップで)
2. それなりにパーツが充実している(PSDは良く見かけるんだけども、ツールが良いよね)
3. 出力フォーマットがそれなりに整っている(PDFとか)
4. やっぱり無料が嬉しいな


上記を踏まえてこいつは良いじゃん!と思えたものがありましたよー。
Pencil Project




使ってみた感じ

基本ドラッグ&ドロップで行けます。
各パーツも充実してて、サイズの変更や文字入力もOK。
結構この手のツールで良くあるiOS用です!みたいな事もなくて
Android,iOSともに行けちゃうのがまた良いです。



PDF出力も行けました。



もし同様の内容でお探しの方いらっしゃったら、一度お試し頂くと良いかもです。



条件が合わなかったので今回はあまり利用しませんでしたが
WEBサービスだと
fluid辺りは結構使いやすいサイトでした。



それでは〜。



UI/UXおすすめ本
スマホ

iPhone

Android



Shareしていただけると励みになりますので
良ければよろしくお願いします

iOS開発でのNSLogはDEBUGマクロで使おう




今更ネタになりますがiOS開発でデバック処理をする際に
NSLogを利用する事が多いと思います。


そのままうっかり、NSLogを埋め込んだまま申請してしまう事あるんじゃないでしょうか?


実はこれが意外と危険だったりします。




NSLogの出力内容はリリース後のアプリからでも見る事が可能だからです。
実機をPCにつないでOrganizerとか
iPhone構成ユーティリティ開いてアプリ起動して見ると見れちゃいます。



NSLogAPI処理のURL情報とかパラメータとか書いてあったら・・・
考えただけでもコワすぎです。



という事でNSLogデバック時のみ出力するためにC言語マクロを使って出力しましょうという所が今回。



前準備としては以下を-prefix.pchファイルに追記します。
(-prefix.pchファイルに記載しておけば、特にimportとか気にせずどこからでも利用できます)

#ifdef DEBUG
#define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#define DLog(...)
#endif

// ALog always displays output regardless of the DEBUG alarm
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);



C言語のプリプロセッサ※1#ifdef文を利用して
Preprocessor MacrosでDEBUG設定されていた場合は
DLog記載情報に対し、NSLog出力を行います。
DEBUG設定がない場合はDLogと記載された情報は特に何も処理しないといった感じになります。
※1プリプロセッサについてはこことかでご確認ください


ちなみに、ALogの方は見ての通り、デバックモードと関係なく出力したい情報があった場合に使用します。
例えば、システムエラー等でログ情報としてリリース後も残したい場合などです。



マクロ※2の内容としてはざっと以下の感じになります。

マクロ名 内容
__PRETTY_FUNCTION__ クラス名とメソッド名の取得
__LINE__ 行数の取得
##__VA_ARGS__ Logに出力する情報取得
※2マクロについてはこことかでご確認ください



実際にViewContorllerクラスのViewDidLoadに以下のように記載して実行してみます。

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    DLog(@"test!!!");
}

[実行結果のコンソール]


2012-05-02 00:42:52.454 NSLogTest[4196:f803] -[ViewController viewDidLoad] [Line 25] test!!!



ちなみにLog出力情報として文字列は特に出したくないけど、きちんと処理が通ってるか確認したいとかって場合は
NSLogと違って引数無しで出力する事も可能です。

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    DLog();
}

[実行結果のコンソール]


2012-05-02 00:51:14.719 NSLogTest[4295:f803] -[ViewController viewDidLoad] [Line 25]



もちろん、通常のNSLog同様、引数に文字列等を表示させる事も可能です。

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString* string = @"test!!!";
    DLog(@"test!!! %@",string);
}

[実行結果のコンソール]


2012-05-02 01:02:03.630 NSLogTest[4561:f803] -[ViewController viewDidLoad] [Line 26] test!!! test!!!



DEBUGマクロXCode定義は
PROJECTBuild SettigsApple LLVM compiler 3.0 - Preprocessiong
Preprocessor Macrosになります。



これでNSLogで情報だだ漏れを回避できますね。


ではでは〜






Shareしていただけると励みになりますので
良ければよろしくお願いします

iOS5でのUINavigationBarの背景画像処理




iOS5以前でUINavigationBarの背景に画像を使用する際には、いくつか方法がありました。
例えば以下の画像(navibar.png)を適用したい場合
[navibar.png]


よく利用していたパターン2つを参考としてあげます。

【NavigationBarカテゴリでdrawRect】

 @implementation UINavigationBar (UINavigationBarCategory)
 - (void)drawRect:(CGRect)rect 
 {
     UIImage *image = [UIImage imageNamed:@"navibar.png"];
     [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
 }
 @end



【NavigationBarにinsertSubview】

    #import <QuartzCore/QuartzCore.h>
    ..
    ..
    UIImage *image = [UIImage imageNamed:@"navibar.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = self.navigationController.navigationBar.bounds;
    imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth
                                  | UIViewAutoresizingFlexibleHeight);
    imageView.layer.zPosition = -FLT_MAX;
    [self.navigationController.navigationBar insertSubview:imageView atIndex:0];




ですが、これらの方法はiOS5以降では使用できなくなっています。

iOS5だと変化なし

iOS5以降のUINavigationBarには
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
メソッドが用意されており、Viewの構成が変わったようです。
なので、iOS5以降では上記のパターンは以下のように修正しておく必要があります。

【NavigationBarカテゴリでdrawRect】
UINavigationBar (UINavigationBarCategory) は残しつつ以下処理を追加

    // iOS 5用  メソッドの有無で確認
    if([self.navigationController.navigationBar
        respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] )
    {
        [self.navigationController.navigationBar setBackgroundImage:image
                                                      forBarMetrics:UIBarMetricsDefault];
    }



【NavigationBarにinsertSubview】
if文で振り分け

    #import <QuartzCore/QuartzCore.h>
    ..
    ..
    UIImage *image = [UIImage imageNamed:@"navibar.png"];
    // iOS 5用 メソッドの有無で確認
    if([self.navigationController.navigationBar
        respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] )
    {
        [self.navigationController.navigationBar setBackgroundImage:image
                                                      forBarMetrics:UIBarMetricsDefault];
    }
    // iOS 4.3以前
    else
    {
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        imageView.frame = self.navigationController.navigationBar.bounds;
        imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth
                                      | UIViewAutoresizingFlexibleHeight);
        imageView.layer.zPosition = -FLT_MAX;
        [self.navigationController.navigationBar insertSubview:imageView atIndex:0];
    }



うまく適用できました。


では、今回はこの辺りで。






Shareしていただけると励みになりますので
良ければよろしくお願いします

iOS5でのUITextFieldやUITextViewでのキーボード処理の注意点と対策




iOS5でのUIKeyboardWillShowNotificationの挙動が変わっていて
(まだ詳しく調べてないので、現状だけかもしれないですけど)
作り方によっては問題が発生してしまうという事があったので書いてみました。


UITextFieldUITextViewでキーボードの表示・非表示時にViewの設置場所によっては
キーボードに隠れてしまうケースがあります。
以下のように設置してTextFieldを選択するとキーボードが表示した際に隠れてしまいます。


こういった現象を回避するためにNSNotificationCenterUIKeyboardWillShowNotification
通知処理を行いキーボードのサイズ分TextFieldやTextViewの位置を調整したりします。

例えば以下の場合は通知処理を受け取ってTextFieldの位置をキーボードで隠れてしまう分
上にあげて、キーボードの決定ボタンで下に下げる処理を行っています。
TextFieldのY座標は266で定義してあります。

【キーボード通知定義】

    NSNotificationCenter *notification = [NSNotificationCenter defaultCenter];
    // キーボード表示時
    [notification addObserver:self selector:@selector(keyboardWillShow:) 
						 name: UIKeyboardWillShowNotification object:nil];
    // キーボード非表示時
	[notification addObserver:self selector:@selector(keyboardWillHide:) 
						 name: UIKeyboardWillHideNotification object:nil];

【キーボード通知受け取り】

/*
 *  キーボード表示
 */
- (void)keyboardWillShow:(NSNotification *)notificatioin
{
    // ここでTextFieldやTextViewの位置を変更する
    NSLog(@"keyboardWillShow");
    
    // キーボードに合わせたアニメーション処理
    [UIView animateWithDuration:0.3f
                     animations:^{
                         
                         // TextFieldのframe
                         CGRect viewRect  = uiTextField.frame;
                         
                         // キーボードのサイズを取得
                         CGRect keybord;
                         [[notificatioin.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &keybord];
                         
                         // TextFieldの位置から(元のY座標+TextViewの高さ) - (Viewの高さ - キーボード)分、上げる(マイナスする)
                         viewRect.origin.y -= ((266.0f+viewRect.size.height)-(self.view.frame.size.height - keybord.size.height));
                         uiTextField.frame = viewRect;
                     }];
}

/*
 *  キーボード非表示
 */
- (void)keyboardWillHide:(NSNotification *)notificatioin
{
    // ここでTextFieldやTextViewの位置を戻す
    NSLog(@"keyboardWillHide");    
    
    // キーボードに合わせたアニメーション処理
    [UIView animateWithDuration:0.3f
                     animations:^{
                         
                         // TextFieldのframe
                         CGRect viewRect  = uiTextField.frame;
                         
                         // TextFieldのY座標を元の位置に定義
                         viewRect.origin.y = 266.0f;
                         uiTextField.frame = viewRect;
                     }];
}




上記の処理を実行してみると


こんな感じでTextFieldがキーボードに合わせて上下に移動します。
何かここだけ見るといい感じに見えます。

実は、ここまでの状態であれば特に問題はありません。
日本語用キーボードが表示された時に問題が発生します。
この問題はiOS4までの状態では起きずに、iOS5だと発生します。

ではキーボードの変更処理を行ってみます。


キーボード変更ボタンを押すたびにTextFieldが上へあがって行ってしまいました。
どんどん上にあがる?
という事は、もしかしたらUIKeyboardWillShowNotification
何度も呼び出されている可能性があります。

その場合はNSLog(@"keyboardWillShow");
何度も表示されているはずなので、さっそくコンソールを確認。

2011-10-23 15:58:41.828 KeybordSample[927:f803] keyboardWillShow
2011-10-23 16:08:18.768 KeybordSample[927:f803] keyboardWillShow
2011-10-23 16:08:20.730 KeybordSample[927:f803] keyboardWillShow
予想通り「英語用表示時、日本語用キーボード変換時、英語用キーボード変更時」の各3回分
keyboardWillShowが表示されていました。
iOS4まではUIKeyboardWillShowNotificationの通知は
キーボードが非表示の状態から表示された状態の場合のみに通知される仕組みでした。
ところがiOS5では、この通知がキーボードを変更する際にも通知されるようになっています。

変更と言っても、キーボード自体のサイズが変わらない状態だと通知はされません。
日本語キーボードはiOS5より拡張され上に入力候補が表示されるようになりました。
その分、iOS4までの統一だったキーボードのサイズよりも高さが変わります。

このように入力候補の有る無しの切り替えで
UIKeyboardWillShowNotificationが何度も通知されるようになりました。
先ほどのパターンだと「無し→有り→無し」の変更だったため、三回呼び出しがあったわけです。

iOS4までだとUIKeyboardWillShowNotificationは通知受け取りのkeyboardWillShow:メソッド内で
今のTextFieldのY座標からキーボードの高さで隠れてしまう分を引けば問題ありませんでした。
というのも非表示からの一度の通知のみですから、TextFieldのY座標は必ず初期値である266だったからです。

ですが、このiOS5からの通知変更によりTextFieldのY座標はすでに上記処理で
上に上げられた位置にいる可能性がある事を考慮しなければならなくなりました。
※いきなり日本語用キーボードが表示される時は二回通知がくるようです。


原因の切り出しはできたのでkeyboardWillShow:メソッド内の
TextFieldへの処理を以下のような形で対応してみました。
※どちらのパターンでも対処できると思います

【パターン1】

/*
 *  キーボード表示
 */
- (void)keyboardWillShow:(NSNotification *)notificatioin
{
    // ここでTextFieldやTextViewの位置を変更する
    NSLog(@"keyboardWillShow");
    
    // キーボードに合わせたアニメーション処理
    [UIView animateWithDuration:0.3f
                     animations:^{
                         
                         // TextFieldのframe
                         CGRect viewRect  = uiTextField.frame;
                         
                         // 追加 常にY座標を初期値にする
                         viewRect.origin.y = 266.0f;
                         
                         // キーボードのサイズを取得
                         CGRect keybord;
                         [[notificatioin.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &keybord];
                                                         
                         // TextFieldの位置から(元のY座標+TextViewの高さ) - (Viewの高さ - キーボード)分、上げる(マイナスする)
                         viewRect.origin.y -=  ((266.0f+viewRect.size.height)-(self.view.frame.size.height - keybord.size.height));
                         uiTextField.frame = viewRect;
                     }];
}

【パターン2】

/*
 *  キーボード表示
 */
/*
 *  キーボード表示
 */
- (void)keyboardWillShow:(NSNotification *)notificatioin
{
    // ここでTextFieldやTextViewの位置を変更する
    NSLog(@"keyboardWillShow");
    
    // キーボードに合わせたアニメーション処理
    [UIView animateWithDuration:0.3f
                     animations:^{
                         
                         // TextFieldのframe
                         CGRect viewRect  = uiTextField.frame;
                         
                         // キーボードのサイズを取得
                         CGRect keybord;
                         [[notificatioin.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &keybord];
                         
                         // TextFieldの位置から(元のY座標+TextViewの高さ) - (Viewの高さ - キーボード)分、上げる(マイナスする)
                         //viewRect.origin.y -= ((266.0f+viewRect.size.height)-(self.view.frame.size.height - keybord.size.height));
                         
                         //Viewの高さ - キーボードの高さ - TextViewの高さを引いて、その位置にする
                         viewRect.origin.y = self.view.frame.size.height - keybord.size.height - viewRect.size.height;
                         uiTextField.frame = viewRect;
                     }];
}


【パターン1】では、常にTextFieldのY座標を初期値に変更し処理を行っています。
【パターン2】では、TextFieldのY座標にViewの高さ-から、キーボードの高さとTextViewの高さを引き
 キーボードの真上にくるようにしています。


上手く表示されるようになりましたね。

今回のような状態になっているアプリを最近よく見かけるので
UIKeyboardWillShowNotificationを利用する際は気をつけてください。

今回のキーボードの仕様変更で、固定値でキーボードのギリギリ上に
UITextFieldUITextViewを設置しているような場合は
日本語用キーボードの時に隠れてしまうので注意してください。

固定値で処理していたような場合はiOS5からUIKeyboardWillChangeFrameNotificationという
通知イベントが追加されているようなので、そっちで動的に処理を行うのが良いと思います。

では、今回はこの辺りで終わります。






Shareしていただけると励みになりますので
良ければよろしくお願いします

iPhone4S au ezwebメール(@ezweb.ne.jp) プッシュ通知方法




ついにiPhone4Sでましたね!
しかも今回はSoftbankだけでなく、auからも発売されました。


どっちのキャリアにするかギリギリまで迷ったのですが、僕はauを選択。


現状、ユーザー数がまだまだ少ないという事もあると思うんですが
両キャリア使用してみて、通信速度が圧倒的にauの方が良かったので。
(仕事柄、発売日に両キャリアを試せる環境にいる事に感謝です!)


ただ調査不足のままauにしてしまったので
いくつか利用できない機能がある事を知りませんでした。


利用できない機能のうちの一つプッシュ通知未対応に対して
行っている対処法について書きたいと思います。


現状、ezwebメール(@ezweb.ne.jp)は最短15分おきのフェッチとなり
プッシュ処理は行えません。
(フェッチ処理は 15分ごと、30分ごと、1時間ごと、手動)


 


普段からGmailメインで使われている方は「ふーん」程度なのかもしれないですが
キャリアメール使いたいなーと考えている僕としては、これは困ります。


で、色々調べた結果で圧倒的にでてきたのは
iCloud』でのプッシュ通知でした。
au iPhone 4Sのezwebメールはプッシュ通知未対応、iCloudで解決 | ガジェット通信 GetNews
(今回はこの方法をおすすめしたい訳ではないので登録方法詳細は割愛します)


んで早速試しました。
確かにプッシュ通知くるんですが。。。


 
受信枠2重になって、バッチも2重になってちょっとウザいんですけど。。



もしかしたらプッシュのみの設定ができたりするのかもしれないんですが
そっちの方はちょっと調べてみても解らなかったので別の方法で検討してみる事に。


んで、見つけたのがアプリを利用してメールを受信したらプッシュ通知を行うように
設定して知るという方法。
Boxcarというアプリで可能でした。






Boxcar
価格: 無料
Boxcar - appremix


無料アプリであり、アイコンもUIも美しい!
プッシュ通知音も色々用意されているのでユーザーにとってはありがたい限りです!
プッシュ通知できる種類も充実してます。


細かい使い方は
美しくなった「Boxcar」で快適プッシュライフ。 | 覚醒する @CDiP
とか、とっても参考になるので見てくださいね!


アイコン並べてみても起動画面もUIも美しいっす
  


プッシュからの起動時に何を起動するか選択もできるので
Emailはメール生成画面を起動するように設定。






さぁ、どんなもんかテスト。


 


すぐにプッシュ通知が来て、起動したらメール生成画面が起動しました。
(本当はメール受信一覧とかが起動されると嬉しいんですけど、同じ開発者としてOpenURL:処理は
メール生成画面しかメール関係は起動できないの知ってるので我慢です)


今回のようなプッシュ問題は、いずれauさんの方で解決されるのかもしれないですが
それまでの間のつなぎになればと思います。


それでは皆さん、楽しいiPhoneライフを送ってくださいね!


Shareしていただけると励みになりますので
良ければよろしくお願いします