2012年2月28日火曜日

有料のiOSアプリを無料セールしてみたらこうなった

アプリ開発者の方向けのメモです。こんな例もあるよという感じで軽く読んでいただければ。


有料アプリの販促手段として値下げセールを行うというのはひとつのセオリーだと思いますが、以前ちょっとだけやってみた感触だと、セール中は確かにダウンロード数は伸びるもののセール後すぐに元の水準に戻ってしまいセールをしたメリットをあまり感じませんでした。

じゃあ、値下げじゃなくて無料セールしたらどうなるんだろう? という個人的な興味もあって、拙作某カメラアプリを期間限定で無料化してみました。
(2012/02/10 - 2012/02/12 の3日間)

結論から言うと、劇的に何かが変わったわけではないものの中途半端な値下げセールよりはずっとマシ という感じです。


無料化したアプリについて軽く触れておくと

  • 通常は170円で提供
  • ダウンロード数は1日当たり10〜30くらい
  • in-app purchase として85円のアイテムを3種類提供
  • in-app purchaseの購入数は3つ合計で1日当たり10〜30くらい

それでは、無料セールの3日間の数字を並べてみます。

アプリのダウンロード数
  • 02/10 47,358
  • 02/11 100,888
  • 02/12 117,790
3日間で約26万ダウンロードでした。

in-app purchase (合計)
  • 02/10 197
  • 02/11 434
  • 02/12 464
in-app purchase の購入率がものすごい。驚異の0.4 %
「金なんか出せるか」という無言の圧力を感じます。



さて、気になるのは無料セール後の状況です。

セール後2週間弱しか経過していないのでまだなんとも言えませんが、セール前より数字的には上向いているように見えます。
  • ダウンロード数は1日当たり40〜60くらい
  • in-app purchaseの購入数は3つ合計で1日当たり40〜60くらい

なぜ若干にしろダウンロード数が増えたかというと、まあありきたりな推測ですがソーシャルメディアでの口コミが増えたからでしょうか。

今回無料化したアプリはカメラアプリなので、FacebookTwitterへの写真アップロード機能が付いており、Instagram(アプリ)に写真を送れる機能が付いています。

Facebookはアプリごとの統計を見ることができるのでチェックしたところ、無料セール前は1日10〜20枚程度しか写真がアップロードされていなかったのがセール後は数百枚程度写真がアップロードされるようになりました。

TwitterやInstagramを目視でざっと監視したところ、Facebookほどではありませんがハッシュタグ付きでアップロードされる写真の数は明らかに増えています。

ソーシャルメディアでの口コミを期待するなら、値下げでそれなりにダウンロード数を稼ぐより、無料化して一気にばらまくほうが効率的なのでしょう。



まあ、いずれにせよ、1日あたりのダウンロード数が若干増えたことよりなにより、
26万回もダウンロードされたことで、これから新アイテムを追加する際のin-app purchaseの購入数の期待値が上がり、やろうと思えば他アプリの宣伝もできるようになったことのほうがおいしいかもしれません。

2012年2月26日日曜日

iOSアプリ開発で使えるオープンソースのカラーピッカー

色を選択する」というのは色々な種類のアプリで必要となることが多い機能ですが、作りこむとなると意外と面倒な機能です。
優秀な開発者の方々がすぐれたカラーピッカー(Color Picker)をオープンソースで公開してくれていますので、ライセンスに注意してありがたく使わせていただきましょう。


★ RSColorPicker

https://github.com/RSully/RSColorPicker



★ InfColorPicker

https://github.com/InfinitApps/InfColorPicker



★ iPhone Color Picker

http://code.google.com/p/iphone-color-picker/



★ Color Picker for iPhone

https://github.com/hayashi311/Color-Picker-for-iOS



★ ILColorPicker

https://github.com/jawngee/ILColorPicker

2012年2月19日日曜日

UITableViewCellのaccessoryViewをタップしてtableView:accessoryButtonTappedForRowWithIndexPath:メソッドが呼ばれない件

小ネタです。

UITableViewDelegate には tableView:accessoryButtonTappedForRowWithIndexPath: というメソッドがあって、UITableViewCell のアクセサリをタップした時に呼ばれる… はずなのですが、accessoryView に適当なUIViewを代入した時に呼ばれなかったのでハマりました。


どうも調べて見ると アクセサリとは accessoryViewを含まないらしく accessoryType (UITableViewCellAccessoryType) のみ、対応しているようです。

こちらのサンプルコード はそのものズバリ、accessoryViewをタップした時の挙動のデモになっています。

実際は特に難しいことをしているわけではなく、単にUIButton をaccessoryViewに入れてイベントを受け取って、tableView:accessoryButtonTappedForRowWithIndexPath:に処理を流しているだけですが。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    /**  UITableViewCell の初期化など (略) **/

    //  accessoryViewに入れるUIButtonの初期化
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = ...; 

    [button addTarget:self 
                     action:@selector(checkButtonTapped:event:)
      forControlEvents:UIControlEventTouchUpInside];

    cell.accessoryView = button;
    
    return cell;
}


- (void)checkButtonTapped:(id)sender event:(id)event
{
    //  ボタンがタップされたらtableView:accessoryButtonTappedForRowWithIndexPathに処理を流す
    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPosition = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
    if (indexPath != nil)
    {
        [self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath];
    }
}

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{ 
 // UITableViewCell の accessoryTypeにUITableViewCellAccessoryDetailDisclosureButtonなど適当な値が入っている場合はこのメソッドが直接呼ばれる
}