Unity3D使用腾讯广点通广告
发表于2018-04-28
目前,游戏开发平台有很多,本篇文章主要介绍Unity3d开发时如何给Android游戏加广点通广告。














1.下载广点通SDK
在 流量合作>我的媒体下>新建媒体 :即我们的APP

创建适合你游戏/app的广告位。广告位类型主要有:Banner(广告条)、插屏、开屏、应用墙,这个需要根据自己的游戏自行选择,如下图:

然后下载SDK:

2. 新建Android项目
2.1打开eclipse,新建一个android项目,如下图:

包名很重要,请务必改为自己游戏的包名,一般包名的格式为:
com.xxx.yyy
“xxx”一般指公司名简写或团队名,
“yyy”一般指项目代号,可以和项目名称(Application Name)不一样
2.2打开AndroidManifest.xml,拷贝以下内容到咱们新建项目的AndroidManifest.xml中:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <application android:allowBackup="true" android:icon="@drawable/icon" android:label="@string/app_name" > <!-- targetSdkVersion >=23 时引用support.v4--> <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.gdttest.gdt.fileprovider" <!-- 修改为自己的包名--> android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/gdt_file_path" /> </provider> <!-- 声明SDK所需要的组件 --> <service android:name="com.qq.e.comm.DownloadService" android:exported="false"/> <!-- 请开发者注意字母的大小写,ADActivity,而不是AdActivity --> <activity android:name="com.qq.e.ads.ADActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize"/> <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" <!--unity 以要设置为portrait,否则会闪退 --> android:configChanges="keyboard|orientation|keyboardHidden|screenSize|screenLayout" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
2.3 将广点通res文件下的xml文件拷贝到自己的项目包下:

2.4将广点通代码中的Constants.java文件拷贝到自己项目的包里面,将APPId与广告位Id分别替换成自己在广点通网站上申请的媒体Id和广告位Id,在测试的时候就用广点通Demo 的ID,自己申请的只有审核通过才会显示:
public class Constants { //public static final String APPID = "1101152570"; //测试用 //public static final String BannerPosID = "9079537218417626401"; //测试用 public static final String APPID = "自己的媒体Id"; public static final String BannerPosID = "自己的广告条Id"; }
2.5将广点通Demo代码中lib下的GDTUnionSDK.4.15.559.min.jar包,拷贝到自己项目的lib下。另外,还需要导入 Unity3d的classes.jar文件 ,该Jar文件可在 Unity3d安装目录/Editor/Data/PlaybackEngines/AndroidPlayer/Variations/mono or il2cpp/Development or Release/Classes 路径下找到,自己项目的lib下,如下图:

右键选中这两个包,选择Build Path–》Add to Build Path,将这两个包加到引用里,这样咱们的代码就可以加广点通的广告,以及与Unity3d通讯了。
2.6打开MainActivity.java,添加与Unity3d的通信接口,以及Unity3d调用广告的方法:
import com.qq.e.ads.banner.ADSize; import com.qq.e.ads.banner.AbstractBannerADListener; import com.qq.e.ads.banner.BannerView; import com.qq.e.comm.util.AdError; import com.unity3d.player.UnityPlayerActivity; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.WindowManager; public class MainActivity extends UnityPlayerActivity { private final static int SHOW_BANNER_AD = 103; private final static int HIDE_BANNER_AD = 105; private static Handler sHandler; private BannerView bannerAD; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initHandler(); } private void initHandler() { sHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SHOW_BANNER_AD: internalShowBannerAd(); break; case HIDE_BANNER_AD: internalHideBannerAd(); break; default: break; } } }; } private void internalShowBannerAd() { try{ this.bannerAD = new BannerView(this, ADSize.BANNER, Constants.APPID, Constants.BannerPosID); bannerAD.setRefresh(15); this.bannerAD.setADListener(new AbstractBannerADListener() { @Override public void onADReceiv() { // TODO Auto-generated method stub } @Override public void onNoAD(AdError error) { } } ); WindowManager mWindowManager = (WindowManager) MainActivity.this.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams mWmParams = new WindowManager.LayoutParams(); mWmParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; mWmParams.height = WindowManager.LayoutParams.WRAP_CONTENT; mWmParams.width = WindowManager.LayoutParams.WRAP_CONTENT; mWmParams.alpha = 1.0F; mWmParams.format = 1; mWmParams.gravity = Gravity.BOTTOM|Gravity.CENTER; mWindowManager.addView(bannerAD, mWmParams); bannerAD.loadAD(); }catch(Exception ex){ } } private void internalHideBannerAd() { if(bannerAD!=null) { bannerAD.destroy(); } } public void hideBannerAd() { sendMsgToHandler(HIDE_BANNER_AD); } public void showBannerAd() { sendMsgToHandler(SHOW_BANNER_AD); } private synchronized void sendMsgToHandler(int type) { Message msg = sHandler.obtainMessage(); msg.what = type; msg.sendToTarget(); } }
3.将Android项目作为资源导出
—-》先选中咱们的Android项目
—-》选择project–》Clean

—-》再选择project–》Build Project
(注意:做以上两步操作时,请取消掉Build Automatically的勾选状态)
—-》选择Window>Preferences>General>Wordspace ,修改Text file encoding 为UTF-8,如下图:

进入到咱们的Android项目目录下的bin/classes, 新建名称为BuildJar.txt文件,添加 jar cvf gdt.jar ./com ,保存后修改后缀名为。cmd格式的文件。删除BuildConfig.class和R开头的文件。
删除前:

删除后:

然后双击BuildJar.cmd文件,生成我们需要的Jar文件。

4.Unity3d导入Android项目资源

5.Unity3d调用Android项目资源实现广告
修改unity 配置:Package Name 修改为Android 包名

修改屏幕方向:

来自:https://blog.csdn.net/u010812661/article/details/79426153