如何使用AndroidBillingLibrary停用广告?

时间:2012-09-07 19:20:27

标签: android in-app-purchase admob

我正在使用AndroidBillingLibrary来实施应用内结算。购买项目应禁用所有活动中的广告。但是,当我测试我的应用程序(第一项是“android.test.purchase”,然后真实项目)发生以下情况:购买广告被禁用后,但重新启动后,应用程序广告再次显示。

项目发布在开发人员的控制台中,当我购买带有测试帐户的项目时,Google Play说一切都好。

“购买”按钮位于我的应用程序的设置中。以下是代码的一部分:

public class PreferencesActivity extends SherlockPreferenceActivity { 
    public final static String PUBLIC_KEY = "my public key";
    public final static String ANDROID_ADS_ITEM = "ads.buy"; 
    private AbstractBillingObserver billingObserver;

    ...

    @Override protected void onDestroy(){   
        BillingController.unregisterObserver(billingObserver);  
        super.onDestroy(); 
    }

    private void adsDisable(){  
        final Preference adsDisable = (Preference) findPreference("disableAds");
        billingObserver = new AbstractBillingObserver(this){    
            public void onRequestPurchaseResponse(String itemId, ResponseCode response){ 
            }

            public void onPurchaseStateChanged(String itemId, PurchaseState state){
            }

            public void onBillingChecked(boolean supported){
                if(!supported)
                    adsDisable.setEnabled(false);
                else if(!billingObserver.isTransactionsRestored())
                    BillingController.restoreTransactions(PreferencesActivity.this); 
            }

            public void onSubscriptionChecked(boolean supported) {
                // TODO Auto-generated method stub
            }       
        };

        BillingController.setConfiguration(new IConfiguration(){

            public String getPublicKey(){
                return PUBLIC_KEY;          
            }

            public byte[] getObfuscationSalt(){
                return new byte[]{ 41, -90, -116, -41, 66, -53, 122, -110, -127, -96, -88, 77, 127, 115, 1, 73, 57, 110, 48, -116 }; 
            }

        }); 

        BillingController.registerObserver(billingObserver);        
        BillingController.checkBillingSupported(this);

        adsDisable.setOnPreferenceClickListener(new OnPreferenceClickListener(){ 
            public boolean onPreferenceClick(Preference preference){
                BillingController.requestPurchase(PreferencesActivity.this, ANDROID_ADS_ITEM, true, null);
                return false;
            }
        });

        boolean purchased = BillingController.isPurchased(this, ANDROID_ADS_ITEM);
        if(purchased){ 
            adsDisable.setTitle(R.string.disableAdsYes_prefs);          adsDisable.setEnabled(false);
        }
    }

这就是我尝试停用广告的方式:

public class FirstActivity extends SherlockActivity {
    public final static String ANDROID_ADS_ITEM = "ads.buy";
    private AdView adView;
    LinearLayout layout;

    @Override
    public void onCreate(Bundle savedInstanceState) {
       ...
        String adId = "my ad id";

        boolean purchased = BillingController.isPurchased(this, ANDROID_ADS_ITEM);
        if(purchased){
             layout = (LinearLayout) findViewById(R.id.ads);
            layout.removeView(layout);
        } else {
        adView = new AdView(this, AdSize.BANNER, adId);
        layout = (LinearLayout) findViewById(R.id.ads);
        layout.addView(adView);
        AdRequest adRequest = new AdRequest();
        adView.loadAd(adRequest);
       }
    }
  ....
}

请帮忙。对不起我的英语。

1 个答案:

答案 0 :(得分:1)

问题很可能是您在首选项活动中初始化库配置(公钥和盐)。这意味着在打开首选项之前,将无法正确配置库。引用自述文件:

  

此外,BillingController需要一个   BillingController.IConfiguration实例从中获取公钥   需要验证签名的消息和盐来进行混淆   获得交易。提供配置的好地方   在Application子类中。

在这种情况下,当您在 FirstActivity 中呼叫isPurcharsed时,结算控制器没有盐来对数据库进行反混淆。

查看DungeonsRedux以获取在Application子类中设置配置的示例。