2012年5月31日木曜日

Cordovaを使ったアプリへのiAdの組み込み その2

前記事に続き、自作アプリへの組み込みに挑戦しました。
前回同様、Cordova1.7.0とXcode4.3を使用。

自分にとってブラックボックスな部分が多いので、サンプルのindex.htmlのjavascript部分をjsファイルとして独立させ、
ほぼそのまま自作アプリに持っていってみました。
途中、ダブルクォーテーションが全角になってるとかいうくだらないミスで
ひっかかってしまうトラブルがありましたが、ほぼそのままの状態で動作しました。
広告の表示位置の変更がオリジナルの状態ではうまくできず、adAtBottomの指定を先頭に持ってくることで解決しました。
var gLastAdLoadedDate = null;
var gTotalAdsLoaded = 0;
var gTimerId = null;

/*この準備okな時に関数が呼んで欲しい関数*/
function onDeviceReady()
{
        //広告の表示位置。trueで下部、falseで上部に表示。
        var adAtBottom = true;
        window.plugins.iAdPlugin.prepare(adAtBottom);

        // 端末の方向をチェックして適切なサイズに修正する部分
        // 横向きの時に上手く広告が表示されない可能性有。
        window.addEventListener("orientationchange", window.plugins.iAdPlugin.orientationChanged, false);
        window.plugins.iAdPlugin.orientationChanged(true);//trigger immediately so iAd knows its orientation on first load

        //広告を表示させる。
        window.plugins.iAdPlugin.showAd(true);
        //
        // listen for the "iAdBannerViewDidLoadAdEvent" that is sent by the iAdPlugin
        document.addEventListener("iAdBannerViewDidLoadAdEvent", iAdBannerViewDidLoadAdEventHandler, false);
        // listen for the "iAdBannerViewDidFailToReceiveAdWithErrorEvent" that is sent by the iAdPlugin
        document.addEventListener("iAdBannerViewDidFailToReceiveAdWithErrorEvent", iAdBannerViewDidFailToReceiveAdWithErrorEventHandler, false);
        setTimeout(function() {
                             window.plugins.iAdPlugin.prepare(adAtBottom); // by default, ad is at Top
                             }, 1000);
}

function iAdBannerViewDidFailToReceiveAdWithErrorEventHandler(evt)
{
        //alert(evt.error);
        window.plugins.iAdPlugin.showAd(false);
        var elem = document.getElementById("showAd");
        elem.checked = false;
}

function iAdBannerViewDidLoadAdEventHandler(evt)
{
        // if we got this event, a new ad is loaded
        var elem = document.getElementById("lastAdLoaded");
        gLastAdLoadedDate = new Date();
        elem.innerHTML = gLastAdLoadedDate.toLocaleString();
        elem = document.getElementById("showAd");
        elem.disabled = false;
        elem.checked = true;
        window.plugins.iAdPlugin.showAd(true);
        gTotalAdsLoaded++;
        elem = document.getElementById("totalAdsLoaded");
        elem.innerHTML = gTotalAdsLoaded.toString();
        if (gTimerId) {
                clearInterval(gTimerId);
        }
        gTimerId = setInterval(lastAdLoadedInterval, 1000);
}

function lastAdLoadedInterval()
{
        var now = (new Date()).getTime();
        var diff = now - gLastAdLoadedDate.getTime();
        var elem = document.getElementById("lastAdLoaded");
        var ms_in_a_year = 31449600000; /* 1000ms x 60s x 60m x 24hrs x 7d x 52w */
        var ms_in_a_week = 604800000; /* 1000ms x 60s x 60m x 24hrs * 7d */
        var ms_in_a_day = 86400000; /* 1000ms x 60s x 60m x 24hrs */
        var ms_in_an_hour = 3600000; /* 1000ms x 60s x 60m */
        var ms_in_a_minute = 60000; /* 1000ms x 60s */
        var ms_in_a_second = 1000;       
        var milliseconds = Math.floor(diff);
        var seconds = Math.floor(milliseconds / ms_in_a_second) % 60;
        var minutes = Math.floor(milliseconds / ms_in_a_minute) % 60;
        var hours = Math.floor(milliseconds / ms_in_an_hour) % 24;
        var days = Math.floor(milliseconds / ms_in_a_day) % 7;
        var weeks = Math.floor(milliseconds / ms_in_a_week) % 52;
        var years = Math.floor(milliseconds / ms_in_a_year);
        var caption = seconds + "s ago";
        if (minutes > 0) {
                caption = minutes + "m " + caption;
        }
        if (hours > 0) {
                caption = hours + "h " + caption;
        }
        if (days > 0) {
                caption = days + "d " + caption;
        }
        if (weeks > 0) {
                caption = weeks + "w " + caption;
        }
        if (years > 0) {
                caption = years + "yr " + caption;
        }
        elem.innerHTML = caption;
}

function showAdClicked(evt)
{
        window.plugins.iAdPlugin.showAd(evt.checked);
}

//広告消す
function AdFalse(){
        window.plugins.iAdPlugin.showAd(false);
}
//広告出す
function AdTrue(){
        window.plugins.iAdPlugin.showAd(true);
}

追記)横向きのときに広告エリアのサイズがおかしくなってしまう現象を確認しました。
サンプルでは問題なく、JQuerymobileを使ってる自作アプリで発生したのでJQuerymobileと
併用したときに発生する現象かも。なんとかしたい。

0 件のコメント:

コメントを投稿