
Habréでのアプリ内購入をサポートするアプリケーションの作成がどのように難しいかについては既に説明しましたが( こことここ )、そのようなシンプルな機能にはコードが多すぎます。
PayPalの支払いサポートでさえも実装がはるかに簡単です。
しかし、Robot Media SLとオープンソースのAndroid Billing Libraryのおかげで、私たちの生活は簡素化されています。 はるかに単純化されました。
有料の機能があるRemove Adsがあるアプリケーションがどのように見えるかの例を見てみましょう。
まず、支払い関数が使用されるアクティビティはAbstractBillingActivityを拡張する必要があります 。 私の場合、ボタンはSettingsに追加されたため、このクラス自体がActivityを拡張せず、 PreferenceActivityを拡張するように、このクラスをわずかに修正する必要がありました。
コード自体は次のとおりです。
public class Preferences extends AbstractBillingActivity { public static final String ANDROID_MARKET_ITEM = "my_managed_item_id"; private boolean billingSupported = false; @Override protected void onCreate(Bundle savedInstanceState) { ... Preference buyPref = (Preference) findPreference("pref_billing_buy"); buyPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { // public boolean onPreferenceClick(Preference preference) { // if (checkBillingSupported() != BillingStatus.SUPPORTED) { // , showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID); } else { // Boolean purchased = BillingController.isPurchased(getApplicationContext(), ANDROID_MARKET_ITEM); if (!purchased) { // ( ? // ?), restoreTransactions(); // ( ) - // - restoreTransactions, // purchased = BillingController.isPurchased(getApplicationContext(), ANDROID_MARKET_ITEM); if (!purchased) { // , requestPurchase(ANDROID_MARKET_ITEM); } } } return true; } }); @Override public void onBillingChecked(boolean supported) { billingSupported = supported; } @Override public void onPurchaseCancelled(String itemId) { Log.i(TAG, "Transaction has been cancelled: "+itemId); } // , UI @Override public void onPurchaseExecuted(String itemId) { Log.i(TAG, "User bought ad-free version: "+itemId); CheckBoxPreference buyPref = (CheckBoxPreference) findPreference("pref_billing_buy"); buyPref.setEnabled(false); } @Override public void onPurchaseRefunded(String itemId) { Log.i(TAG, "Transaction has been refunded: "+itemId); } // , @Override public byte[] getObfuscationSalt() { return new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; } // @Override public String getPublicKey() { return "my_key_is_here"; }
ただ? とても簡単です。
念のために、広告を適切に削除するためにコードを公開し(私の場合はAdMob)、広告が非表示になるだけでなく、ダウンロードされないようにします。
Boolean purchased = BillingController.isPurchased(getApplicationContext(), Preferences.ANDROID_MARKET_ITEM); if (purchased) { LinearLayout adContainer = (LinearLayout) findViewById(R.id.bridges_list); View admobAds = (View) findViewById(R.id.adView); adContainer.removeView(admobAds); }
著者は、積極的にライブラリを開発し、要望に耳を傾け 、最近、ライブラリの使用例とともにアプリケーションのソースコードを公開しました。