ラベル kindle の投稿を表示しています。 すべての投稿を表示
ラベル kindle の投稿を表示しています。 すべての投稿を表示

2013年5月29日水曜日

Amazon App Store In-App Purchasing API (アプリ内課金) の実装 #2

Amazon App Store In-App Purchasing API (アプリ内課金) の実装 #1 のつづき。
#1にて BasePurchasingObserver を継承したサブクラスまで記載したので、今度は PurchasingManager を使って実際に課金を行う処理について。

Purchasing Manager

  • In-App Purchasing API と情報をやりとりする重要なクラスです。Amazon Clientおよび Amazon Platform との間のアクセスを容易にします。
  • Purchasing Managerを使用するには、 #1で示したBasePurchasingObserverクラスを継承したサブクラスをPurchasing Managerへ登録する必要があります。アプリのActivityの onStart()メソッドで登録を行うのがベターです。

PurchasingManagerには以下の5つのメソッドがあります。
  1. registerObserver(PurchasingObserver purchasingObserver)
    • BasePurchasingObserver クラスを継承したサブクラスを PurchasingManager へ登録します。
    • 通常、Activity の onStart() メソッドにて呼出します。
  2. initiateGetUserIdRequest()
    • Amazon Client に現在ログインしているユーザーのアプリ特有IDの取得リクエストを送信します。
    • 通常、Activity の onStart() メソッドにて呼出しますが、いつでも取得できます。
  3. initiatePurchaseUpdatesRequest(Offset offset)
    • オフセットレシート情報のページ区分)指定されたレシート情報を取得するリクエストを送信します。
    • ここで返されるレシート情報は、Entitled Content(買い切り型コンテンツ)及び Subscription Content(期間購入型コンテンツ)のみで、Consumable Content(消費型コンテンツ)情報は取得できません。
    • デバイス間でユーザー購入情報を同期する処理に使用できます。
  4. initiateItemDataRequest(Set skus)
    • 指定されたSKU一連のアイテムデータを取得するリクエストを送信します。
    • コンテンツタイプ全てのアイテム情報を取得できます。
  5. initiatePurchaseRequest(String sku)
    • 指定されたSKUの購入リクエストを送信します。
      ※購入リクエストを行った後 Amazon Clientによって表示される購入ダイアログで購入ボタンをタップしない限り購入されません。
    • コンテンツタイプ全てのアイテムを購入できます。

PurchasingManagerを使う準備

 各所で記述していますが、PurchasingManagerを使用してアプリ内課金関連処理を行う前に最初にPurchasingManagerに対してコールバックさせる為のObserverを登録する必要があります。
@Override
protected void onStart() {
.
.
.
    // BasePurchasingObserverを継承して作成したサブクラスのインスタンスを取得
    IapObserver iapObserver = new IapObserver (this);

    // PurchasingManagerへObserverを登録する。
    com.amazon.inapp.purchasing.PurchasingManager.registerObserver(iapObserver);
.
.
.
}

アプリ特有IDの取得

 IAP-APIの課金では、Amazon ClientにログインしているユーザーIDに対して、そのアプリで使用する課金用のユーザーIDを使って管理を行います。

処理の手順は...
  1. PurchasingManager.initiateGetUserIdRequest()でユーザーID取得リクエストを行う。
  2. ObserverのonGetUserIdResponse(GetUserIdResponse getUserIdResponse)メソッドへコールバックする。
  3. 非同期処理でレスポンスオブジェクトからリクエストのステータス、ユーザーIDを取得してアプリで永続化する。

以下に、PurchasingManagerのユーザー取得リクエストメソッドと該当するObserverのメソッドを記述します。
Observerのより具体的な処理サンプルは #1のObserverサンプルコードを参照してください。
@Override
protected void onStart() {
.
.
.
// ユーザーID取得リクエストを行う
com.amazon.inapp.purchasing.PurchasingManager.initiateGetUserIdRequest();
.
.
.
}

@Override
public void onGetUserIdResponse(GetUserIdResponse getUserIdResponse) {
    // 非同期処理でレスポンスオブジェクトを検証
    new GetUserIdAsyncTask().execute(getUserIdResponse);
}

private class GetUserIdAsyncTask extends AsyncTask
{
    // onGetUserIdResponseで取得したGetUserIdResponseを格納
    GetUserIdResponse getUserIdResponse = params[0];
    
    if (getUserIdResponse.getUserIdRequestStatus() == GetUserIdRequestStatus.SUCCESSFUL) {
        // リクエスト成功。レスポンスからユーザーID取得
        Log.d(TAG, "UserID:" + getUserIdResponse.getUserId());
        // 永続化処理
        .
        .
        .
    } else {
        // リクエスト失敗
        .
        .
        .
    }
}

