【问题标题】:Why doesn't my in app billing with remove ads feature work?为什么我的应用内计费与删除广告功能不起作用?
【发布时间】:2015-08-09 15:45:51
【问题描述】:

我正在尝试制作一个在用户购买时禁用广告的应用。但是,广告甚至不会在应用当前启动时显示。

如果我把它放在onCreate 方法中,广告只会在用户下次启动应用程序时加载。 (不过,当用户点击移除广告按钮时,广告就会消失。)

mAdView = (AdView) findViewById(R.id.adView); adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest);

这是我的MainActivity.class

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
IabHelper mHelper;
AdView mAdView;
MenuItem menuItem2;
AdRequest adRequest;
NavigationView nvDrawer;
DrawerLayout mDrawer;
RelativeLayout myView;
RecyclerView recyclerView;
AppBarLayout secondview;
SharedPreferences prefs;
SharedPreferences.Editor editor;
IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener;
CoordinatorLayout container;

private ActionBarDrawerToggle drawerToggle;
public static final String TAG =
        "iboche.time.google.com.ibche.inappbilling";
static final String ITEM_SKU = "remove_ads";
final String mIsPremium = "purchased";

    @SuppressWarnings("ConstantConditions")
@Override
protected void onCreate(Bundle savedInstanceState) {
    String base64EncodedPublicKey =
            "MY PUBLIC KEY";

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
    mHelper = new IabHelper(this, base64EncodedPublicKey);
    menuItem2 = (MenuItem) findViewById(R.id.nav_second_fragment);
    nvDrawer = (NavigationView) findViewById(R.id.nvView);
    adscontainer = (RelativeLayout) findViewById(R.id.container2);
    mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    queryPurchasedItems();

    if(prefs.getBoolean(mIsPremium, false)){
    Toast.makeText(MainActivity.this,"no premium",Toast.LENGTH_LONG).show();
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
    }
    else if(prefs.getBoolean(mIsPremium,true)) {
    mAdView.setVisibility(View.GONE);
    Toast.makeText(MainActivity.this,"premium",Toast.LENGTH_LONG).show();
    }
    setupDrawerContent(nvDrawer);
    drawerToggle = setupDrawerToggle();
    mDrawer.setDrawerListener(drawerToggle);
    mHelper.startSetup(new
                               IabHelper.OnIabSetupFinishedListener() {
                                   public void onIabSetupFinished(IabResult result) {
                                       if (!result.isSuccess()) {

                                           mHelper.queryInventoryAsync(mReceivedInventoryListener);
                                           Log.d(TAG, "Failed:");
                                       } else if (result.isSuccess()){

                                           Log.d(TAG, "OK");
                                       }
                                   }
                               });

}

IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener
        = new IabHelper.QueryInventoryFinishedListener() {
    public void onQueryInventoryFinished(IabResult result,
                                         Inventory inventory) {

        if (result.isFailure()) {
            // Handle failure


        }
        else {


            mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
                    mConsumeFinishedListener);
                              editor = prefs.edit();
                    editor.putString("purchased", mIsPremium);
                    editor.putBoolean(mIsPremium, true);
                    editor.commit();

                    Toast.makeText(MainActivity.this,"premium", Toast.LENGTH_LONG).show();

        }



    }
};
public void consumeItem() {
    mHelper.queryInventoryAsync(mReceivedInventoryListener);

}


@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);

    // Sync the toggle state after onRestoreInstanceState has occurred.
    drawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggles
    drawerToggle.onConfigurationChanged(newConfig);
}
private ActionBarDrawerToggle setupDrawerToggle() {
    return new ActionBarDrawerToggle(this, mDrawer, toolbar, R.string.drawer_open,  R.string.drawer_close);
}
private void setupDrawerContent(NavigationView navigationView) {
    navigationView.setNavigationItemSelectedListener(
            new NavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(MenuItem menuItem) {
                    selectDrawerItem(menuItem);
                    selectDrawerItem1(menuItem);
                    return true;
                }
            });}

public void selectDrawerItem(MenuItem menuItem) {

    mHelper.launchPurchaseFlow(this, ITEM_SKU, 0,
            mPurchaseFinishedListener, "GENERIC TOKEN");

    mDrawer.closeDrawers();

    //if (mIsPremium){

    menuItem.setTitle("Purchased");
    mAdView.setVisibility(View.GONE);
}
public void selectDrawerItem1(MenuItem menuItem) {

    mDrawer.closeDrawers();
}






@Override
protected void onActivityResult(int requestCode, int resultCode,
                                Intent data)
{
    if (!mHelper.handleActivityResult(requestCode,
            resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);

    }
}
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
        = new IabHelper.OnIabPurchaseFinishedListener() {

    public void onIabPurchaseFinished(IabResult result,
                                      Purchase purchase)
    {
        if (result.isFailure()) {

            if (result.getResponse() == IabHelper.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED) {



                return;
            }
            // Handle error

        }
        else if(purchase.getSku().equals(ITEM_SKU)) {

            editor = prefs.edit();
            editor.putString("purchased", mIsPremium);
            editor.putBoolean(mIsPremium, true);
            editor.commit();
            consumeItem();
        }
    }


};

IabHelper.OnConsumeFinishedListener mConsumeFinishedListener =
        new IabHelper.OnConsumeFinishedListener() {
            public void onConsumeFinished(Purchase purchase,
                                          IabResult result) {

                if (result.isSuccess()) {


                } else {
                    // handle error

                }
            }
        };
    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    // The action bar home/up action should open or close the drawer.
    if (drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    switch (item.getItemId()) {
        case android.R.id.home:
            mDrawer.openDrawer(GravityCompat.START);
            return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (mHelper != null) mHelper.dispose();

    mHelper = null;

        }

}

【问题讨论】:

    标签: java android in-app-purchase admob in-app-billing


    【解决方案1】:

    我要做的是为 iap 事件提供一个共享首选项以删除添加,然后在用户执行 iap 时更改它....然后在 onCreate 上检查它是否禁用广告并相应地设置 @ 987654322@ 用于根据共享首选项在布局中添加容器。

    尝试只调用一次 SharedPreference,然后使用编辑器提交数据:

                SharedPreference SP;
                SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
                editor = SP.edit();
    
                //...
                    editor.putString("abc", udata);
                    editor.commit();
                //...
                    editor.putStringSet("si",ssetdata)
                    editor.commit();
    

    这是用于 onCreate

        if(prefs.getBoolean("purchased", false)) {
    mAdView.setVisibility(View.GONE); 
    }
    else if(prefs.getBoolean("purchased", true)){
     mAdView.loadAd(adRequest);
    ...}
    

    阅读更多关于共享首选项here

    【讨论】:

    • 我会尽快查看该链接,但onQueryInventoryFinished 不检查该项目是否已购买?那为什么像我没用的那样把mAdView.loadAd(adRequest)放在这个方法里不行呢?
    • 为什么每次都要检查iap?只需使用共享首选项存储一次值就可以了..
    • 我刚刚实现了它,但它仍然不起作用。再次启动应用时广告仍会出现,按下“购买”按钮时广告会消失。
    • 等待我正在调查它..你在检查 iap onCreate 吗?您是否提交了您所做的共享首选项更改?
    • 这是我的 onCreate : AdRequest adRequest = new AdRequest.Builder().build(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); if(prefs.getBoolean("purchased", false)) mAdView.setVisibility(View.GONE); if(prefs.getBoolean("purchased", true)) mAdView.loadAd(adRequest); LinearLayoutManager linearLM = new LinearLayoutManager(this);
    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多