cocos2d-x 植入广告(一) 百度横屏、插屏广告

原创 2015年11月17日 21:13:49

        今天尝试了一下 有米、芒果 平台的广告植入,觉得和之前植入百度平台广告的方式不太一样。回想自己在这上面也算是花费了不少时间,现在就把植入广告的过程记录下来,算是对植入广告方式的总结。


【准备工作】
1.首先要将应用上传到百度开发者平台,因为后面要用到 API KEY 和  APP ID。

2.下载SDK包(需要集成什么服务就勾选什么),这里我勾选了 广告联盟 和 自动更新



解释下,之前没有集成自动更新功能,结果提交之后没能审核通过。。。。所以,就把自动更新也下载下来了。


【阅读开发手册、查看demo】

因为百度只提供了Android的demo,所以使用cocos2d-x植入广告还是挺麻烦的。正因为这样,一定要好好阅读开发手册和demo。好了,不废话了,开工!!!


【步骤1 导入相关demo】

自动更新&APPX  (之后会通过这个demo来完成自己的广告植入代码)



 2  BDIntegrationSDK_LibProject    这个是将来要引用的



导入之后,将IsLibrary 项目 打勾




3.为自己的工程引入 BDIntegrationSDK_LibProject


具体的方式可参考 百度提供的开发手册,篇幅有限,这里就不一一上图了。


【步骤2 设置APPID 和 APPKEY 以及其他配置】

集成不同的功能需要获得不同的权限,这里,我只集成了自动更新&APPX ,在自己项目的AndroidManifest.xml中做如下配置

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.richard.SouthChinaSeaWar" 	 <!-- 我的包名 -->
      android:versionCode="2"
      android:versionName="2.0"
      android:installLocation="auto">

    <uses-sdk android:minSdkVersion="9"/>
    <uses-feature android:glEsVersion="0x00020000" />
    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

    <application android:label="@string/app_name"
                 android:icon="@drawable/icon">
					 
        <!-- Tell Cocos2dxActivity the name of our .so -->
        <meta-data android:name="android.app.lib_name"
	              android:value="cocos2dcpp" />
        
	<!-- BDAPPID 和 BDAPPKEY 一定要换成自己的 --> 
        <meta-data android:name="BDAPPID" android:value="7071438"/>
        <meta-data android:name="BDAPPKEY" android:value="IcdAOe74YsFWW7wGpau4C6dbb7Zya7nT"/>

        <activity android:name="org.cocos2dx.cpp.AppActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:configChanges="orientation">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
         <!-- 移动云AppX SDK -->
        <activity android:name="com.baidu.appx.ui.BDInnerBrowser" />

        <receiver android:name="com.baidu.appx.app_download.CompleteReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
                <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />

                <data android:scheme="package" />
                <!-- 注意!! 这句必须要加,否则接收不到安装完成广播 -->
            </intent-filter>
        </receiver>
        
        <!-- 自动更新SDK -->
           <activity android:name="com.baidu.autoupdatesdk.ConfirmDialoigActivity"
            android:screenOrientation="sensor"
            android:exported="false"
            android:theme="@style/bdp_update_dialog_style_fullscreen" />
        
        <receiver android:name="com.baidu.autoupdatesdk.receiver.BDBroadcastReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="com.baidu.autoupdatesdk.ACTION_NEW_UPDATE"/>
                <action android:name="com.baidu.autoupdatesdk.ACTION_DOWNLOAD_COMPLETE"/>
                <action android:name="com.baidu.autoupdatesdk.ACTION_NEW_AS"/>
                <action android:name="com.baidu.autoupdatesdk.ACTION_AS_DOWNLOAD_COMPLETE"/>
            </intent-filter>
        </receiver>
        
    </application>

    <supports-screens android:anyDensity="true"
                      android:smallScreens="true"
                      android:normalScreens="true"
                      android:largeScreens="true"
                      android:xlargeScreens="true"/>

    <uses-permission android:name="android.permission.INTERNET"/>
    
     <!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> -->
    <!-- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> -->
