Skip to content

{ Author Archives }

はてなブログへ引っ越しします

2014年、あけましておめでとうございます。本年もよろしくお願いいたします。
お知らせ
さて、思うところがあり、はてなブログへ引っ越しすることにしました。
おおばログ
これまでのエントリ(…といっても大した数はないのですが)はこちらに置いたまま、新しいエントリははてなブログに更新していきます。

「iOSアプリ内課金+広告」の本を共著で書きました

「アプリ内課金+広告 iPhoneプログラミング」という本を、酢酸センセーこと和田健司さん(@ch3cooh)と共著で書きました。秀和システムさんから2014年1月下旬に発売予定です。

私は主にアプリ内課金に関するパートを、和田さんは広告パートを執筆しました。iOS 7にも対応していますし、アプリに広告を載せてチョットでもお小遣い入ったら嬉しいという方や、アプリ内課金を初めて実装したいという方にオススメできる1冊です。
目次
目次はこんな感じです。

Chapter 1 アプリ内課金と広告を理解する
アプリ内課金とアプリ内広告が存在する背景を紹介しつつ、それぞれについて説明をします。またアプリ内広告とアプリ内課金を組み合わせる魅力についても説明しつつ、この組み合わせを採用しているアプリを紹介します。
Chapter 2 アプリ内課金を実装するための準備
アプリ内課金をアプリに実装する前に準備が必要です。開発者向けに提供されている Web サイト、iOS Developer Portal、iTunes Connect を使って事前準備を行うための説明をします。
Chapter 3 アプリ内課金の実装:単一の非消耗型
アプリ内課金を実装するうえで理解をしておくべきポイントとして、アプリ〜 Store Kit 〜 App Store の関係性、各クラスの位置づけ、実装の基本ポイントを説明します。
Chapter 4 アプリ内課金の実装:単一の消耗型と自動更新購読型
アプリ内課金でよく使われている「消耗型」と比較的使われている「自動更新購読型」 について、実装のポイントを説明します。
Chapter 5 さまざまなタイプの広告を実装する
アプリ内広告を掲載するには、広告を配信する各種広告会社との契約、SDKの導入 が最初に必要です。またアプリ内での広告の見え方(見せ方)も実装の前に知っておい た方がよいでしょう。契約、SDKの導入、アプリ内広告の実装について説明します。
Chapter 6 アプリ内課金+広告タイプのアプリを作る
広告とアプリ内課金を組み合わせた(開発者にとって)魅力のあるアプリについて、 実装方法を具体的に解説します。
Chapter 7 複数の課金パターンを提供するアプリを作る
1 つのアプリ内に複数のアプリ内課金パターンを入れることで、アプリの魅力を広げることができます。このようなことを実装するにあたってのポイントを解説します。
Chapter 8 アプリ内課金をテストする
アプリ内課金はエンドユーザが支払いをする性質上、課金処理をしっかり作った上で動作確認をしておく必要があります。動作確認のポイントを説明します。
Chapter 9 アプリ内課金と広告のトラブルシューティング
アプリ内課金、アプリ内広告の実装以外に、意外なところで落とし穴が出てきたりします。多くの人が経験するであろうトラブルについて、その原因と対策について説明します。
苦労したこと
執筆当時にリリースされたiOS 7ですが、アプリ内課金のレシート確認方法がiOS 7からややこしい方法に変わっていることに気がつきました。それの解決方法について当時は日本にも海外にも情報が皆無でしたが、なんとか方法を探り当て記事にすることができました。苦労の過程はコチラに書き残しています。
謝辞
仕事として和田さんと共同作業したのは今回が初めてでした。また私は秀和さんとも初めてで、進め方の勝手が分からない中、最初から最後まで和田さんにフォローして頂き本当に助かりました。そういえば原稿生成システム(原稿をMarkdownで書いてgithubにpushしたらPDFが降ってくる)を構築してくれたのも和田さんでしたね。これが無かったらきっとスムーズに進まなかったでしょう。何から何まで感謝です!
最後に
書籍タイトルに「iPhoneプログラミング」ってありますけど、iPadにも対応してます!あとアプリ内課金に興味があっていろいろ聞きたいという方がいらっしゃいましたら、直近は関西の勉強会でアプリ内課金のお話をする予定ですので、関西圏にお住まいの方はぜひそちらにいらしてください。
【第3回】がりっち勉強会 in 関西
それでは!

Tagged , , ,

iOS 7/In-App Purchase/ローカルレシート検証

これの続きです。
iOS 7 + Auto-renewable + TransactionReceipt
これで有効期限が取れたのは取れたのですが(値も正しかった)、これで良いのかわかりません。素直にOpenSSL使って、ローカルレシート確認にする方がいいのかしら…
2013/11/4 追記:
このやり方はAppleのドキュメントに書いてないからダメっぽい。
OpenSSL使ってローカルレシート認証にするのが正解だと思われる。
引き続き検証中。
元の話は、iOSのアプリ内課金(In-App Purchase)でレシートの確認を行う場合、SKPaymentTransaction#transactionReceiptが、iOS 7からDeprecatedになっており、さてどうしたらよいのやら…ということでした。そしてこれに対する回答は、Appleのドキュメントに”超”概要が書いてありました。
レシート検証 プログラミングガイド

