2016-11-02 86 views
1

直到前幾天,直到我收到了輸出消息它建議我添加以下行我的應用程序進行工作的罰款:Xamarin形式和火力地堡的AdMob針對iOS

request.TestDevices = new[] { "yourtestcodeid" }; 

對於Xamarin組件商店,名爲的組件Xamarin.Google.iOS.MobileAds已不存在,但您必須安裝Firebase AdMob for iOS

問題是該示例僅適用於natve iOS項目。我有一個Xamarin表格項目,在主項目中有一個通用視圖

public class AdMobView : ContentView { 
    /// <summary> 
    /// Initializes a new instance of the <see cref="AdMobView"/> class. 
    /// </summary> 
    public AdMobView() { 
    } 
} 

並且在項目中爲每個平臺執行它。對於iOS是:

[assembly: ExportRenderer(typeof(AdMobView), typeof(AdMobRenderer))] 
namespace WordBankEasy.iOS.Renderers { 
public class AdMobRenderer : ViewRenderer { 
    const string AdmobID = "ca-app-pub-yourcode"; 

    BannerView adView; 
    BannerView adViewTableView; 
    BannerView adViewWindow; 
    Interstitial adInterstitial; 
    bool viewOnScreen; 

    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.View> e) { 
     base.OnElementChanged(e); 

     if(e.NewElement == null) 
      return; 

     if(e.OldElement == null) 
     { 
      adView = new BannerView(
       size: AdSizeCons.SmartBannerPortrait, 
       origin: new CGPoint(0, UIScreen.MainScreen.Bounds.Size.Height - AdSizeCons.Banner.Size.Height)) 
      { 
       AdUnitID = AdmobID, 
       RootViewController = UIApplication.SharedApplication.Windows[0].RootViewController 
      }; 

      adView.AdReceived += (sender, args) => 
      { 
       if(!viewOnScreen) this.AddSubview(adView); 
       viewOnScreen = true; 
      }; 

      adView.LoadRequest(GetRequest()); 
      base.SetNativeControl(adView); 
     } 
    } 

    private void AdViewWindow_AdReceived(object sender, EventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 

    Request GetRequest() 
    { 
     var request = Request.GetDefaultRequest(); 
     // Requests test ads on devices you specify. Your test device ID is printed to the console when 
     // an ad request is made. GADBannerView automatically returns test ads when running on a 
     // simulator. After you get your device ID, add it here 
     request.TestDevices = new[] { "96080e40efec5229aad21b540eae6fe0" }; 
     return request; 
    } 
} 
} 

現在,我無法查看廣告,但我有一個新的錯誤

您必須設置<的GADBannerView的RootViewController的屬性:0x12de69c50; frame =(0 617; 375 50); clipsToBounds = YES; layer = < CALayer:0x17103da00 >>在加載請求之前。

我該如何更改我的代碼?提前感謝您的任何建議。

回答

2

有了新的組件有一點點變化,這樣的代碼來執行:

if(e.OldElement == null) 
{ 
    UIViewController viewCtrl = null; 

    foreach(UIWindow v in UIApplication.SharedApplication.Windows) 
    { 
     if (v.RootViewController != null) 
     { 
      viewCtrl = v.RootViewController; 
     } 
    } 

    adView = new BannerView(size: AdSizeCons.Banner, origin: new CGPoint(-10, 0)) 
    { 
     AdUnitID = AdmobID, 
     RootViewController = viewCtrl 
    }; 

    adView.AdReceived += (sender, args) => 
    { 
     if(!viewOnScreen) this.AddSubview(adView); 
     viewOnScreen = true; 
    }; 

    adView.LoadRequest(GetRequest()); 
    base.SetNativeControl(adView); 
}