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


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

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



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


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

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


【步骤1 导入相关demo】

1自动更新&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,"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 植入广告(一) 百度横屏、插屏广告的更多相关文章

  1. ios – 当我在xCode 5中验证我的应用程序时,获取错误的广告标识符[IDFA]错误

    在验证我的应用程序时,我收到错误消息“广告标识符使用不当.您的应用包含广告标识符[IDFA]API,但您尚未遵守iOS中的限制广告跟踪设置.”我在广告标识符的准备上传页面上检查了“是”.我在我的应用程序中使用revmob广告和flurry分析(COCOS2D-X项目).如何解决这个问题,我已经尝试了很多但没有成功.我使用下面的代码进入appdelegate但没有运气.解决方法这个IDFA问题今天仍

  2. iOS上的自定义BLE广告

    有没有使用私有API或越狱的替代品?解决方法我对iOS的体验是,如果它没有在API中公开,除了越狱之外没有办法解决.对于蓝牙低功耗,API处于GAP/GATT级别,而较低级别暴露的则很少.广告是LL(链接层)功能.为了说明访问受限制的限制:扫描BLE设备时,您将无法访问广告商的MAC地址iOS.在Android中你有它.

  3. ios – 蓝牙LE,scanForPeripheralsWithServices在后台增加速度

    我在iPhone5S上使用蓝牙LE,我做了以下工作:>我有一个蓝牙外设,我配置它在所有三个蓝牙广告频道(37,38和39)上宣布每20秒.>我已经配置了我的应用程序与UIBacgroundModes=蓝牙中央在Info.plist>我已经启动了一个scanForperipheralsWithServices,如下所示码:目前的状态是:>在前台模式下,当我启动外围设备时(一秒钟内),应用程序会迅速收

  4. 2014年4月/ iOS 7 – 有没有办法跟踪iOS应用的转换,以便在不使用IDFA的情况下将内容下载到不同的广告系列来源?

    解决方法它现在似乎Apple特别允许使用IDFA跟踪安装.更新我的应用程序时,我看到:选择第二个选项没有出错,应用程序已获批准.

  5. 使用swift集成移动广告聚合平台

    OverridefuncviewDidLoad(){super.viewDidLoad()bannerView.adUnitId=“ca-app-pub-706657930853688714815911455”bannerView.rootViewController=selfself.view.addSubViewVarrequest:GADRequest=GADRequest()request.testDevices={“”}bannerView.loadRequest}Overridefuncdid

  6. 早期Swift中Cocos2D初始化代码的重构

    但是遗憾的是Swift2.2中还是不支持Type的class属性关键字,只能用static,我们期待Swift3的改进吧!

  7. 手把手教你swift项目添加cocos2dx-lua

    去倒杯水吧,这个过程会很久。。。至此,工程已经全部配置完毕,你已经解决一个大Boss了;今天就到这里吧,之后我们再续如何用swift调用lua手把手教你swift项目添加cocos2dx-lua

  8. 手把手教你swift项目集成cocos2dx-js模块

    前几天在swift项目中集成了Lua模块,使得在swift工程中用Lua写游戏逻辑成为了可能,具体工程及配置见手把手教你swift项目添加cocos2dx-lua,由于公司最近要把js做的小游戏集成到iOS原生应用中,于是我们将解锁另外一个场景,好了,下面开始;同样的,首先你得有一个swift项目我们从头开始,建立一个swift项目;我们默认你已经可以自己创建一个全新的swift项目了,这很简单,不是么?

  9. swift – 为什么我的facebook插页式广告不会显示在我的应用中?

    他们肯定也能在这里提供帮助.thispage之后的某个地方我相信你可以找到适当的现场支持作为付费广告客户.

  10. 设置Android隐私政策

    我在我的Android应用程序中使用AdMob.我是否需要在我的应用程序中创建隐私政策,以告知用户Google使用的Cookie?如果是,我需要把它放在哪里?我必须在GooglePlay上的说明中写出来吗?或者在第一次运行时我必须显示片段窗口吗?我阅读了Google文档,但我并不清楚.https://support.google.com/googleplay/android-developer/answer/2519872?hl=en解决方法澄清任何发现此问题的人:答案是肯定的,如果您使用的是AdMob,

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部