2016-11-02 3 views
1

До несколько дней назад, мои приложения не работают хорошо, пока я не получил сообщение в Output где он советует мне добавить следующую строку:Xamarin формы и Firebase AdMob для прошивки

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

Для Xamarin Компоненты Store, компонент под названием Xamarin.Google.iOS.MobileAds не существует, но вы должны установить Firebase AdMob для iOS.

Проблема заключается в том, что этот пример предназначен только для проекта iOS natve. У меня есть проект Xamarin forms с общим видом в основном проекте

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

и в проекте для каждой платформы его реализация. Для прошивки была:

[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; 
    } 
} 
} 

Теперь я не могу просматривать объявления, но у меня есть новый вид ошибки

Вы должны установить RootViewController свойство < GADBannerView: 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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^