Skip to content

{ Tag Archives } iOS

「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 関西
それでは!

Also 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 [...]

Also 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;
[...]

Also tagged

すまべん@関西 #16でしゃべってきたよ

スマートフォン勉強会@関西 #16でしゃべってきました。お題は「マルチタッチ実装比較 iOS/Android/WindowsPhone 7」です。
思い返せば1週間前、別の勉強会の懇親会でスマートフォン勉強会関西代表の伊勢さんと飲んでたのですが

あ…ありのまま今起こった事を話すぜ!
おれは伊勢さんと飲んでいたと思ったら いつのまにか登壇していた!
はい。冗談はさておき、伊勢さん、登壇の機会ありがとうござました!
資料は以下です。
「マルチタッチ実装比較 iOS/Android/WindowsPhone 7」

Also tagged ,