2011年05月09日

アプリ内課金Androidアプリの作り方

このエントリーをはてなブックマークに追加
follow us in feedly





これが実際に作ったアプリ内課金 アプリです。
aha1






基本的には、In-app Billing | Android Developers に書いている通りなのですが、

サンプルコードは
Downloading the Sample Applicationこれでもダウンロードできますし


marketbilling Android Market In-App Billing からでもダウンロードできます。



サンプルファイルは(多分)ここに書いてある変更は必要ないはずです。 すでに、この変更後の内容になっているはずです。 Implementing In-app Billing


しかし、サンプルコードには唯一このようなコードの間違いがあったのですが....?
BillingService.java

// Overrides onStartCommand for people who build on SDK versions > 4.
// Override annotation is commented out as the method does not always exist.
// @Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent == null) {
stopSelfResult(startId);
return ; //←???
}
handleCommand(intent, startId);
return 0; // Service.START_STICKY_COMPATIBILITY
}


ここまでやって実行した場合、
シミュレータと実機で挙動が違います。

<string name="billing_not_supported_message">
実機ではこのメッセージ
Can't make purchases
The Market billing service is not available at this time.
You can continue to use this app but you won't be able to make purchases.


<string name="cannot_connect_message">
シミュレータではこのメッセージになります。
appbilling1
Can't connect to Market
This app cannot connect to Market.
Your version of Market may by out of date.
You can continue to use this app but you won't be able to make purchases.

※シミュレータでは課金のテストはどうやっても出来ないということになっています



Verifying Signatures and Nonces
必ずコードを変更する必要がある場所はこのpublic keyです。

これは、Security.java 中の ArrayList<VerifiedPurchase> verifyPurchase(String signedData, String signature)です。

/**
* Compute your public key (that you got from the Android Market publisher site).
*
* Instead of just storing the entire literal string here embedded in the
* program, construct the key at runtime from pieces or
* use bit manipulation (for example, XOR with some other string) to hide
* the actual key. The key itself is not secret information, but we don't
* want to make it easy for an adversary to replace the public key with one
* of their own and then fake messages from the server.
*
* Generally, encryption keys / passwords should only be kept in memory
* long enough to perform the operation they need to perform.
*/
String base64EncodedPublicKey = "your public key here";
PublicKey key = Security.generatePublicKey(base64EncodedPublicKey);
verified = Security.verify(key, signedData, signature);
if (!verified) {
Log.w(TAG, "signature does not match data.");
return null;
}


実機の方では、アプリに問題がある場合に
アプリケーションDungeons Example が予期せず中止しました
となります。これは、課金システムの方ではない問題がある場合です。


インストール時の警告は
このアプリケーションに許可する権限:
○ネットワーク通信
マーケット請求サービス


you'll need an active Internet connection and the latest version of Android Market installed on your phone.

最後に、これを、Android Marketにアップロードしなければ課金は有効にはなりません。

ところで、
この設計では、アプリケーションは どこから、どこに、どうやって お金を支払わせるのか分からなかったのですが......
AndroidデベロッパーアカウントでGoogle checkoutの販売アカウントを登録して、そこに入金するようです。

appbilling2



Marketへのアップロード時に
You have another application on Market with the same package name (com.yourcompany.....). Go to that other application, and click upgrade.

アンドロイドマーケットで署名済のapkファイルをアップロードできません、どうしてでしょうか?
Google Chromeを使ってアップロードせよということのようです


The upgraded apk's package name (com.example.dungeons) must be the same as the one it is replacing (com.yourcompany.dungeons).

パッケージの名前は変更しなければ登録できないはずです。





自社の課金サービスを作成するには、
appbilling4
この、アプリ内サービスから、
appbilling5
アプリ内サービスを追加の先で
appbilling6

この、アプリ内サービス IDが、課金サービスのIDです。
サンプルプログラム中では、Dungeons.java 中で

private static final CatalogEntry[] CATALOG = new CatalogEntry[] {
new CatalogEntry("itemID", R.string.itemnumber, Managed.UNMANAGED),
このitemIDに、アプリ内サービスIDを文字列で指定します。







「このバージョンのアプリケーションはマーケット請求サービスに対応していません。詳細については、ヘルプセンターをご覧ください。」

In-app Billing(アプリ内課金)が動かない機種?


どうも、課金機能が使えない機種が確かに存在するようなのです。




課金するための条件を調べた結果はこちら


トラックバックURL

トラックバック一覧

1. Android アプリ内課金 ( In-app Billing )の参考サイト  [ Android a‚¢aƒ—aƒa aR c ”cc¶a‰€ a‚¢aƒ3aƒ‰aƒ-a‚¤aƒ‰ aƒŠaƒ“ ]   2011年06月06日 12:00
Android アプリ内課金 ( In-app Billing )の参考サイト Android の アプリ内課金 が発表されてからしばらく経ちますが そろそろ開発手法も確立しておく必要があるかと思って 本腰入れて調べてみることにしました。 まずは全体像の把握から。 ということで、役に立ちそうな

コメントする

名前:
URL:
  情報を記憶: 評価:  顔   星
 
 
 
サイト内検索
にほんブログ村 科学ブログへ
にほんブログ村
adsense
Archives
amazon
blogchart
QRコード
QRコード
Recent Comments