2015-12-11 2 views
26

मुझे पता नहीं है कि यहां क्या हो रहा है, लेकिन मैं नीचे दिए गए कोड के माध्यम से गतिशील रूप से अपना विज्ञापन इकाई आईडी सेट करने और एक्सएमएल से इसे हटाने की कोशिश कर रहा हूं लेकिन फिर भी त्रुटि मिलती है:विज्ञापन आकार और विज्ञापन इकाई आईडी को लोडएड से पहले सेट किया जाना चाहिए जब प्रोग्रामेटिक रूप से

The ad size and ad unit ID must be set before loadAd is called.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ads="http://schemas.android.com/apk/res-auto" 
     <com.google.android.gms.ads.AdView 
      android:id="@+id/adView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_alignParentBottom="true" 
      ads:adSize="SMART_BANNER"> 
     </com.google.android.gms.ads.AdView> 

और

AdView mAdView = (AdView) rootView.findViewById(R.id.adView); 
    mAdView.setAdUnitId(getEvent().getAdMobUnitId()); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    mAdView.loadAd(adRequest); 
+0

विज्ञापन की स्थापना करके एक बार कोशिश मैन्युअल रूप से एक्सएमएल फ़ाइल में। –

+0

जो आप इकाई इकाई आईडी सेट करने की कोशिश कर रहे हैं उसे प्राप्त न करें, आपको इसे ca-app-pub-3940256099942544/6300978111 –

उत्तर

34

प्रोग्राम के यह बनाएं

View adContainer = findViewById(R.id.adMobView); 

AdView mAdView = new AdView(context); 
mAdView.setAdSize(AdSize.BANNER); 
mAdView.setAdUnitId(YOUR_BANNER_ID); 
((RelativeLayout)adContainer).addView(mAdView); 
AdRequest adRequest = new AdRequest.Builder().build(); 
mAdView.loadAd(adRequest); 

और अपने xml फ़ाइल में

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

     <RelativeLayout 
      android:id="@+id/adMobView" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignParentBottom="true"/> 

</RelativeLayout> 

संपादित

बैनर के लिए सबसे अच्छा अभ्यास, दो दृश्य (एक unitId) प्रति एक बैनर दिखाने के लिए, यदि आप में और अधिक बैनर दिखाना चाहते है एक ही स्क्रीन (अनुशंसित नहीं), आपको console से unitId और प्रत्येक unitId के लिए एक विज्ञापन दृश्य बनाना होगा।

मेरा जवाब है:

है, अगर इसकी एक बग पता नहीं है या आप केवल एक adview प्रति unitId हो सकता है और इसे और अधिक समझ बनाने यदि क्योंकि आप केवल एक unitId adview प्रति हो सकता है, और docs से पढ़ वे AdView() को तुरंत चालू करके unitIds और sizes या को केवल XML से ही करते हुए इसे करने के दो तरीके दिखाते हैं।

और मैंने इस निष्कर्ष पर पहुंचने के लिए कुछ परीक्षण किए।

अपने com.google.android.gms.ads.AdView

1 से findViewById का उपयोग करके - आप setAdUnitId प्रोग्राम के आप adSize पहले सेट कर सकते हैं यदि।

2 - यदि आप पहले से ही अपने एक्सएमएल में हैं तो आप setAdUnitId प्रोग्रामेटिक रूप से नहीं कर सकते हैं।

3 - अपनी xml में 'setAdUnitId' का उपयोग नहीं करता है, यह Required xml attribute adUnitId was missing सूचित करेंगे, और adSize के लिए एक ही तुम दोनों प्रोग्राम के गुण सेट करने के बावजूद।

4 - यदि नहीं setAdUnitId और setSize रख दिया और यह programtically शब्दों में कहें, adview आप Required xml attribute adUnitId was missing सूचित करेंगे, और एक ही आप एक्सएमएल में adSize सेट नहीं है।