アイテムの購入処理

 やっと本題のアプリ内課金の購入処理についてです。実際の購入よる課金等の処理は全てIAP-APIが行ってくれるので、アプリ側で実装する内容は、購入情報(レシート)を検証して、その課金アイテムやコンテンツ・機能を使えるようにしてあげるというというものです。
 ストアに登録する商用アプリの場合は上記の他にも、購入権利をローカルに保持して不正が無い様定期的に権限を確認させる機能やマルチユーザー対応、消費型アイテム・コンテンツの管理、デバイス間同期処理を呼ぶ...などなど様々な前後処理が必要になります。しかし、ここではシンプルに購入 → 購入成功ダイアログ表示 までの処理を説明していきます。

※尚、Amazon Developer Portalでの課金アイテムの作り方や、SDKTesterの使い方・登録するJsonファイルなどについては触れません。この辺は別の記事に書いていこうと思います。

処理の手順は...
  1. PurchasingManager.initiatePurchaseRequest("購入アイテムのSKU")でアイテム購入リクエストを行う。
  2. Amazon Clientにて購入ダイアログが表示され、ユーザーが購入ボタンをタップするとIAP-APIで課金処理が行われる。
  3. ObserverのonPurchaseResponse(PurchaseResponse purchaseResponse)メソッドへコールバックする。
  4. 非同期処理でレスポンスオブジェクトからリクエストのステータス、コンテンツタイプなどのレシート情報を検証して課金コンテンツ・機能を利用可能にする。

以下に、PurchasingManagerの購入リクエストメソッドと該当するObserverのメソッドを記述します。
Observerのより具体的な処理サンプルは #1のObserverサンプルコードを参照してください。
// アイテムの購入リクエストを送信する。このリクエスト時にはリクエストIDが返り、
// コールバック後のレスポンスオブジェクトに含まれるリクエストIDと突き合わすことにより
// どのリクエストのレスポンスなのか判断する事ができる。
String requestId = com.amazon.inapp.purchasing.PurchasingManager.initiatePurchaseRequest("購入アイテムのSKU");

@Override
public void onPurchaseResponse(PurchaseResponse purchaseResponse) {
    new PurchaseAsyncTask().execute(purchaseResponse);
}

private class PurchaseAsyncTask extends AsyncTask {
    @Override
    protected Boolean doInBackground(PurchaseResponse... params) {
        // レシート検証処理
        .
        .
        .
    }
}

 非同期処理とUIスレッドの同期については、アプリによって色々な方法があると思いますので細かく触れませんが、私はCountDownLatchで同期させたりしてました。

上記に示した通り、IAP-APIを使うのはかなり簡単です。
PlayStoreの課金処理 (IAB-API v2とか特に)を実装した人ならIAP-APIの方が楽だと思います。

2013年5月25日土曜日

Amazon AppStore アプリ内課金の実装--準備

はじめる前に

 In-App Purchasing API は、Amazon Mobile App SDKパッケージの一部として利用可能です。 これは、Androidアプリケーションプロジェクトに含めることができるJARライブラリとして提供されています。

 In-App PurchasingのJARライブラリは任意のIDEで利用可能ですが、ここではEclipseを使用して説明しています。 この作業を行う前に、Android開発環境が構築されている必要があります。また、この説明ではIn-App Purchasingを実装する対象となるAndroidアプリケーションプロジェクトが作成されていることを想定しています。作成されていない場合は作成してから作業を行ってください。

