Unity3D使用腾讯广点通广告

Unity3D 专栏收录该内容
2 篇文章 0 订阅

目前,游戏开发平台有很多,今天咱们主要介绍Unity3d开发的Android游戏加广点通广告。

1. 下载广点通SDK

    广点通网址:http://e.qq.com/dev/index.html

在 流量合作>我的媒体下>新建媒体 :即我们的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项目资源实现广告

using UnityEngine;
public class GDTAd : MonoBehaviour {
    AndroidJavaClass mAndroidJavaClass;
    AndroidJavaObject mAndroidJavaObject;
    void Start()
    {
        try
        {
            mAndroidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            mAndroidJavaObject = mAndroidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");
            mAndroidJavaObject.Call("showBannerAd");
        }
        catch (Exception ex)
        {
        }
    }
}

修改unity 配置:Package Name 修改为Android 包名

这里写图片描述

修改屏幕方向:

这里写图片描述

迷失者的路已上传谷歌,欢迎下载试玩。
http://lostway.bmob.site/
这里写图片描述

  • 1
    点赞
  • 0
    评论
  • 5
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

沐涩

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值