スポンサーサイト

--.--.--.--.--:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[AdventCalender2012]アプリと広告とSnapとAppBar

2012.12.05.Wed.01:14
このエントリは Windows 8 Store apps Advent Calendar の5日目のエントリです。

WindowsPhoneにはMS公式の広告コントロールがありましたが、Windowsストアアプリにも公式広告コントロールがあります。

Windows 8 Ads in Apps
http://advertising.microsoft.com/ads-in-apps

今回はこのコントロールをSnapped状態(以下スナップ状態)と、Full/Fill状態(以下フル状態)で画面下に表示するネタで行こうと思います。
広告サイズは、スナップ状態は292x60,フル状態は728x90を使います。
adSize.png


アプリに組み込む場合にはPubCenterに登録して、ApplicationIdとAdUnitIdを取得する必要がありますが、とりあえず今回のエントリ内容を試してみたい場合はテスト用のIDを使うと良いでしょう。
http://msdn.microsoft.com/en-us/library/hh506361(v=msads.10).aspx

○広告のスナップ対応
さて、スナップ状態とフル状態に広告を表示する方法は何通りか考えられます。
1.広告コントロールを一つ配置し、状態に応じてサイズを変更する
2.スナップ状態用とフル状態用の広告コントロールを配置する

簡単なのは1.の方法ですが、フル状態用の広告サイズをスナップ状態サイズに縮小すると広告の内容まで縮小されてしまいます。
screenshot_12022012_011923.png

screenshot_12022012_011914.png


2.の方法で実装するとそれぞれのサイズにあった広告が表示されます。
screenshot_12032012_003431.png


今回は2.の方法で実装しましょう。

○広告コントロールの配置
「基本ページ」に広告コントロール2つをそれぞれ下記のように配置します。
<AD:AdControl x:Name="adForFull"
      ApplicationId="d25517cb-12d4-4699-8bdc-52040c712cab"
      AdUnitId="10042998"
      Width="728"
      Height="90"
      VerticalAlignment="Bottom"
      Grid.Row="1" />
<AD:AdControl x:Name="adForSnapped"
      ApplicationId="d25517cb-12d4-4699-8bdc-52040c712cab"
      AdUnitId="10043074"
      Width="292"
      Height="60"
      VerticalAlignment="Bottom"
      Visibility="Collapsed"
      Grid.Row="1" />


次に、VSMでスナップ状態の時はAdForSnappedをVisibleに、AdForFullをCollapsedになるようにします。


これで、VisualStateに応じて広告コントロールが切り替わるようになりました。

○AppBarへの対応
次にAppBarを追加します。

AppBarを表示したとき広告コントロールが前面に表示されてしまいますが、これはバグ仕様です。
screenshot_12032012_005136.png


「広告コントロールはWebView使ってるから最前面にでちゃうの。ResumeとSuspendで対応してね!」
http://msdn.microsoft.com/en-us/library/jj157023(v=msads.10).aspx

仮にこのままの状態でストアに申請すると、もちろんリジェクトされます
なので、AppBarが表示されたときに広告コントロールをSuspendし、非表示になったらResumeするようにします。

private void AppBar_Opened(object sender, object e)
{
    adForFull.Suspend();
    adForSnapped.Suspend();
}
private void AppBar_Closed(object sender, object e)
{
    adForFull.Resume();
    adForSnapped.Resume();
}


これでAppBarが出たときには広告コントロールが一時停止し、AppBarが前面に表示されるようになります。
screenshot_12052012_012051.png

screenshot_12052012_012132.png


なお、ちゃんとSuspendするようにしても、タイミングによってはAppBarの上に広告コントロールが表示されます。さらにそのせいでリジェクトされることもありますが、テストメモに
AdControlのバグだからどうしようもありません
って書いて、審査通過することを祈るしかありません。

○まとめ
スナップ状態でも広告を表示したい場合は、広告コントロールを2つ配置して、それぞれに適切なサイズのAdUnitIdを設定する。
AppBarと被る位置に広告がある場合は、SuspendとResumeを使ってリジェクトされないように対応する。

それでは!
スポンサーサイト
コメント

管理者のみに表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。