App-SDKをダウンロードして展開する

  1. [Apps-SDK.zip] ファイルを Amazon mobile app distribution Portal よりダウンロードしてください。 (https://developer.amazon.com/sdk/download/in-app-purchasing.html)
  2. ダウンロードした [Apps-SDK.zip] ファイルを解凍し、わりやすい場所へ置いてください。
    (※このディレクトリはプロジェクトから参照するようにするため後々移動しなくてよい場所へ配置してください。)

In-App Purchasing JARライブラリをクラスパスに追加する

  1. 追加するプロジェクトのルートフォルダを選択し、コンテキストメニューから [プロパティ] を選択します。
  2. プロパティウィンドウの左ツリーより、[Javaのビルドパス]を選択。
  3. 上部の[ライブラリ] タブをクリック。
  4. 右側の [外部 JAR 追加] ボタンをクリック。
  5. "JAR の選択"ダイアログで、/InAppPurchasing/lib/in-app-purchasing-1.0.3.jarを選択し [開く] ボタンをクリック。
  6. ビルドパスに "in-app-purchasing-1.0.3.jar" が追加されたことを確認して [OK] ボタンでプロパティウィンドウを閉じます。

In-App Purchasing APIリファレンスを追加する

  1. 追加するプロジェクトのルートフォルダを選択し、コンテキストメニューから [プロパティ] を選択します。
  2. プロパティウィンドウの左ツリーより、[Javaのビルドパス]を選択。
  3. 上部の[ライブラリ] タブをクリック。
  4. 先の手順で追加した、"in-app-purchasing-1.0.3.jar" の左側▲をクリックして詳細を表示させる。
  5. [Javadoc ロケーション: (なし)]をダブルクリックまたは、選択して右側の[編集]ボタンをクリック。
  6. "’in-app-purchasing-1.0.3.jar' の Javadoc" ウィンドウで、 Javadoc URLラジオボタンを選択し、Javadoc ロケーション・パスに "/InAppPurchasing/documentation/API-Reference" を指定する。
  7. [in-app-purchasing-1.0.3.jar] の Javadoc ロケーションが変更されたことを確認して、[プロパティ]ウィンドウを [OK]ボタンで閉じる。
これでプロジェクト内でアプリ内課金関連のパッケージのリファレンスがEclipse上で直接見れるようになります。

2013年5月24日金曜日

Amazon Kindle Fire アプリケーション開発環境構築-Kindle Fire SDK Add-on インストール

Kindle Fire SDK Add-on インストール手順

公式ガイドはこちら... https://developer.amazon.com/sdk/fire/setup.html

はじめに

 Kindle用モバイルアプリケーションを作成するためには、Androidアプリケーション開発環境が必要です。 以下の必要なソフトウェアをインストールし、Android開発環境を構築してください。
  • Java Development Kit version 6 (JDK6)
  • Android SDK
  • Eclipse (Java)
  • Eclipse用のAndroid Developer Tools (ADT)
 ※この記事ではAndroid開発環境構築については詳しく触れません。

 新しいKindle FireとKindle Fire HD Tabletのアプリケーションを開発するために、Android SDK 4.0.3 (API 15)をインストールする必要があります。また、Kindle Fire (第1世代)の開発には、Android SDK 2.3.3 (API 10)をインストールする必要があります。

Kindle Fire SDK Add-on サイトの登録

  1. Android SDK Managerを起動する.
    • ADTインストール済みのEclipseから起動する場合
      メニューの [ウィンドウ] -> [Android SDK マネージャー]を選択する。
      (PleadesでEclipseを日本語化している前提です。)
    • コマンドを実行して起動する場合
      <Android SDK インストールディレクトリ>/tools/android を実行する。
  2. Android SDK Managerのメニューから
    [Tools] -> [Manage Add-on Sites...]を選択する。
  3. Android SDK Manager - Add-on Sitesウィンドウが開いたら、[User Defined Sites]タグを選択し、右側の[New...]ボタンを押す。Add-on Site URL入力ダイアログが表示されるので以下のURLを入力し [OK]ボタンを押す。
    http://kindle-sdk.s3.amazonaws.com/addon.xml
    
  4. Add-on Siteを登録したら、Android SDK Manager - Add-on Sitesウィンドウを [Close]ボタンで閉じる。 閉じると同時にAndroid SDK Managerの表示が更新される。
Kindle Fire SDK Add-on のインストール

  1. 以下のパッケージの最新リビジョンをインストールします。パッケージ名の横にあるチェックボックスにチェックをつけてインストール対象に含めてください。
    • Tools
      • Android SDK Tools
      • Android SDK Platform-tools
    • Android 4.0.3 (API 15)
      • SDK Platform
      • ARM EABI v7a System Image
      • Intel x86 Atom System Image
      • Kindle Fire (2nd Generation)
      • Kindle Fire HD 7"
      • Kindle Fire HD 8.9"
    • Android 2.3.3 (API 10)
      • SDK Platform
      • Kindle Fire
    • Extras
      • Kindle Fire Device Definitions
      • Kindle Fire USB Driver(OSXの場合は不要)
      • Android Support Library
      • Intel x86 Emulator Accelerator (HAXM)
  2. パッケージの選択が完了したら、Android SDK Managerの右下にある
    [Install n packages...] ボタンを押してインストールを開始してください。
    ("n" は選択したパッケージ数です。)
  3. Choose Packages to Installダイアログが表示されます。
    インストールするすべてのパッケージのライセンスを確認し、AcceptまたはAccept Licenseラジオボタンを選択して同意してください。インストールするすべてのパッケージのライセンスに同意したら [Install]ボタンを押してインストールを実行します。
  4. インストールには時間がかかる場合があります。インストール完了後、Eclipseを再起動すれば作業完了です。お疲れ様でした!