2016-05-16 56 views
0

我已将AdMob Plugin Pro添加到我的Phonegap应用程序中。我按照示例代码,并把我的应用程序的主页下面的代码:重定向到Phonegap中的新页面后,AdMob未定义

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

所以我想知道我错过了什么,或者我做错了什么?

谢谢!

回答

1

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

如果你可以重构SPA,你的生活将会在很多方面变得更容易。

引述Cordova docs

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

使用SPA可以帮助您以更高效的方式组织您的应用程序,但它对科尔多瓦应用程序也有特定的好处。在使用任何插件之前,Cordova应用程序必须等待deviceready事件触发。如果您不使用SPA,并且用户点击从一个页面到另一个页面,则在使用插件之前,您必须等待deviceready再次触发。随着应用程序变大,这很容易忘记。

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

+0

恐怕也无法改变因为这是另一个程序员创建的项目,并且截止日期不允许我现在重构该程序,所以在此阶段将其添加到SPA。所以我必须先以丑陋的方式去做。我尝试在每个页面中包含'cordova.js',但仍然未定义AdMob。我想念什么?谢谢! –

+0

您可能必须收听设备,因为每个页面加载本质上都会重新开始。在搬到SPA之前,你的经历将会非常糟糕。 –

+0

我试图听'deviceready',但没有运气。似乎事件在第二页中甚至没有发生。 –

2

我是this cordova-admob plugin的作者。

由于@Simon stated before,你最好的机会是迁移到SPA。也就是说,如果这是不可能的,也许你可以尝试一个丑陋的解决方法,但这取决于你如何实现应用程序:

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

它在纯JavaScript实现的,但如果你是jQuery的下那么它可以使您的生活更容易$(document.body).load(...)