</manifest> 



说个比较BT的事儿,在配置好 之后,有个地方一直报错
 <!-- 自动更新SDK -->
           <activity android:name="com.baidu.autoupdatesdk.ConfirmDialoigActivity"
            android:screenOrientation="sensor"
            android:exported="false"
            android:theme="@style/<u>bdp_update_dialog_style_fullscreen</u>" />


没错!就是加了下划线的部分。在styles.xml里面加了以下内容之后OK了

<style name="bdp_update_dialog_style" parent="android:Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item> 
        <item name="android:windowNoTitle">true</item><!--除去title-->
        <item name="android:windowContentOverlay">@null</item> 
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>
    
    <style name="bdp_update_dialog_style_fullscreen" parent="@style/bdp_update_dialog_style">
        <item name="android:windowFullscreen">true</item>
    </style>

注意,包名,APPID 和 APPKEY一定要设成自己的


【步骤3 引入相关jar,并完成java代码】

1.把BDIntegrationSDK_LibProject目录下的libs文件夹中的4个jar文件引入自己项目的libs文件夹中(直接拉过来就好了)



2.接下来完成java部分的代码

当前自己项目的src目录下只有一个AppActivity.java文件,并且里面没什么内容。。。好了,我们再添加一个文件,姑且命名为ShowAdHelper.java,这两个文件是我参考 自动更新&APPX  这个demo写的,比较乱,不过能用(*^__^*)  


下面就是这两个文件的内容


AppActivity.java

