アプリ内課金には、スポット課金(一度きりの購入)と定期購読(繰り返し自動課金)を使うことができ、スポット課金を利用するとアプリのライセンス購入を表現することができます。
最初は、無料でダウンロードしてもらって使ってみてもらい、気に入ったらライセンスを購入してもらって、加えていた制限(例えば利用期限だったり、機能制限だったり、広告非表示だったり、色々)を解除することが可能というわけです。
このアプリ内課金を実装するための手順は次の記事が参考になります。
Androidのアプリ内課金IABv2のサービス終了と新しいIABv3への移行方法 - Qiita
基本的には、挙げた記事の通り、環境を作って、Googleが提供しているサンプルを取り込んでゴチャゴチャやればOKなのですが、今後はシンプルにやりたいと思いましたので(=今回は初めててで結構苦戦しました)、ライセンス管理を行うユーティリティクラスをGoogleのサンプルをベースに作りましたのでGitHubで公開しておきます。ライセンスはMITです。
https://github.com/shinchit/LicenseManager
使い方は、次の通りです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
} |
onActivityResultメソッドでは、特に購入処理の実行結果によってなんらかの処理を行う必要がなければ、シンプルにスーパークラスのonActivityResultに処理を転送すればOKです。
あと、実装以外にもライセンス購入の組み込みには色々と落とし穴もあるので、次の記事も必読です。
アプリ内課金の実機テストのワナ - GADGET FACTORY 雑記帳
0 件のコメント:
コメントを投稿