Помогите с платным отключением рекламы в приложении
Помогите с платным отключением рекламы в приложении!
Есть класс в котором лежит сама реклама:
public class Commercial extends Activity {
public Commercial(Activity activity) {}
public void ad() {
AdBuddiz.setPublisherKey("");
AdBuddiz.cacheAds(this); // this = current Activity
AdBuddiz.showAd(this);
}
и есть фрагмент в котором я все это дело объявляю:
// id вашей покупки из админки в Google Play
static final String SKU_ADS_DISABLE = "com.ads.disable";
// public key из админки Google Play
public static final String BASE64_PUBLIC_KEY = "";
public final static String TAG = SettingsFragment.class.getSimpleName();
private static final String TAG2 = "activities";
static final int RC_REQUEST = 10001;
IabHelper mHelper;
private Context context;
Commercial ads;
public static SettingsFragment newInstance() {
return new SettingsFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
view.setBackgroundColor(getResources().getColor(R.color.divider));
return view;
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
// грузим настройки
PreferencesHelper.loadSettings(getActivity());
Preference button2 = (Preference) findPreference("false_commercial");
button2.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0) {
if (!PreferencesHelper.isAdsDisabled())
buy();
return true;
}
});
// инициализация билинга
billingInit();
// если отключили рекламу, то не будем показывать
ads.show(!PreferencesHelper.isAdsDisabled());
}
private void buy() {
if (!PreferencesHelper.isAdsDisabled()) {
/*
* для безопасности сгенерьте payload для верификации. В данном
* примере просто пустая строка юзается. Но в реальном приложение
* подходить к этому шагу с умом.
*/
String payload = "";
mHelper.launchPurchaseFlow(getActivity(), SKU_ADS_DISABLE, RC_REQUEST,
mPurchaseFinishedListener, payload);
}
}
private void billingInit() {
mHelper = new IabHelper(getActivity(), BASE64_PUBLIC_KEY);
// включаем дебагинг (в релизной версии ОБЯЗАТЕЛЬНО выставьте в false)
mHelper.enableDebugLogging(true);
// инициализируем; запрос асинхронен
// будет вызван, когда инициализация завершится
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
return;
}
// чекаем уже купленное
mHelper.queryInventoryAsync(mGotInventoryListener);
}
});
}
// Слушатель для востановителя покупок.
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
private static final String TAG = "QueryInventoryFinishedListener";
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
LOG.d(TAG, "Query inventory finished.");
if (result.isFailure()) {
LOG.d(TAG, "Failed to query inventory: " + result);
return;
}
LOG.d(TAG, "Query inventory was successful.");
/*
* Проверяются покупки. Обратите внимание, что надо проверить каждую
* покупку, чтобы убедиться, что всё норм! см.
* verifyDeveloperPayload().
*/
Purchase purchase = inventory.getPurchase(SKU_ADS_DISABLE);
PreferencesHelper.savePurchase(context,
PreferencesHelper.Purchase.DISABLE_ADS, purchase != null
&& verifyDeveloperPayload(purchase));
ads.show(!PreferencesHelper.isAdsDisabled());
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Pass on the activity result to the helper for handling
if (!mHelper.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(TAG, "onActivityResult handled by IABUtil.");
}
}
/** Verifies the developer payload of a purchase. */
boolean verifyDeveloperPayload(Purchase p) {
String payload = p.getDeveloperPayload();
/*
* TODO: здесь необходимо свою верификацию реализовать Хорошо бы ещё с
* использованием собственного стороннего сервера.
*/
return true;
}
// Прокает, когда покупка завершена
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
LOG.d(TAG, "Purchase finished: " + result + ", purchase: "
+ purchase);
if (result.isFailure()) {
return;
}
if (!verifyDeveloperPayload(purchase)) {
return;
}
LOG.d(TAG, "Purchase successful.");
if (purchase.getSku().equals(SKU_ADS_DISABLE)) {
LOG.d(TAG, "Purchase for disabling ads done. Congratulating user.");
Toast.makeText(getActivity(), "Purchase for disabling ads done.", Toast.LENGTH_SHORT);
// сохраняем в настройках, что отключили рекламу
PreferencesHelper.savePurchase(context, PreferencesHelper.Purchase.DISABLE_ADS, true);
// отключаем рекламу
ads.show(!PreferencesHelper.isAdsDisabled());
}
}
};
@Override
public void onDestroy() {
super.onDestroy();
if (ads != null)
ads.onDestroy();
if (mHelper != null)
mHelper.dispose();
mHelper = null;
}
@Override
public void onResume() {
super.onResume();
if (ads != null)
ads.onResume();
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onStart() {
super.onStart();
if (ads != null)
ads.onStart();
}
@Override
public void onStop() {
super.onStop();
if (ads != null)
ads.onStop();
}
}
Хочу чтобы при нажатии но кнопку вылетал диалог с оплатой и когда отплатил, то больше не вылетал и реклама исчезала из приложения!
Вопрос вот в чем! как мне объявить об этой рекламе в коде(фрагменте)? никак не могу ее вытащить из активити...
// если отключили рекламу, то не будем показывать ads.show(!PreferencesHelper.isAdsDisabled());
Источник: Stack Overflow на русском