用3.0实现飞机大战——接入万普广告

我们的游戏辛辛苦苦的写了一周,如果不赚点貌似对不起自己,但是这个项目只是作为练手的项目,学习的目的大于赚钱的目的(根本就没有赚钱的目的),更何况游戏的创意是人家的,我们只是copy过来学习一下。所以从各种角度来说,我们都应该加入第三方SDK,既可以用来学习一下第三方SDK的接入技巧,同时如果能上线也可以赚一点(只能呵呵了)。本篇博客我们就来接入一下万普的广告平台,广告平台有很多家,大家可以根据自己的喜好选择,对于各个广告平台的优劣我还不了解(留给以后学习了),希望了解的哥们留个言共同探讨一下。

1、首先去万普注册一个账号,登录后台填写应用的名称,主要是为了获取APP_ID,然后下载他的SDK,这个SDK就是他写的一些库供我们调用的,所以要根据平台下载对应的SDK,我们只在Android下接入,那就下载Android平台的SDK。在下载下来的文档中有一个他们自己的Demo和接入手册,我们可以通过他们的手册来接入广告,我使用手册的时候感觉歧义不断,而且针对的是2.x的版本,所以只好再研究研究了。

2、将我们的项目导入到eclipse中,注意这里有坑,Cocos-x-3.0以后我们还需要导入项目路径cocos2d\cocos\platform\android\java下的库,不会导入的查看它的文档,最后的效果是这样的,在工程视图处明显是有俩个项目。

3、接着我们就需要导入万普的SDK了,将Demo解压包中libs目录下的 AppOffer_2.1.1.jar 放入工程指定的 libs目录。将万普demo例子中src目录下的cn.waps.extend包放到我们的工程源码目录src下,最后的工程效果是这样的。

4、打开AndroidManifest.xml文件,按照文档要求添加它所需要的权限,AndroidManifest.xml截图如下。

5、做完了以上的初始化工作接下来我们就来写代码了,打开源码目录下的AppActivity.java文件,在3.0以后的Cocos目录下,这个文件只有一个类,里边的实现全部是空的,就连onCreate()函数也没有,既然没有我们就在这里添加onCreate()函数,在onCreate函数中完成广告接口的初始化和调用。

1 //用到的一些成员变量
2     private static Handler handler;
3     private static Context mContext;
4     private String app_id = "0171a39202ff2653c82f4d7ec4cde53a";
5  
6     protected void onCreate(Bundle savedInstanceState) {
7         //先调用父类的onCreate方法
8         super.onCreate(savedInstanceState);
9  
10         //给成员变量赋值
11         mContext = this;
12         handler = new AdHandler();
13  
14         initAds();
15     }
16  
17     public void initAds(){
18         //初始化广告
19         AppConnect.getInstance(app_id,"baidu",this);
20         // 预加载插屏广告内容(仅在使用到插屏广告的情况,才需要添加)
21         AppConnect.getInstance(this).initPopAd(this);
22         // 预加载自定义广告内容(仅在使用了自定义广告、抽屉广告或迷你广告的情况,才需要添加)
23         AppConnect.getInstance(this).initAdInfo();
24     }
25  
26     protected void onStop(){
27         //关闭广告
28         AppConnect.getInstance(this).close();
29     }

以上的代码是用来初始化广告的,学过java和Android的同学不需要我解释,只说涉及到广告的东西,在initAds()函数中我们完成了广告的初始化,其中app_id就是在友盟的后台获得的ID,而字符串"baidu"是app_pid,官方的说法是分发渠道的ID,关于各个渠道的ID请大家查看友盟提供的文档,我要在百度上线,所以这里的渠道写的就是百度。后俩句的代码说的很明白了,友盟提供给我们很多的广告类型,有些广告在使用的时候不需要我们预先加载,但是有些是不行的,比如插屏广告和迷你广告就必须先加载再调用,我用到了这俩种类型的广告,所以加载一下。最后在onStop里边关闭广告。这样的话整个广告的生命周期我们就理清楚了,接下来就是实现调用广告的接口了。

6、为了让大家看清楚整个类,我把整个activity都贴上来了,调用广告的接口是函数showAdStatic,里边传入一个广告类型的ID,然后根据这个广告类型ID会调用handleMessage方法,关于Android的内容我了解的不多,就不误导大家了,大家只要清楚你做修改的时候在handleMessage中就好了,这个函数中的代码很简单应该去看一下。这样的话Android部分的代码我们就完成了,接下来要做的事情就是在c++代码层使用jni来调用showAdStatic函数。

