HOME > CONIT Labs.

CONIT Labs.

Apple Hosted in-App-Purchaseについて


こんにちは、いちかわです。

 

前回のエントリで少し書いたサンプルをgithubに公開しました。

 

アプリ内課金サンプル

注)

最低限の目的を達成するだけのものなので、レシートの検証とか、大事なことが色々抜けています。

あくまで参考程度として見てもらえればと思います。

 

サンプルアプリは、

  1. プロダクトの一覧
  2. プロダクトの詳細

の2つの画面で構成されています。

 

1.プロダクト一覧

iTunes Connectに登録したプロダクトIDの一覧を取得するようなAPIが見当たらなかったので、プロダクトの情報をplistに登録してその内容を表示することで画面を作成しています。

随時プロダクトが追加されるようなアプリの場合、プロダクト一覧をサーバから配信するようにしないと、コンテンツが増えるたびにアプリのアップデートが必要になりそうですね。

 

2.プロダクト詳細

一覧で選択されたプロダクトの情報を、AppStoreから取得して表示します。

「購入」ボタンをタプすると、購入処理が行われ、プロダクトをダウンロードして、画面の下部に表示します。

 

購入〜ダウンロードの流れ

1.購入の実行

「購入」ボタンをタップすると、SKPaymentQueueのaddPaymentで購入の手続きが開始されます。

 

2.購入トランザクションを取得する

 

transactionStateが SKPaymentTransactionStatePurchased(購入成功)となったら、トランザクションのdownloadプロパティにダウンロード可能なプロダクトの情報が含まれているので、13行目のSKPaymentQueueのstartDownloadsメソッドに情報を渡してダウンロードを実行します。

3.ダウンロードの状況を取得

ダウンロード中はdownloadStateが SKDownloadStateActiveの状態ですので、進捗状況などをSKDownloadのprogressやtimeRemainingプロパティーから取得して、呼び出し元のデリゲートに渡してあげれば、プログレスバーの表示に使えます。

 

4.ダウンロードしたコンテンツを取得

ダウンロードが完了すると、downloadStateはSKDownloadStateFinishedとなり、SKDownloadのcontentURLにダウンロードされたプロダクトのパスが取得できます。

この時プロダクトがダウンロードされる先は「/Library/Caches」になります。

Cache直下に作成される上記の0E6966〜の部分は同じコンテンツをダウンロードしても毎回変わるようです。

また、ディレクトリ名が~.zipになっていて、最初はzip形式なのかと騙されてしまった。。実際は展開済みとなっています。

 

ちなみに、プロダクト用のプロジェクトを作成した際に、ファイルの格納先を変えていたのですが、ダウンロードされたパッケージはすべてContentsの中に含まれるようです。

(それらしいドキュメントは見当たらないですが、試してみた限りでは)

 

こんな感じで、Appleに預けたコンテンツは取得できます。

すごく簡単です。。。

コメントを残す

コニット開発室

CONIT Official Tweet

CONIT Facebook FanPage

CONIT BLOG

株式会社コニット

SamuraiSmartphoneServices

Buy and take only medicines from online pharmacy ,]}$ drugs online has affordable prices. Brand name drugs Canadian pharmacy [*}: compare drug prices Canada delivering medicines at your door. Free online consultation at https://canada-pharmacy-store.com <;) order cialis highest value and quality. Is it legal to mail prescription drugs? Yes, Canadian drugs [.($ order viagra . After ordering you will be contacted by our managers and agree on the delivery details.