P.5
レシートをローカルで検証する
ローカルでの検証には、PKCS #7署名を読み込んで検証するコードと署名されたペイロードを解析し て検証するコードが必要です。

P.7
iOSで(システムが古いために)appStoreReceiptURLメソッドが使用できない場合は、App Storeを使用してSKPaymentTransactionオブジェクトのtransactionReceiptプロパティを 検証するためにフォールバックすることができます。

ふむふむ…「appStoreReceiptURLメソッドが使用できるのならレシートをローカルで検証しなさい」というように読み取れます。何故なら「フォールバックする」=「SKPaymentTransactionオブジェクトのtransactionReceiptプロパティを使う」=「Deprecated」だからです。
ではレシートをローカルで検証するにはどうするか…ドキュメントを読むと次のようにありました。
・ローカルのレシートは、Appleの証明書に署名されたPKCS #7コンテナである
・PKCS #7を読みほどいていくにはOpenSSLを使えば出来るけど、ヒントはドキュメントに書いておく
・まぁそんな感じで実装は開発者にまかせた、頑張れ
お、おう…頑張って実装を…無理や!と思ったら、ここら辺をやってくれている方がいらっしゃいました。ファンタスティック!次の3つを使っていけば、レシートをローカルで検証することが出来ます。
・x2on / OpenSSL-for-iPhone
https://github.com/x2on/OpenSSL-for-iPhone
・rmaddy / VerifyStoreReceiptiOS
https://github.com/rmaddy/VerifyStoreReceiptiOS
・Apple Root Certification Authoirty
http://www.apple.com/certificateauthority/
以下手順。
==========
1. OpenSSL-for-iPhoneの中に build-libssl.sh があるので、ターミナルから叩いて暫く待てば出来上がりです。これを使ったビルドにarが必要なのですが、自分環境にarがなかったので

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar /Applications/Xcode.app/Contents/Developer/usr/bin/ar

こんな感じでシンボリックを張ったら通りました。
2. 1で作ったOpenSSLのlibrary2つ、VerifyStoreReceiptiOSの.hと.m、AppleのROOTサーバ証明書(Apple Inc. Root Certificateの方)を、レシートを検証するアプリのプロジェクトに突っ込みます。AppleのROOTサーバ証明書だけプロジェクトのルートに配置してください。他は任意の場所でOKです。それからプロジェクトの設定について、OpenSSLのヘッダが読み取れるようにSearchPathを足すのと、OpenSSLのライブラリをStatic Linkするように変更してください。
3. VerifyStoreReceipt.m の以下行をアンコメント、さらに自分のアプリに合わせて変更してください。

// const NSString * global_bundleVersion = @"1.0.2";
// const NSString * global_bundleIdentifier = @"com.example.SampleApp";

4.  レシートの検証ロジックを、VerifyStoreReceipt.mを使ったものに変更してください。

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
BOOL [...]

Tagged ,

iOS 7 + Auto-renewable + TransactionReceipt

iOS 7のIn-App Purchase(アプリ内課金)で、Auto-renewable Product(自動更新購読型)の話です。
Auto-renewableなプロダクトが購入されたとき、それの有効期間を確認するために
paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
からレシート情報を取得しApp Storeへ送ると、次のようなJSONが返ってきます。