1 public class AppActivity extends Cocos2dxActivity implements UpdatePointsNotifier{
2  
3     //用到的一些成员变量
4     private static Handler handler;
5     private static Context mContext;
6     private String app_id = "0171a39202ff2653c82f4d7ec4cde53a";
7  
8     protected void onCreate(Bundle savedInstanceState) {
9         //先调用父类的onCreate方法
10         super.onCreate(savedInstanceState);
11  
12         //给成员变量赋值
13         mContext = this;
14         handler = new AdHandler();
15  
16         initAds();
17     }
18  
19     public void initAds(){
20         //初始化广告
21         AppConnect.getInstance(app_id,"baidu",this);
22         // 预加载插屏广告内容(仅在使用到插屏广告的情况,才需要添加)
23         AppConnect.getInstance(this).initPopAd(this);
24         // 预加载自定义广告内容(仅在使用了自定义广告、抽屉广告或迷你广告的情况,才需要添加)
25         AppConnect.getInstance(this).initAdInfo();
26     }
27  
28     protected void onStop(){
29         //关闭广告
30         AppConnect.getInstance(this).close();
31     }
32  
33     @Override
34     public void getUpdatePoints(String arg0, int arg1) {
35     }
36  
37     @Override
38     public void getUpdatePointsFailed(String arg0) {
39     }
40  
41     // 向handler发送要展示Banner的消息
42     public static void showAdStatic(int adTag) {
43         Message msg = handler.obtainMessage();
44         // 私有静态的整型变量,开发者请自行定义值
45         msg.what = adTag;
46         handler.sendMessage(msg);
47     }
48  
49     class AdHandler extends Handler{
50         public void handleMessage(Message msg) {
51             switch (msg.what){
52             case 0:
53                 // 显示推荐列表(综合)
54                 AppConnect.getInstance(mContext).showOffers(mContext);
55                 break;
56             case 1:
57                 // 显示插屏广告
58                 // 判断插屏广告是否已初始化完成,用于确定是否能成功调用插屏广告
59                 boolean hasPopAd = AppConnect.getInstance(mContext).hasPopAd(mContext);
60                 if (hasPopAd) {
61                     AppConnect.getInstance(mContext).showPopAd(mContext);
62                 }
63                 break;
64             case 2:
65                 // 显示推荐列表(软件)
66                 AppConnect.getInstance(mContext).showAppOffers(mContext);
67                 break;
68             case 3:
69                 // 显示推荐列表(游戏)
70                 AppConnect.getInstance(mContext).showGameOffers(mContext);
71                 break;
72             case 4:
73                 // 获取全部自定义广告数据
74                 break;
75             case 5:
76                 // 获取一条自定义广告数据
77                 AdInfo adInfo = AppConnect.getInstance(mContext).getAdInfo();
78                 AppDetail.getInstanct().showAdDetail(mContext, adInfo); break;
79             case 6:
80                 // 消费虚拟货币.
81                 AppConnect.getInstance(mContext).spendPoints(10,AppActivity.this);
82                 break;
83             case 7:
84                 // 奖励虚拟货币
85                 AppConnect.getInstance(mContext).awardPoints(10,AppActivity.this);
86                 break;
87             case 8:
88                 // 显示自家应用列表
89                 AppConnect.getInstance(mContext).showMore(mContext);
90                 break;
91             case 9:
92                 // 根据指定的应用app_id展示其详情
93                 AppConnect.getInstance(mContext).showMore(mContext,app_id);
94                 break;
95             case 10:
96                 // 调用功能广告接口(使用浏览器接口)
97                 String uriStr = "http://www.baidu.com"; AppConnect.getInstance(mContext).showBrowser(mContext,uriStr);
98                 break;
99             case 11:
100                 // 用户反馈
101                 AppConnect.getInstance(mContext).showFeedback(mContext);
102                 break;
103             case 12:
104                 // 退屏广告
105                 QuitPopAd.getInstance().show(mContext);
106                 break;
107             case 13:
108                 // banner
109                 AppConnect.getInstance(mContext).showBannerAd(mContext,getBannerAd());
110                 break;
111             case 14:
112                 // 迷你广告
113                 AppConnect.getInstance(mContext).showMiniAd(mContext,getMiniAd(), 10);
114                 break;
115             }
116         }
117  
118         //添加互动广告
119         private LinearLayout getBannerAd(){
120             // 互动广告
121             LinearLayout adBannerLayout = new LinearLayout(mContext);
122             adBannerLayout.setOrientation(LinearLayout.VERTICAL);
123             FrameLayout.LayoutParams lp_banner = new FrameLayout.LayoutParams(
124             FrameLayout.LayoutParams.FILL_PARENT,
125             FrameLayout.LayoutParams.WRAP_CONTENT);
126             // 设置adBannerLayout的悬浮位置,具体的位置开发者根据需要设置
127             lp_banner.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
128             AppActivity.this.addContentView(adBannerLayout, lp_banner);
129  
130             LinearLayout bannerLayout = new LinearLayout(mContext);
131             adBannerLayout.addView(bannerLayout);
132  
133             return bannerLayout;
134         }
135  
136         //添加迷你广告
137         private LinearLayout getMiniAd(){
138             LinearLayout adMiniLayout = new LinearLayout(mContext);
139             adMiniLayout.setOrientation(LinearLayout.VERTICAL);
140             FrameLayout.LayoutParams lp_mini = new FrameLayout.LayoutParams(
141             FrameLayout.LayoutParams.FILL_PARENT,
142             FrameLayout.LayoutParams.WRAP_CONTENT);
143             // 设置adMiniLayout的悬浮位置,具体的位置开发者根据需要设置
144             lp_mini.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
145             AppActivity.this.addContentView(adMiniLayout, lp_mini);
146             LinearLayout miniLayout = new LinearLayout(mContext);

你可能感兴趣的:(SDK)