2017-01-09 36 views
3

在我的應用中,我想展示插頁式廣告。經過10場比賽後,應該顯示,所以我設置了一個櫃檯,看看有多少場比賽。在我的模擬器上,int playcount;重置,AdMobs測試廣告彈出。在真實設備上,int playcount會一直計數,並且不會顯示任何廣告。它可能有什麼問題?android - 插頁式廣告只在模擬器上彈出

public class GameScreen extends Activity { 
public int playcount; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game);  

    TextView playctv = (TextView) findViewById(R.id.textView); 
    mInterstitialAd = new InterstitialAd(this); 

    // set the ad unit ID 
    mInterstitialAd.setAdUnitId(getString(R.string.interstitial_full_screen)); 

    AdRequest adRequest = new AdRequest.Builder() 
      .build(); 

    // Load ads into Interstitial Ads 
    mInterstitialAd.loadAd(adRequest); 


    SharedPreferences prefsplay = this.getSharedPreferences("myPrefsKey", 
      Context.MODE_PRIVATE); 
    playcount = prefsplay.getInt("play_number", 0); 
    playctv.setText(String.valueOf(playcount)); 

    AdView mAdView = (AdView) findViewById(R.id.adView); 
    MobileAds.initialize(getApplicationContext(), "ca-app-pub-xxxxx"); 
    AdRequest adRequestd = new AdRequest.Builder() 
      .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
      .build(); 



} 

public void restart(View view) { 
    Intent intent = new Intent(this, GameScreen.class); 
    startActivity(intent); 
    playcount++; 

    SharedPreferences prefsplay = this 
      .getSharedPreferences("myPrefsKey", 
        Context.MODE_PRIVATE); 
    prefsplay.edit().putInt("play_number", playcount) 
      .apply(); 

} 


private void showInterstitial() { 
    if (mInterstitialAd.isLoaded()) { 
     mInterstitialAd.show(); 
    } 
} 



public void gameover() { 

    if(playcount == 10) { 

    mInterstitialAd.setAdListener(new AdListener() { 
      public void onAdLoaded() { 
       showInterstitial(); 
       playcount = 0; 
      } 
     }); 
     AdRequest adRequest = new AdRequest.Builder() 
       .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
       // Check the LogCat to get your test device ID 
       .addTestDevice("C04B1BFFB0774708339BC273F8A43708") 
       .build(); 
    } 
} 
+0

因爲這addTestDevice(AdRequest.DEVICE_ID_EMULATOR)的 –

+0

@KhalilM你想,如果這部分被刪除它是否行得通呢? –

+0

嘗試刪除它並添加AdRequest adRequest = new AdRequest.Builder()。build(); mInterstitialAd.loadAd(adRequest); –

回答

2
private void adView() { 
    mAdView = (AdView) findViewById(R.id.activity_ad_view); 
    MobileAds.initialize(getApplicationContext(), getResources().getString(R.string.admob_banner_id)); 
    final AdRequest adRequest = new AdRequest.Builder().build(); 
    mAdView.loadAd(adRequest); 
} 

使用此函數來顯示廣告,而不是:

AdRequest adRequest = new AdRequest.Builder() 
       .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
       // Check the LogCat to get your test device ID 
       .addTestDevice("C04B1BFFB0774708339BC273F8A43708") 
       .build(); 

問題是你正在使用的設備ID的請求,廣告和設備ID是模擬器,這就是爲什麼廣告是隻在模擬器中可見。

+0

它並沒有真正的幫助 - 沒有廣告和變量繼續計數,也沒有重置 –

1

使用此代碼。

package com.reducephotofilesize; 
import android.os.Bundle; 
import android.widget.TextView; 

import com.google.android.gms.ads.InterstitialAd; 

public class GameScreen extends Activity { 
    public int playcount; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game); 
     TextView playctv = (TextView) findViewById(R.id.textView); 
     loadAd(); 
     SharedPreferences prefsplay = this.getSharedPreferences("myPrefsKey", 
       Context.MODE_PRIVATE); 
     playcount = prefsplay.getInt("play_number", 0); 
     playctv.setText(String.valueOf(playcount)); 

     AdView mAdView = (AdView) findViewById(R.id.adView); 
     MobileAds.initialize(getApplicationContext(), "ca-app-pub-xxxxx"); 
     AdRequest adRequestd = new AdRequest.Builder() 
       .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
       .build(); 


    } 

    private void loadAd() { 
     mInterstitialAd = new InterstitialAd(this); 
     mInterstitialAd.setAdUnitId(getString(R.string.interstitial_full_screen)); 

     AdRequest adRequest = new AdRequest.Builder() 
       .build(); 

     // Load ads into Interstitial Ads 
     mInterstitialAd.loadAd(adRequest); 
    } 
} 

    public void restart(View view) { 
     Intent intent = new Intent(this, GameScreen.class); 
     startActivity(intent); 
     playcount++; 

     SharedPreferences prefsplay = this 
       .getSharedPreferences("myPrefsKey", 
         Context.MODE_PRIVATE); 
     prefsplay.edit().putInt("play_number", playcount) 
       .apply(); 

    } 


    private void showInterstitial() { 
     if (mInterstitialAd.isLoaded()) { 
      mInterstitialAd.show(); 
     } 
    } 


    public void gameover() { 

     if (playcount == 10) { 
      showInterstitial(); 
      playcount = 0; 
      loadAd(); 
     } 
    } 
+0

你的代碼會讓我的應用崩潰,你測試了嗎? ? –

0

這部分代碼看起來有點奇怪。

if(playcount == 10) { 

    mInterstitialAd.setAdListener(new AdListener() { 
      public void onAdLoaded() { 
       showInterstitial(); 
       playcount = 0; 
      } 
     }); 
     AdRequest adRequest = new AdRequest.Builder() 
       .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
       // Check the LogCat to get your test device ID 
       .addTestDevice("C04B1BFFB0774708339BC273F8A43708") 
       .build(); 
    } 

minterstittialAdplaycount達到值10,每次將被加入的監聽器。此外,復位後playcount的值不會保存到sharedpreference中。

刪除mInterstitialAd.setAdListener(),將復位值playcount保存到共享首選項中,並保留其餘代碼。

public void gameover() { 
     if(playcount == 10) { 
      showInterstitial();  
      playcount = 0; 

      SharedPreferences prefsplay = getApplicationContext().getSharedPreferences("myPrefsKey",Context.MODE_PRIVATE); 
      prefsplay.edit().putInt("play_number", playcount).apply(); 


      AdRequest adRequest = new AdRequest.Builder() 
       .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
       // Check the LogCat to get your test device ID 
       .addTestDevice("C04B1BFFB0774708339BC273F8A43708") 
       .build(); 
     } 
} 
+0

在仿真器上工作,但在真實設備上工作 - 就像無法訪問代碼一樣。 –

+0

你能否對「代碼無法到達」部分更精確一點。好像該廣告沒有在實際設備上加載一樣。 –

+0

是的,變量playcount應該在達到10的值後重新設置。在仿真器上它會重置,但是在實際的設備上它會一直計數,並且不會顯示廣告 - 就像代碼被完全忽略了一樣 –