2015年5月24日日曜日

[Android] In-app Billing v3を使ってライセンス購入を実装する

Androidアプリでアプリ内課金を行う場合、Google Play In-app Billingを使ってGoogle Playに決済を任せる設計が一般的&楽です。

アプリ内課金には、スポット課金(一度きりの購入)と定期購読(繰り返し自動課金)を使うことができ、スポット課金を利用するとアプリのライセンス購入を表現することができます。

最初は、無料でダウンロードしてもらって使ってみてもらい、気に入ったらライセンスを購入してもらって、加えていた制限(例えば利用期限だったり、機能制限だったり、広告非表示だったり、色々)を解除することが可能というわけです。

このアプリ内課金を実装するための手順は次の記事が参考になります。

Androidのアプリ内課金IABv2のサービス終了と新しいIABv3への移行方法 - Qiita

基本的には、挙げた記事の通り、環境を作って、Googleが提供しているサンプルを取り込んでゴチャゴチャやればOKなのですが、今後はシンプルにやりたいと思いましたので(=今回は初めててで結構苦戦しました)、ライセンス管理を行うユーティリティクラスをGoogleのサンプルをベースに作りましたのでGitHubで公開しておきます。ライセンスはMITです。

https://github.com/shinchit/LicenseManager

使い方は、次の通りです。


public class SomeActivity extends Activity {
private LicenseManager licenseManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// :
// 略
// :
licenseManager = new LicenseManager(this);
}
@Override
protected void onResume() {
super.onResume();
if (licenseManager.isLicensePurchased()) {
// ライセンス購入済みの時の処理を書く
} else {
// ライセンス未購入の時の処理を書く
}
}
// licenseManaegrをdestroyしてGoogle Play Inn-appサービスとの接続をアンバインド(連結解除) 必須
@Override
public void onDestroy() {
super.onDestroy();
licenseManager.destroy();
}
// ライセンスの購入処理(例としてアプリ内のライセンス購入ボタンを押下した際に以下のメソッドが呼ぶケースを考える)
public void purchaseLicense(View v) {
licenseManager.purchaseLicense(v);
}
// ライセンス購入処理の後処理として走るメソッド
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode != 0) {
// ライセンス購入達成
Log.d("LicensePurchaseEE", "onActivityResult(" + requestCode + "," + resultCode + "," + data);
if (licenseManager.getIabHelper() == null) return;
// Pass on the activity result to the helper for handling
if (!licenseManager.getIabHelper().handleActivityResult(requestCode, resultCode, data)) {
// not handled, so handle it ourselves (here's where you'd
// perform any handling of activity results not related to in-app
// billing...
super.onActivityResult(requestCode, resultCode, data);
} else {
Log.d("LicensePurchaseEE", "onActivityResult handled by IABUtil.");
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
}
view raw gistfile1.java hosted with ❤ by GitHub

onActivityResultメソッドでは、特に購入処理の実行結果によってなんらかの処理を行う必要がなければ、シンプルにスーパークラスのonActivityResultに処理を転送すればOKです。

あと、実装以外にもライセンス購入の組み込みには色々と落とし穴もあるので、次の記事も必読です。

アプリ内課金の実機テストのワナ - GADGET FACTORY 雑記帳


0 件のコメント:

コメントを投稿