{
"latest_receipt" = <latest_receipt_infoのBASE64値>;
"latest_receipt_info" = {
bid = "APPID";
bvrs = "1.0";
"expires_date" = 1383368349000;
[...]

Tagged ,

tumblr. ステッカーをもらいました

tumblr.でこんなWeb Clipしてたりするわけですが、ふとtumblr.さんのステッカーが欲しいなーと思い、入手してみることにしました。以下のようにAirMailで「ステッカーください!」って手紙を出す感じです。
入手方法

国際返信切手券を購入する(\150-)
ステッカーを送り返してもらうための切手になります。郵便局で売ってます。「国際返信切手券ください」と言えばOKです。
日本郵便 – 国際返信切手券
手紙を書く
「tumblr.好きです、ステッカーください!」的なのを英文で書きます。英文レターのマナーはよく知らないのですが、文面はWordで、サインは自筆で書きました。
送信用・返信用の封筒を作る
送信用・返信用の封筒にそれぞれ「送付先」「送り元」の住所・名称を記載します。もちろん、送信用と返信用で書く場所が入れ替わりますのでご注意を。それとAirMailの書き方は適当にググってくださいw tumblr社の住所は、tumblrのaboutページに記載されているものを書きました。
手紙に封をする
送信用の封筒に「国際返信切手券」「手紙」そして「返信用封筒」の3つを入れて封をします。
手紙を送る
郵便局へ行って「AirMail送りたいのですが」と言えばOKです。おそらく\120-で送ることができます。

自分の場合、送ってから3週間ちょっとで返信が届きました。ステッカーは20枚くらい入ってました!

そしてMacBook Airに貼ったらこんな感じです。カッケー!

tumblr.さん、ありがとうございました!

Tagged

Android-Binding Before / After

プログラミング生放送 名古屋 第24回で登壇してきました。
お題は「Android-Binding Before/After」ってことで、Androidネタです。
内容難しい…って言われました、セッションネタ間違えた感(

あのBGMを脳内で再生しながら見てくださいw

Tagged

MacBook AirにmicroSDXC 64GBを装着

これ(SanDisk UHS-I対応 microSDXCカード 64GB SDSDQY-064G-U46A)を

これ(GREEN HOUSE microSD/SDHC/SDXC USBカードリーダ GH-CRMR-MMW)に

こうして

こうしたら

こうなりました。

容量の少ないMacBook AirのSSDを少しでも空けるためにこんなことをしてみました。これに入れているのはiTunesの楽曲データ30GB弱です。楽曲データはファイルI/Oが頻繁になく、また高速ファイルアクセスは不要(SSDに置く必要がなく)、コンパクトに持ち歩きたいという自分のニーズに対し、たどり着いた答えがこれでした。
この手の(USBコネクタ部分にmicroSDカードを内蔵する)コンパクトなカードリーダーでmicroSDXC規格に対応しているのは、2012年8月でGREEN HOUSEのコレだけのようでした。手元のBUFFALOの同種製品は32GB(つまりmicroSDHC)までしか認識できませんでしたので、ここは気をつけないとですね。
ちなみにファイルR/W速度は、すっごく…………遅いですorz カードリーダーがSDXC UHS-I高速転送に非対応かつUSB2.0というのがボトルネックなのでしょう。とはいえiTunesデータの利用に支障ない程度なので、今はとても満足しています。

MacBook Air 11-inch (Mid 2012) を購入

MacBook Air 11′ (Mid 2012)を購入しましたので記念写真をアップ。
買い替え前
・MacBook Pro 17′ (Mid 2009) Core2Duo 2.8GHz / 500GB HDD / 8GB Mem / 1920×1200
買い替え後
・MacBook Air 11′ (Mid 2012) Core i7 2.0GHz (Turbo Boost時3.2GHz) / 256GB SSD / 8GB Mem / 1366×768

届いたところ。外箱はいつもの通りですね。オーダー日が書かれたシールが貼ってあります。発表のあった6/14にポチり、届いたのは6/20でした。

箱から化粧箱を取り出しました。無駄に大きくないサイズです。

化粧箱を開けてご対面です。「このMacBook Airはあなたに出会うために生まれてきました」…なんてTextはありませんでしたが、そういうメッセージは受け取りました!蓋の裏にもクッション材が貼ってあって、丁寧なところが伺えます。

化粧箱の下半分です。MagSafe2アダプタ、電源コードが入っています。

MacBook ProのMagSafeアダプター(上)とMagSafe2アダプター(下)のコネクタ部分。MagSafe2アダプターはコネクタが薄く幅広いです。
箱から取り出したMacBook Air 11′。ふ、ふつくしい…

キーボードはUS配列です。スッキリしていて、ふ、ふつくs(ry

MacBook Air 11′とMacBook Pro 17′を比較。親子亀状態。Airの小ささというかProのデカさがよくわかりますw

横から見るとAirの薄さがよくわかりますね!

これで電車駆動開発が進むぞ!

楽しいアプリ制作の会#13でMVVMをしゃべってきた

たのアプ#13を開催し無事に終了してきました。
今回は「はじめてのMVVM」というセッションをやりました。
・MVVM概要
・MVVMで重要なViewModelの役割
・バインディング
・MVVM Light Toolkit
というポイントを説明してきました。
バインディングの利点は説明だけだと分かりにくいのではないかと思い、擬人化デモ(寸劇)しながら
説明したところ割と評判よかったですw
資料はこちらです。
楽しいアプリ制作の会#13 はじめてのMVVM
View more presentations or Upload your own.

わんくま同盟 大阪勉強会 #47でしゃべってきました

2/25に大阪で開催された「わんくま同盟 大阪勉強会 #47」でセッションしてきました。「HTML5ネタを何かやってよ!」ってお願いをされていたのですが、そこは海のように広いHTML5の世界。50分のセッションでは収拾がつかないと思い、今回もSencha Touchを担いでいきました。資料は以下です。
Sencha TouchでHTML5アプリを作ってみる
View more presentations from Tomonori Ohba.

2ヶ月ぶりのセッションで喋りの感覚が鈍ってました(汗 しゃべる内容の順番が一部前後したりして聞き苦しかったところがあると思います。すみません。。。次はもっと分かりやすく伝えれるように頑張ります。
そういえば、、、お昼休みの直前に急遽LTセッションの依頼があり、LT資料を即席で作って喋りましたb 「楽しいアプリ制作の会」の宣伝です。
わんくま大阪47 LT
View more PowerPoint from Tomonori Ohba

こっちは笑いを取れたので満足ですw