开始使用AdMob for Android - 对文档感到困惑

3
我刚开始研究如何在我正在构建的Android应用程序中放置Admob广告。目前为止,效果不佳。我一直在按照从AdMob网站下载的“AdMod_Android_SDK_Instructions.pdf”中的示例进行操作,但感到困惑。在第7页上,我看到导入语句引用的包是com.admob.android.ads-但在我下载的SDK中,该包是com.google.ads-这是Google收购AdMob之前留下的吗?然后它继续调用adView.requestFreshAd()方法;-但该方法在最新代码中不存在。
请有人能帮我提供实际可行的代码吗? 我从日志cat中得到的具体错误是:
AdView缺少所需的XML属性adUnitId。
...然后在我调用adView.loadAd(new AdRequest());之后,我得到了:
Invalid unknown request error: Cannot determine request type.  Is your ad unit Id correct?
onFailedToReceiveAd(Invalid Google Ad request).

非常感谢您的帮助!

谢谢。


啊哈!终于在找到别人的XML后,我发现了我的错误所在。 我原本有这一行:xmlns:myapp =“http://schemas.android.com/apk/res/...my package name” - 在我的应用程序主LinearLayout中,但它应该在xml的AdView部分。哇,非常高兴我在搜索了几个小时之后终于解决了问题! - Emma Assin
4个回答

12

从4.1.0版本开始,mob1lejunkie是完全正确的,您可以删除:

  • attrs.xml
  • 背景、主文本颜色、次文本颜色属性(并在应用程序的管理设置选项卡中从AdMob网站定义它们)
  • 从xml文件的主要布局中删除名称空间xmlns:myapp,并将其替换为xmlns:ads(注意!!新的xmlns不在/apk/res中,而是在apk/lib中)
  • 更改adView xml片段中的adUnitID和adSize的命名空间

因此,这是一个使用admob 4.1.0正常工作的xml片段:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="fill_parent"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads">

    <com.google.ads.AdView android:id="@+id/ad"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ads:adUnitId="a14d7f7d2180609"
        ads:adSize="BANNER" />
</RelativeLayout>
谷歌要求开发者使用一个还未被谷歌自己记录文档的库并编写新代码,这有点过轻视开发者。这让我想起 adwhirl 之旅...
尽管如此,我很高兴谷歌推出了这个功能并移除了 attrs.xml 的东西。在 Android 中使用项目继承更容易使用 admob。
另外,关于在一个项目中使用多个广告视图,请注意在此版本中,现在可以像在这个线程中请求的那样,在应用程序的 strings.xml 文件中添加你的 admob id:http://groups.google.com/group/google-admob-ads-sdk/browse_thread/thread/c57917b4491a0c1 只需在您所有的广告视图的 xml 布局中以这种方式放置它:
ads:adUnitId="@string/admob_unit_id"

然后

<string name="admob_unit_id">a14d7f7d2180609</string>

在您的strings.xml文件和其他本地化版本中进行更改。这将为您提供一个单一的集中位置,在所有视图中输入您的admob id。

确实是一个很好的释放版本。

问候, Steff


你能澄清一下你所说的“这让我想起了AdWhirl的冒险……”是什么意思吗?我在尝试在我的代码中实现AdWhirl时遇到了相同的错误,我怀疑这与我的adUnitId有关。 - clayton33

2
我曾遇到与4.1.0类似的问题,结果发现Admob文档(截至5月15日)已经过时。不再需要attrs.xml,并且布局中的命名空间需要更改。
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads

比以前更快
xmlns:ads="http://schemas.android.com/apk/res/com.your.packagename

1

1

谢谢 SteD - 所以那些东西看起来都很好,但我仍然在我的原始问题中遇到了logcat错误和failedtoreceivead...所以我要回去继续搜索! - Emma Assin
1
奇怪。我的发布者ID肯定是正确的。所以我想知道为什么在logcat中会出现“无效的未知请求错误:无法确定请求类型。您的广告单元ID是否正确?”这一行。谷歌上没有与此错误匹配的结果!我不可能是唯一遇到这个问题的人!烦死了! - Emma Assin
哈利路亚!我的答案是在attrs.xml中创建一个名为adUnitId的新属性,然后在我的布局xml中将其设置为我的发布者ID!天哪...我整天搜索了所有地方都没有看到这段代码!我简直不敢相信它起作用了!太棒了! - Emma Assin
哇,我很高兴它能正常工作,实际上我仍在使用旧的包com.admob.android.ads。 - SteD
对我来说,这是由于Eclipse错误引起的。类似于:“尝试开始规则:P/...,与外部范围规则不匹配”。重启Eclipse解决了问题。 - amit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接