我正在尝试o在我的应用程序中实施应用程序内计费,并且应用程序内计费本身运行正常。
但是,尽管它应该仅对高级用户禁用广告,但我还是完全禁用了它们。我将发布我的代码,以使您更好地理解:
这是我的IabPurchaseFinished()
方法:
@Override
public void onIabPurchaseFinished(IabResult result, Purchase info) {
if (!verifyDeveloperPayload(info)) {
Toast.makeText(this, R.string.error_purchasing, Toast.LENGTH_LONG).show();
}
Toast.makeText(this, R.string.premium_bought, Toast.LENGTH_LONG).show();
if (info.getSku().equals("chords_premium")) {
/** salva isPremium tra SharedPreferences */
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("status", "purchased");
editor.apply();
}
}
如您所见,它会将字符串值状态保存为购买的SharedPreferences。
现在在我有广告的活动中,我这样做是这样的:
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.getString("status", "free");
/** gestisce le pubblicita */
if (prefs.equals("free")) {
MobileAds.initialize(getApplicationContext(), "ca-app-pub-6723047396589178/2654753246");
AdView listBanner = (AdView) findViewById(R.id.chords_list_banner);
AdRequest adRequest = new AdRequest.Builder().build();
listBanner.loadAd(adRequest);
/** carica Ad a tutto schermo */
chordsListAd = new InterstitialAd(this);
chordsListAd.setAdUnitId("ca-app-pub-6723047396589178/7447672046");
requestNewInterstitial();
chordsListAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
requestNewInterstitial();
}
});
}
如您所知,我首先检查我的
*SharedPreferences*
以查看是否存在“状态”,如果没有,则将其设置为“免费”然后,我的广告放在
if
语句中:if (prefs.equals("free"))
因此,我认为如果显示SharedPreferences中的字符串是“免费”,或者换句话说,不是“购买”,则表明用户未购买应用程序中的字符串。
问题是,无论我是否使用拥有In App的帐户访问,都不会显示广告。关于如何解决它的任何想法?
显然,我已经对开发者控制台上上传的Signed Apk进行了测试,并根据Google的testing In-App Billing指南进行了所有设置。
最佳答案
您在这里犯了一个小错误:
if (prefs.equals("free"))
prefs
是定义的SharedPreferences prefs
,它永远不是String
,这意味着它始终是false
。您真正想写的是这张支票:
String status = prefs.getString("status", "free");
/** gestisce le pubblicita */
if (status.equals("free")) {