/****************************************************************************
Copyright (c) 2008-2010 Ricardo Quesada
Copyright (c) 2010-2012 cocos2d-x.org
Copyright (c) 2011      Zynga Inc.
Copyright (c) 2013-2014 Chukong Technologies Inc.
 
http://www.cocos2d-x.org

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
package org.cocos2dx.cpp;

import org.cocos2dx.lib.Cocos2dxActivity;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.RelativeLayout;

import com.baidu.appx.BDBannerAd;
import com.baidu.appx.BDInterstitialAd;
import com.baidu.appx.BDBannerAd.BannerAdListener;
import com.baidu.appx.BDInterstitialAd.InterstitialAdListener;
import com.baidu.autoupdatesdk.BDAutoUpdateSDK;
import com.baidu.autoupdatesdk.UICheckUpdateCallback;

public class AppActivity extends Cocos2dxActivity {
	private static String TAG = "AppX_Interstitial";
	
	private static String TAG1 = "AppX_BannerAd";

	static BDBannerAd bannerAdView;
	BDInterstitialAd appxInterstitialAdView;
	
	private ProgressDialog dialog;
	
	//插屏广告
	public BDInterstitialAd getAd1(){
		final BDInterstitialAd appxInterstitialAdView1 = new BDInterstitialAd(this,
				"IcdAOe74YsFWW7wGpau4C6dbb7Zya7nT", "4sw7cIpn9nBuwSX19wm8Ti6S");

		// 设置插屏广告行为监听器
		appxInterstitialAdView1.setAdListener(new InterstitialAdListener() {

			@Override
			public void onAdvertisementDataDidLoadFailure() {
				Log.e(TAG, "load failure");
				appxInterstitialAdView=getAd1();
			}

			@Override
			public void onAdvertisementDataDidLoadSuccess() {
				Log.e(TAG, "load success");
			}

			@Override
			public void onAdvertisementViewDidClick() {
				Log.e(TAG, "on click");
			}

			@Override
			public void onAdvertisementViewDidHide() {
				Log.e(TAG, "on hide");
			}

			@Override
			public void onAdvertisementViewDidShow() {
				Log.e(TAG, "on show");
			}

			@Override
			public void onAdvertisementViewWillStartNewIntent() {
				Log.e(TAG, "leave");
			}

		});

		// 加载广告
		appxInterstitialAdView1.loadAd();
		return appxInterstitialAdView1;
	   }
	
	
	public void getAd2(){
		bannerAdView = new BDBannerAd(this, "IcdAOe74YsFWW7wGpau4C6dbb7Zya7nT",
				"SvCiMQ1tehVx0hD6n94bTEhZ");

		// 设置横幅广告展示尺寸,如不设置,默认为SIZE_FLEXIBLE;
		bannerAdView.setAdSize(BDBannerAd.SIZE_FLEXIBLE);

		// 设置横幅广告行为监听器
		bannerAdView.setAdListener(new BannerAdListener() {

			@Override
			public void onAdvertisementDataDidLoadFailure() {
				Log.e(TAG1, "load failure");
			}

			@Override
			public void onAdvertisementDataDidLoadSuccess() {
				Log.e(TAG1, "load success");
			}

			@Override
			public void onAdvertisementViewDidClick() {
				Log.e(TAG1, "on click");
			}

			@Override
			public void onAdvertisementViewDidShow() {
				Log.e(TAG1, "on show");
			}

			@Override
			public void onAdvertisementViewWillStartNewIntent() {
				Log.e(TAG1, "leave app");
			}
		});
		
		RelativeLayout appxBannerContainer = new RelativeLayout(this);
		RelativeLayout.LayoutParams parentLayputParams = new RelativeLayout.LayoutParams(
		RelativeLayout.LayoutParams.MATCH_PARENT,
		RelativeLayout.LayoutParams.WRAP_CONTENT);

		this.addContentView(bannerAdView, parentLayputParams);
	   }
	
	private Handler aHandler = new Handler()
	   {
	   	@Override
	       public void handleMessage(Message msg) {
	   		switch(msg.what)
	   	    {
	   		case 1:	//插屏广告
	   				if(appxInterstitialAdView.isLoaded()){
	   					appxInterstitialAdView.showAd();
	   					Log.d("LC","show");
	   				}else{
	   					appxInterstitialAdView.loadAd();
	   				}
	   				Log.d("LC","not show");
	   			break;
	   		case 2:	//banner广告
	   			getAd2();
   				Log.d("banner","show");
   			break;
	   		case 3:	//banner广告删除
	   			if(bannerAdView!=null){
	   				bannerAdView.destroy();
	   			}
   			break;
	   		case 4:	//自动更新
	   			myUpdate();
   			break;
	   	    }
	   	}
	   };
	   
		
	   
   public void myUpdate() {
	   dialog.show();
	   BDAutoUpdateSDK.uiUpdateAction(this, new MyUICheckUpdateCallback());
	   Log.e("Game Update", "myUpdate success");
	}   
   
   
	
	private class MyUICheckUpdateCallback implements UICheckUpdateCallback {

		@Override
		public void onCheckComplete() {
			dialog.dismiss();
		}

	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		appxInterstitialAdView=getAd1();
		
		dialog = new ProgressDialog(this);
		dialog.setIndeterminate(true);
		
		ShowAdHelper.init(aHandler);  
	}
}



ShowAdHelper.java

package org.cocos2dx.cpp;

import android.os.Handler;
import android.os.Message;

public class ShowAdHelper {
	private static Handler mHandler;
	
	public static void init(Handler handler)
	{
		ShowAdHelper.mHandler = handler;
	}
	
	public static void showMyAd(int adTag)
	{
		Message msg = mHandler.obtainMessage();
		msg.what = adTag;
		msg.sendToTarget();
	}
}

Java 部分的工作到这里就结束了,百度提供的demo主要是用于Android的,所以cocos2d-x的话,就必须多一个文件ShowAdHelper.java方便C++通过jni调用AppActivity.java中的内容


【步骤4  C++层的代码】

到这里就比较简单了,建议新建一个类(这里建AdHelp.h 和 AdHelp.cpp),通过一些static函数来调用广告的显示、关闭。


cocos官方文档对 jni 以及C++通过jni调用Java代码都有介绍,有兴趣深入了解的可查看官网文档


AdHelp.h 

#ifndef __AdHelp__H__
#define __AdHelp__H__

#include <cocos2d.h>
using namespace cocos2d;

#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include "platform/android/jni/JniHelper.h"
#include <jni.h>

#endif

class AdHelp
{
public:
	AdHelp();
	virtual ~AdHelp();
	//通过JNI调用JAVA静态函数,实现展示AD
	static void showAd(int adTag);

};

#endif



AdHelp.cpp
#include "AdHelp.h"

AdHelp::AdHelp()
{

}

AdHelp::~AdHelp()
{

}

void AdHelp::showAd(int adTag)
{

	//判断当前是否为Android平台 JniMethodInfo showAd;
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
	JniMethodInfo minfo;
	bool isHave = JniHelper::getStaticMethodInfo(minfo, "org/cocos2dx/cpp/ShowAdHelper", "showMyAd", "(I)V");
	if (!isHave)
	{
		CCLog("jni:showAdStatic is null");
	}
	else
	{
		//调用此函数
		minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, adTag);
	}
#endif
}



然后在合适的地方调用AdHelp::showAd(2)即可显示横屏广告,其他操作类似。


【步骤5  完工,看一下成果】

横屏广告                                                                       插屏广告

                                


植入广告之后再次上传

百度手机助手 

91助手






版权声明:本文为博主原创文章,未经博主允许不得转载。

cocos2d-x 植入广告(二) 有米横屏、插屏广告和积分墙广告

相比于百度广告的SDK,有米广告的植入就很简单了,因为有米提供的有cocos2d-x的demo,基本上就是看着文档的流程,照着demo写自己的代码。 【申请发布ID和应用密钥,下载SDK】 1.上...

Cocos2d-x 3.X, IOS版添加广点通广告平台

苹果自己的广告平台iAD在中国不好使,获取不到广告,所以必须搞个本土广告平台。首先想到的是广点通。可是广点通官方文档里没有针对Cocos2d-x的版本,所以只好自己摸索。在添加过程中确实遇到了不少问题...

Andriod中插入百度广告的使用

对于广告平台来说,腾讯和百度应用的还是很多的,下面来介绍一下应用中插入百度广告的使用。首先要先到百度广告平台下载相关sdk文档和Demo。 1)把架包导入工程中,如图所示 2)添加...

java中对象的软引用,SoftReference的使用

运行java程序时,有时为了提高访问速度会将某些对象存放在内存中。但是在内存吃紧的时候我们往往需要释放一些长期没有用的对象来得到更多的内存空间。 java中给我们提供了软引用这个类java.lang...

在cocos2d-x中如何嵌入百度的插屏广告

DEMO下载:http://download.csdn.net/detail/oyangyufu/7652803  演示的效果请看这里:http://pan.baidu.com/s/1o6oit9w...

Cocos2d-x 游戏中嵌入广告(百度插屏)

1、声明Activity   2、在主Activity类中,初始广告对象 interAd=new Interstiti...

cocos2d-x 3.0 final 在android 中添加多盟插屏广告

效果如下
  • leelyn
  • leelyn
  • 2014年07月02日 14:14
  • 944

Cocos2d-x2.2使用Admob插屏广告教程(一):iOS篇

1、版本 Cocos2d-x 2.2   GoogleAdMobAdsSdkiOS-6.5.1 2、导入 2.1导入头文件和.a文件 并在Librabry Sea...
  • SoulHao
  • SoulHao
  • 2014年04月18日 11:18
  • 7300

cocos2d-x在android下添加插屏广告 (转)

最近完成了自己的一个小项目,理所当然地准备在应用里加些广告……不幸的是,我想要加的有着良好用户体验的插屏广告在cocos2d-x开发的android游戏下支持并不是很好,支持好的填充率估计又跟不上。多...
  • hhy018
  • hhy018
  • 2014年02月24日 15:16
  • 905

【iOS篇】Cocos2d-x2.2使用Admob插屏广告教程(一)

1、版本 Cocos2d-x 2.2   GoogleAdMobAdsSdkiOS-6.5.1 2、导入 2.1导入头文件和.a文件 并在Librabry Sea...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2d-x 植入广告(一) 百度横屏、插屏广告
举报原因:
原因补充:

(最多只允许输入30个字)