2017-03-26 33 views
1

私は最近、初めてAndroidアプリを完成してGoogle Playに導入しましたが、今はAdMobを追加しようとしています。XamarinのAndroidアプリにAdMob広告が表示されない

いくつかの誤った開始後、いくつかのクリーンアップと再構築は、アプリケーションが構築されているところにありますが、表示する広告を取得できません。

私はAdMobViewというコンテンツビューを作成しました。

using Xamarin.Forms; 

namespace MyApplication 
{ 
    public partial class AdMobView : ContentView 
    { 
     public AdMobView() 
     { 
     } 
    } 
} 

次に、私は広告を表示したいXAMLで

using Android.Gms.Ads; 
using Xamarin.Forms; 
using MyApplication; 
using Xamarin.Forms.Platform.Android; 


[assembly: ExportRenderer(typeof(AdMobView), typeof(AdMobRenderer))] 

namespace MyApplication 
{ 
    public class AdMobRenderer : ViewRenderer <AdMobView, AdView> 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<AdMobView> e) 
     { 
      base.OnElementChanged(e); 

      if (Control == null) 
      { 
       var ad = new Android.Gms.Ads.AdView(Forms.Context); 
       ad.AdSize = Android.Gms.Ads.AdSize.Banner; 
       ad.AdUnitId = "<the AdUnit id>"; 

       var requestbuilder = new Android.Gms.Ads.AdRequest.Builder(); 
       ad.LoadAd(requestbuilder.Build()); 

       SetNativeControl(ad); 
      } 
     } 
    } 
} 

、私はこのXAMLでも

<controls:AdMobView WidthRequest="320" HeightRequest="50" /> 

を追加して、私は制御MainActivityで

xmlns:controls="clr-namespace:MyApplication;assembly=MyApplication" 

ためxmlnを追加しました.cs。私が追加しました

MobileAds.Initialize(ApplicationContext, "<the AdUnit id>"); 

AssemblyInfo.csに私が追加しました。

[assembly: UsesPermission(Android.Manifest.Permission.Internet)] 
[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)] 

AndroidManifest.xmlに追加しました。私が言ったように

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
    <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" /> 

ので、これはうまく構築し、実際のデバイスの両方で、エミュレータでのデバッグモードで実行されますが、広告が表示されるはずの領域には何もありません。私はちょうど普通の背景を見ることができます - 空白のボックスさえありません。

誰かがアイデアを持っていれば、私はいくつかの眠れない夜を救うことができます!

答えて

1

[OK]を確認してください、私はそれが働いて得るために管理しています。
誰が、私は、それ自体で働いていたし、いくつかのソースからつなぎ合わせる必要があった1チュートリアルを見つけることができませんでしたように私は、ここに完全なコードをポストするつもりだ、苦労している場合は...

Androidのマニフェスト:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="<your package name>" 
     android:versionCode="<your version code>" android:versionName="<your version number>" android:installLocation="auto"> 
<uses-sdk android:minSdkVersion="16" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<application android:label="<your app title>" android:icon="@drawable/Icon"> 
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
    <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
</application> 

MainActivity.cs:

using Android.Gms.Ads; 
. 
. 
. 
MobileAds.Initialize(ApplicationContext, "<your unit id>"); 
LoadApplication(new App()); 

重要な注意 - このアプリのユニットIDとではないことを確認してください類似して見えるアプリID。ユニットIDは、 という形式のものです。ca-app-pub-9nnnnnnnnnnnnnn/nnnnnnnnnn app idは類似していますが、/ の代わりに〜が付いています。メインアクティビティでLoadApplicationを使用している場合は、初期化 - 私が行っていた少年時代のエラーの1つです。 VS2015では、これは実際には廃止されているというメッセージとともに緑色の下線が付いていますが、広告が配信されるためにはまだ必要です。

AdMobView.csと呼ばれるビューを作成します:あなたはVisual Studioでビューを作成するとき

using Xamarin.Forms; 

namespace FightJudgeAssistant 
{ 
    public class AdMobView : View 
    { 

    } 
} 

、それはステートメントを使用してさまざまに置きます。あなたはこれらすべてを取り除くと取得することができちょうど持って使用Xamarin.Forms

作成したクラスと呼ばれるAdViewRenderer.cs:

using Android.Widget; 
using Android.Gms.Ads; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.Android; 
using FightJudgeAssistant; 

[assembly: ExportRenderer(typeof(mynamespace.AdMobView),  typeof(AdMobRenderer))] 

namespace mynamespace 
{ 
public class AdMobRenderer : ViewRenderer<mynamespace.AdMobView, Android.Gms.Ads.AdView> 
{ 
    protected override void OnElementChanged(ElementChangedEventArgs<mynamespace.AdMobView> e) 
    { 
     base.OnElementChanged(e); 

     if (Control == null) 
     { 
      var ad = new Android.Gms.Ads.AdView(Forms.Context); 
      ad.AdSize = Android.Gms.Ads.AdSize.Banner; 
      ad.AdUnitId = "<your unit id>"; 

      var requestbuilder = new Android.Gms.Ads.AdRequest.Builder(); 
      ad.LoadAd(requestbuilder.Build()); 

      SetNativeControl(ad); 
     } 
    } 
} 

}あなたが広告を表示したい画面で

(中私の場合グリッド表示内のXAML):

<ContentPage.Content> 
<Grid x:Name="controlGrid" RowSpacing="1" ColumnSpacing="1"> 

     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     . 
     . 
     . 
     . 
     <controls:AdMobView Grid.Row="6"/> 
    </Grid> 

グリッド行には上記以外のコンテンツがあります。あなたは、広告が必要なだけ多くのスペースを占有するように、行6の行の高さを「*」ではなく「auto」に設定していることに気付くでしょう。それについて

xmlns:controls="clr-namespace:mynamespace;assembly=myAssemblyname> 

とのthats:

もContentPageセクションで、次のXMLNSを追加しました!これをテストするには、特にバナー広告をテストするためのca-app-pub-3940256099942544/6300978111を使用しました。

+0

xmlns:controls = "clr-namespace:mynamespace; assembly = myAssemblyname?を追加する正確なパス –

0
+0

はい、私はチュートリアルを見ました。私は私の変更を裏づけし、私はこの1つで多く見ているかどうかを見てみましょう。それは別のチュートリアルビルを手に入れた1日の大部分を費やしたのは残念です。 – Rooq

+0

いいえ...このチュートリアルではあまり運がない。 intellisenseは、カスタムレンダラーコードの多くでエラーを返します。彼らが使用することを提案したバージョンが29であれば、それはおそらくかなり時代遅れです。 – Rooq

関連する問題