5 - केवल एक चीज प्रोग्राम के आप कर सकते हैं mAdView.loadAd(adRequest) फोन विज्ञापन

लोड करने के लिए new AdView()

1 का उपयोग करके है - यदि आप एक खाली लेआउट बनाना है, तो यह करने के लिए adview संदर्भ जोड़ने के लिए काम करेंगे राय।

2 - आप सेट कर सकते adSize और adUnitId प्रोग्राम के यह काम करेंगे।

3- आप setAdUnitAd दो बार उपयोग करने के लिए इस अपवाद The ad unit ID can only be set once on AdView. ही शुरू किया जाएगा यदि आप findViewById

मेरे निष्कर्ष द्वारा उपयोग करने का प्रयास करते हैं कर रहे हैं:

आप एक्सएमएल से केवल उपयोग कर सकते हैं "

<com.google.android.gms.ads.AdView 
android:id="@+id/adView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
ads:adSize="BANNER" 
ads:adUnitId="ca-app-pub-my_id_number_was_ommited_by_security" /> 

और ऑन क्रेट

AdView mAdView = findViewById(R.id.adView); 
AdRequest adRequest = new AdRequest.Builder().build(); 
mAdView.loadAd(adRequest); 
पर लोड दृश्य

या पूर्ण प्रोग्राम के

View adContainer = findViewById(R.id.adMobView); 
AdView mAdView = new AdView(context); 
mAdView.setAdSize(AdSize.BANNER); 
mAdView.setAdUnitId(YOUR_BANNER_ID); 
adContainer.addView(mAdView); 
AdRequest adRequest = new AdRequest.Builder().build(); 
mAdView.loadAd(adRequest); 

मैं एक लंबे समय के लिए बैनर का उपयोग और है कि इसका जवाब मेरे लिए अच्छा है। XML में अपनी विज्ञापन इकाई आईडी सेट करने के लिए

+0

जैसे पंजीकरण करके व्यवस्थापक से प्राप्त करना चाहिए, आप इसका संदर्भ नहीं दे सकते और इसे संशोधित नहीं कर सकते ????????? –

+0

हां, आप कर सकते हैं, और मुझे लगता है कि मेरा समाधान यह नहीं है कि आप चाहते हैं, इसलिए मैंने एक शोध किया और मुझे आपकी समस्या के समान 'समस्या' मिली, कृपया इस समाधान को पढ़ें http://stackoverflow.com/a/23980933/1879661 – diogojme

+0

मुझे वहां कोई समाधान नहीं दिख रहा है, जिसमें कंटेनर है, और इसमें उस विज्ञापन को इंजेक्ट किया गया है। क्या यह करने का एकमात्र तरीका है? –

0

कोशिश

ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE" 

तरह

ads:adUnitId="ca-app-pub-3940256099942544/6300978" 

या अधिक विस्तार https://developers.google.com/admob/android/quick-start

+0

यह गतिशील है, इसे स्थिर रूप से सेट नहीं कर सकता है। –

1

आप मिल गया है के लिए लिंक मिल

android:layout_width="wrap_content" 
android:layout_height="wrap_content" 

से: https://developers.google.com/admob/android/banner#smart_banners

Note: The smart banner view in your layout must consume the full width of the device. If it doesn't, you'll get a warning with the message "Not enough space to show ad", and the banner will not be displayed.

यह परिवर्तन

android:layout_width="match_parent" 

और xml फ़ाइल में अपने adUnitID स्थापित करने के लिए।

ads:adUnitId="AD_UNIT_ID" 
+0

मुझे पहले यह त्रुटि मिली, लेकिन मैंने इसे ठीक कर दिया। यह वही बात नहीं है। –

0

मेरे लिए, मैं इस तरह विज्ञापन प्रकार की स्थापना की गई थी:

ads:adSize="Banner" 

यह सब टोपियां होगा जबकि: adUnitId = "UNITID":

ads:adSize="BANNER" 
संबंधित मुद्दे