0

我已将AdMob Plugin Pro添加到我的 Phonegap 应用程序中。我按照示例代码并在我的应用程序主页中放入以下代码:

function onDeviceReady() {
    var admobid = {};
    if( /(android)/i.test(navigator.userAgent) ) {
        admobid = { // for Android
            banner: 'ca-pub-{key hidden}'
            interstitial: 'ca-pub-{key hidden}'
        };
    } else if(/(ipod|iphone|ipad)/i.test(navigator.userAgent)) {
        admobid = { // for iOS
            banner: 'ca-pub-{key hidden}'
            interstitial: 'ca-pub-{key hidden}'
        };
    }
    if(window.AdMob) AdMob.prepareInterstitial( {adId:admobid.interstitial, autoShow:true} );
}
document.addEventListener('deviceready', onDeviceReady, false);

上面的代码有效并且显示了一个插页式广告,但是当我尝试在另一个页面中再次调用 AdMob 时出现问题。我尝试了几种方法,但都没有奏效。

以下是我的应用程序的一些背景信息:

  1. 当用户单击链接时,我的应用程序将重新加载页面。比如用户在首页点击“设置”按钮,整个页面重新加载到“setting.html”
  2. 操作 DOM 和内容的脚本总是放在最后一行<body>

所以这是我尝试过的:

  1. 复制相同onDeviceReady()addEventListner()以上并放入另一页。

    • 我发现在第二页中没有再次触发 deviceready 事件。因此,当然不会再次显示插页式广告。
  2. 只需复制AdMob.prepareInterstitial( {adId:admobid.interstitial, autoShow:true}到新页面并在页面加载后执行

    • 我发现 AdMob 变成了undefined

所以我想知道我是错过了什么还是我做错了什么?

谢谢!

4

2 回答 2

2

我是这个 cordova-admob 插件的作者。

正如@Simon 之前所说,您最好的机会是迁移到 SPA。也就是说,如果这是不可能的,也许你可以尝试一个丑陋的解决方法,但这在很大程度上取决于你如何实现应用程序:

尝试拦截您的每个链接index.html并尝试通过 ajax 加载它。通过 ajax 加载后,您可以将内容加载到index.html正文中。确保评估新内容中的每个脚本。在这里你可以找到一个关于我将如何实现的例子:http: //plnkr.co/edit/ew21klKYRcfvjX8wrAY1

它是用纯 javascript 实现的,但如果你使用 jQuery,那么它可以让你的生活更轻松$(document.body).load(...)

于 2016-05-19T12:53:31.047 回答
1

不要使用多页,正如 Cordova 文档所述,单页应用程序是您的朋友。当您加载新页面时,您将失去所有插件和其他 Cordova 功能,除非您在所有页面中包含 cordova.js。

如果您可以重构为 SPA,您的生活将在很多方面变得更轻松。

引用Cordova 文档

首先,您的 Cordova 应用程序应该采用 SPA(单页应用程序)设计。松散地定义,SPA 是从网页的一个请求运行的客户端应用程序。用户加载一组初始资源(HTML、CSS 和 JavaScript)并通过 AJAX 完成进一步的更新(显示新视图、加载数据)。SPA 通常用于更复杂的客户端应用程序。GMail 就是一个很好的例子。加载 GMail 后,邮件视图、编辑和组织都是通过更新 DOM 来完成的,而不是实际离开当前页面来加载一个全新的页面。

使用 SPA 可以帮助您以更有效的方式组织应用程序,但它也对 Cordova 应用程序具有特定的好处。Cordova 应用程序必须等待 deviceready 事件触发,然后才能使用任何插件。如果您不使用 SPA,并且您的用户单击以从一个页面转到另一个页面,则您必须等待 deviceready 再次触发,然后才能使用插件。随着您的应用程序变得越来越大,这很容易忘记。

即使您选择不使用 Cordova,在不使用单页面架构的情况下创建移动应用程序也会对性能产生严重影响。这是因为在页面之间导航需要重新加载脚本、资产等。即使这些资产被缓存,仍然存在性能问题。

于 2016-05-17T06:24:19.660 回答