安卓发展到今天,已经有移动广告开发商,给我们开发者提供了他们自己的SDK,供我们使用,在游戏中嵌入SDK,同时就可以使用他们的广告了。学习libgdx至今,有许多朋友向我提出,希望我能讲解下在libgdx中如何使用广告,那么今天我们就来学习下,在libgdx中如何嵌入广告。
1.嵌入广告SDK
首先,我们使用多盟广告平台,在你建立的libgdx的android项目中的libs目录下,将Domob SDK的 JAR包(domob_android_sdk.jar)拷贝到libs目录下。步骤如下:
1) 在 “Package Explorer” 页签中右击你的工程并选择 “Properties”。
2) 在左侧面板中选择 “Java Build Path”。
3) 在主窗口中选择 “Libraries”页签。
4) 点击“Add JARs…”按钮。
5) 选择您拷贝到libs目录下的domob_android_sdk.jar。
6) 点击 “OK” 完成添加。
如图所示:
2.修改AndroidManifest.xml文件
(1)添加Activity声明在AndroidManifest.xml文件中的</application>标签之前,还需要添加必要的Activity声明,添加如下代码:
<pre name="code" class="html"> <activity android:name="cn.domob.android.ads.DomobActivity"
android:theme="@android:style/Theme.Translucent"></activity>
(2)添加权限许可在AndroidManifest.xml文件中的<application>标签之前,请为SDK添加以下权限许可(如果App本身没有的话),添加代码如下:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
3.DomobAdView 类
API定义:一个用于调用横幅广告的类。
成员变量:其中包含 INLINE_SIZE_300X250 、INLINE_SIZE_320X50 、INLINE_SIZE_600X500 、INLINE_SIZE_600X94 、INLINE_SIZE_728X90 几个变量,其实这些都是横幅(Banner)广告的大小。
功能方法:
DomobAdView(android.content.Context context, java.lang.String publisherID, java.lang.String placementID,java.lang.String size)
第一个参数需要传入一个Context类型变量,第二个是你在多盟申请的
出版者标识(
PUBLISHERID),第三个是广告位ID,最好一个是你广告条幅的大小。常用方法:
(1)requestAdForAggregationPlatform() 方法:在后台请求广告党不刷新当前广告VIEW。
(2) requestRefreshAd() 方法:立刻请求一个新的广告并刷新view。
(3) setAdEventListener( DomobAdEventListener eventListener) 方法:加入监听器,打印一些数据。
还有一些就是一些简单的设置方法,读者可以自行看下多盟的API都是很简单的,可以看懂,这里就叙述这个几个常用的方法。
4.要点讲解
这里主要简单的实现一个横幅广告即Banner广告的展示,不过首先我们要来进行一个简单的知识讲解,下面我们介绍下几个我们要用到的知识点。
(1) PUBLISHER_ID 开发者ID :这个是在多盟申请的,具体操作,大家可以去多盟下载SDK后,会有帮助文档教大家如何申请,这里土豆就不赘述了。例如:"56OJyM1ouMGoaSnvCK"。
(2)InlinePP_ID 广告位ID :个是在多盟申请的,具体操作,大家可以去多盟下载SDK后,会有帮助文档教大家如何申请,这里土豆就不赘述了。例如:"16TLwebvAchksY6iO_8oSb-i"。
(3)RelativeLayout:要通过layout文件来定位广告位,可以在想要加广告视图的位置预留ViewGroup来作为广告的容器。其实也就是我们建立一个RelativeLayout来实现布局,这里大家可以参考下Mars老师的视频,我会在后面附上的。
(4)initializeForView() 方法:这个类要和 initialize()方法一起说明,其实这2个方法有共同之处,他们都可以直接创建一个游戏入口,但是initializeForView()方法不完成 setContentView方法,而initialize方法默认是完成的,所以这个方法就给我们提供了一个加入其它VIEW的机会,同样的在结束的时候我么要自己setContentView(layout),这样才能完成游戏入口的建立。这里可能需要了解一些安卓的基础开发,大家可以参考Mars老师的教程来理解。
参数:第一个要传入一个 ApplicationListener listener,第二个要传入一个布尔类型的变量,其实是选择是否用OPENGL 2.0一般选择false。
PS: 通过查看系统包,我们可以发现initialize()方法 比 initializeForView()多出了如下代码,这个代码就是包含了setContentView的一个结束方法,该方法默认给我们setContentView。
代码如下:
try {
requestWindowFeature(Window.FEATURE_NO_TITLE);
} catch (Exception ex) {
log("AndroidApplication", "Content already displayed, cannot request FEATURE_NO_TITLE", ex);
}
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
setContentView(graphics.getView(), createLayoutParams());
5.实例演示
以为我们测试代码都是在核心代码项目中修改,但是由于这次我们要在安卓项目中添加广告,所以这样我们就需要在android项目中编写代码。
(1)修改android项目中的AndroidManifest.xml文件,如上面讲解的,加入权限和声明。
如图:
(2)在 MainActivity类中修改代码,添加 DomobAdView 和 ID。
(3)创建游戏入口的VIEW,通过initializeForView实现。
如图:
(4)创建布局,同时将2个VIEW加入进去,一个游戏的VIEW 和 一个广告的VIEW。
如图:
6.完整代码
package com.potato;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;
import cn.domob.android.ads.DomobAdView;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
public class MainActivity extends AndroidApplication {
public static final String PUBLISHER_ID = "56OJyM1ouMGoaSnvCK";
public static final String InlinePPID = "16TLwebvAchksY6iO_8oSb-i";
DomobAdView MyAdview320x50;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
cfg.useGL20 = false;
View gameView = initializeForView(new MyGame(), false);
RelativeLayout layout = new RelativeLayout(this);
MyAdview320x50 = new DomobAdView(this, PUBLISHER_ID, InlinePPID,
DomobAdView.INLINE_SIZE_320X50);
layout.addView(gameView);
layout.addView(MyAdview320x50);
setContentView(layout);
}
}