此文章只讲Unity与Android核心交互代码
详细接入可参考小米广告 SDK Android 集成指南

小米广告常用有四种,1.开屏广告、2.Banner横幅广告、3.插屏广告、4.激励视频广告。
其中开屏广告无需代码调用,广告后台配置是否展示即可,所以本文讲述后面三种广告类型的调用过程。

Unity端调用广告SDK接口

using UnityEngine;
public class AndroidPlatformUtil : MonoBehaviour
{static AndroidPlatformUtil _instance;public static AndroidPlatformUtil instance{get{if (_instance == null){GameObject obj = new GameObject();Debug.Log("产生一个AndroidPlatformUtil");obj.name = "AndroidPlatformUtil";_instance = obj.AddComponent<AndroidPlatformUtil>();DontDestroyOnLoad(_instance.gameObject);}return _instance;}}public void Init(string config){Debug.LogError("手机初始化...");}/// <summary>/// Android主Player/// </summary>public const string S_MainPlayer = "com.unity3d.player.UnityPlayer";/// <summary>/// Android主Activity/// </summary>public const string S_MainAct = "currentActivity";private AndroidJavaObject javaObject = null;public void CallAD(string methodName){using (AndroidJavaClass jc = new AndroidJavaClass(S_MainPlayer)){using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>(S_MainAct)){javaObject = new AndroidJavaObject("com.game.mi.MainActivity");javaObject.Call(methodName, jo);}}}public void CallInitAd(){CallAD("Init");}public void CallBannerAd(){CallAD("CallBannerAd");}public void CallInterstialAd(){CallAD("CallInterstialAd");}public void CallVedioRewardAd(){CallAD("CallVedioRewardAd");}public void CallBackVedioRewardAd(string callBackArg){//激励视频广告回调,做奖励处理}

Android端调起广告方法
步骤一
1.Application中初始化广告SDK。
2.定义一个Handler,作用:使banner广告和插屏广告运行在游戏线程中,从而不会打断游戏正常运行。

package com.game.mi;import com.miui.zeus.mimo.sdk.MimoSdk;
import com.miui.zeus.mimo.sdk.api.IMimoSdkListener;
import android.Manifest;
import android.app.Application;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Handler;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.widget.Toast;
import com.game.mi.R;/*** 您可以参考本类中的代码来接入小米游戏广告SDK。在接入过程中,有如下事项需要注意:* 1.请将 APP_ID 值替换成您在小米开发者网站上申请的 AppID。*/
public class AdApplication extends Application {// 请注意,千万要把以下的 APP_ID 替换成您在小米开发者网站上申请的 AppID。否则,可能会影响你的应用广告收益。private static final String APP_ID = "广告后台申请的APPID";// 以下两个没有的话就按照以下传入private static final String APP_KEY = "fake_app_key";private static final String APP_TOKEN = "fake_app_token";//public static Handler handler;@Overridepublic void onCreate() {super.onCreate();handler = new Handler();// 如果担心sdk自升级会影响开发者自身app的稳定性可以关闭,// 但是这也意味着您必须得重新发版才能使用最新版本的sdk, 建议开启自升级// MimoSdk.setEnableUpdate(false);// 正式上线时候务必关闭stage和debug
//        MimoSdk.setDebugOn();
//        MimoSdk.setStageOn();// 如需要在本地预置插件,请在assets目录下添加mimo_asset.apk;MimoSdk.init(this, APP_ID, APP_KEY, APP_TOKEN, new IMimoSdkListener() {@Overridepublic void onSdkInitSuccess() {//                Toast.makeText(AdApplication.this, R.string.sdk_is_ready, Toast.LENGTH_LONG).show();}@Overridepublic void onSdkInitFailed() {//                Toast.makeText(AdApplication.this, R.string.sdk_is_failed, Toast.LENGTH_LONG).show();}});}}

步骤二
Android端提供给Unity的接口

package com.game.mi;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.KeyEvent;
import android.widget.Toast;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {private static MainActivity _instance;public static MainActivity instance(){if(null == _instance)_instance = new MainActivity();return _instance;}public Context context;//初始化权限public void Init(Object obj){_unityActivity= (Activity) obj; //游戏当前activitycontext=(Context) obj;// 如果api >= 23 需要显式申请权限if (Build.VERSION.SDK_INT >= 23) {if (ContextCompat.checkSelfPermission(context,Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(get_unityActivity(),new String[]{Manifest.permission.READ_PHONE_STATE}     , 0);}}}//banner广告public void CallBannerAd(Object obj){_unityActivity= (Activity) obj; context=(Context) obj;BannerActivity.instance().Show(get_unityActivity());}//插屏广告public void CallInterstialAd(Object obj){_unityActivity= (Activity) obj;context=(Context) obj;VerticalInterstitialActivity.instance().Show(get_unityActivity(),context);}//视频广告public void CallVedioRewardAd(Object obj){context=(Context) obj;Intent intent = new Intent(context, RewardVideoDemoActivity.class);context.startActivity(intent);}//游戏退出桌面关闭Bannerpublic void OnApplicationPause(Object obj){_unityActivity= (Activity) obj;context=(Context) obj;BannerActivity.instance().dismiss();}//Unity回调视频奖励public void CallBackVedioRewardAd(){UnityPlayer.UnitySendMessage("MobileController", "VedioReward","callback");}private Activity _unityActivity;Activity get_unityActivity() {if (null == _unityActivity) {try {Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");Activity activity = (Activity) classtype.getDeclaredField("currentActivity").get(classtype);_unityActivity = activity;} catch (ClassNotFoundException e) {} catch (IllegalAccessException e) {} catch (NoSuchFieldException e) {}}return _unityActivity;}@Overridepublic boolean dispatchKeyEvent(KeyEvent event) {return super.dispatchKeyEvent(event);}
}

步骤三
激励视频广告直接启动Activity即可完成广告请求,Banner广告和插屏广告需要特殊处理,让广告能够不影响游戏正常运行。

Banner广告
1.创建一个View,可以理解为用来装banner广告的一个容器。
2.WindowManager,可以理解为设置这个容器的参数,显示位置、长宽。
3.步骤一声明的handler在此处使用。

package com.game.mi;import android.app.Activity;
import android.graphics.PixelFormat;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.Toast;
import com.miui.zeus.mimo.sdk.ad.AdWorkerFactory;
import com.miui.zeus.mimo.sdk.ad.IAdWorker;
import com.miui.zeus.mimo.sdk.listener.MimoAdListener;
import com.xiaomi.ad.common.pojo.AdType;public class BannerActivity extends Activity {private static final String BANNER_POS_ID = "Banner广告位ID";private static BannerActivity _instance;public static BannerActivity instance(){if(null == _instance)_instance = new BannerActivity();return _instance;}IAdWorker mBannerAd;private  Activity activity;private WindowManager mWindowManager;private FrameLayout bannerContainer;private View mLayout;private boolean added;public void Show(Activity _activity) {if (added) return;activity=_activity;FrameLayout layout = new FrameLayout(activity);mLayout = layout;bannerContainer = layout;//获取WindowManagermWindowManager=activity.getWindowManager();final WindowManager.LayoutParams param = new WindowManager.LayoutParams();param.gravity = Gravity.BOTTOM | Gravity.CENTER;param.type = WindowManager.LayoutParams.TYPE_APPLICATION;param.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;param.alpha = 1.0f;param.width = WindowManager.LayoutParams.FILL_PARENT;param.height = 180;param.format = PixelFormat.RGBA_8888;AdApplication.handler.post(new Runnable() {public void run() {//创建出的广告view加入WindowManagermWindowManager.addView(mLayout, param);try{mBannerAd = AdWorkerFactory.getAdWorker(activity, bannerContainer, new MimoAdListener() {@Overridepublic void onAdPresent() {//                    Toast.makeText(activity, "Banner广告展示成功",//                            Toast.LENGTH_LONG).show();}@Overridepublic void onAdClick() {}@Overridepublic void onAdDismissed() {//                    Toast.makeText(activity, "Banner广告消失",//                            Toast.LENGTH_LONG).show();dismiss();}@Overridepublic void onAdFailed(String s) {//                    Toast.makeText(activity, "Banner广告加载失败:" + s,//                            Toast.LENGTH_LONG).show();dismiss();}@Overridepublic void onAdLoaded(int size) {//                    Toast.makeText(activity, "Banner广告加载成功",//                            Toast.LENGTH_LONG).show();}@Overridepublic void onStimulateSuccess() {}}, AdType.AD_BANNER);}catch (Exception e) {e.printStackTrace();}try {mBannerAd.loadAndShow(BANNER_POS_ID);added=true;} catch (Exception e) {e.printStackTrace();}}});}public void dismiss() {try {if (added) {mWindowManager.removeView(mLayout);added = false;}} catch (Exception e) {e.printStackTrace();}}@Overrideprotected void onDestroy() {try{super.onDestroy();dismiss();mBannerAd.recycle();}catch (Exception e) {}}
}

插屏广告
1.步骤一声明的handler在此处使用。

package com.game.mi;import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.ViewGroup;
import com.miui.zeus.mimo.sdk.ad.AdWorkerFactory;
import com.miui.zeus.mimo.sdk.ad.IAdWorker;
import com.miui.zeus.mimo.sdk.listener.MimoAdListener;
import com.xiaomi.ad.common.pojo.AdType;
import android.widget.Toast;public class VerticalInterstitialActivity extends Activity {public static final String TAG = "VerticalInterstitial";//以下的POSITION_ID 需要使用您申请的值替换下面内容private static final String POSITION_ID = "插屏广告位ID";private IAdWorker mAdWorker;private  Activity activity;private  Context context;private boolean added;private static VerticalInterstitialActivity _instance;public static VerticalInterstitialActivity instance(){if(null == _instance)_instance = new VerticalInterstitialActivity();return _instance;}public void Show(Activity _activity, Context _context) {if (added) return;activity = _activity;context=_context;AdApplication.handler.post(new Runnable() {public void run() {//在这里,mPlayBtn是作为一个锚点传入的,可以换成任意其他的view,比如getWindow().getDecorView()try {mAdWorker = AdWorkerFactory.getAdWorker(context, (ViewGroup) activity.getWindow().getDecorView(), new MimoAdListener() {@Overridepublic void onAdPresent() {Log.e(TAG, "onAdPresent");
//                            Toast.makeText(activity, "插屏广告展示成功",
//                                    Toast.LENGTH_LONG).show();}@Overridepublic void onAdClick() {Log.e(TAG, "onAdClick");}@Overridepublic void onAdDismissed() {Log.e(TAG, "onAdDismissed");dismiss();
//                            Toast.makeText(activity, "插屏广告消失",
//                                    Toast.LENGTH_LONG).show();}@Overridepublic void onAdFailed(String s) {Log.e(TAG, "onAdFailed");dismiss();
//                            Toast.makeText(activity, "插屏广告加载失败:" + s,
//                                    Toast.LENGTH_LONG).show();}@Overridepublic void onAdLoaded(int size) {//                            Toast.makeText(activity, "插屏广告加载成功",
//                                    Toast.LENGTH_LONG).show();Log.e(TAG, "ad loaded");ShowAd();}@Overridepublic void onStimulateSuccess() {}}, AdType.AD_INTERSTITIAL);} catch (Exception e) {e.printStackTrace();}try {if (!mAdWorker.isReady()) {mAdWorker.load(POSITION_ID);}}catch (Exception e){e.printStackTrace();}}});}public void ShowAd(){try {if (mAdWorker.isReady()) {mAdWorker.show();added=true;}}catch (Exception e){e.printStackTrace();}}public void dismiss() {try {if (added) {mAdWorker.recycle();added = false;}} catch (Exception e) {e.printStackTrace();}}@Overrideprotected void onDestroy() {try {super.onDestroy();dismiss();} catch (Exception e) {}}
}

Unity3D游戏接入小米广告SDK相关推荐

  1. air游戏接入小米支付sdk

    小米支付sdk要求在Application.onCreate中进行初始化 为了这个初始化搞了半天,终于搞定了,今天将更改的步骤记录下了. 1. 创建ANE,ANE的创建就不罗嗦了,这里需要注意一点,这 ...

  2. Unity接入Android广告: 三、Android端接入小米广告SDK

    1.导入小米广告SDK SDK在 小米开发者平台 中可以下载 导入MimoSdk.jar,右击jar包,Add As Library 在Module的AndroidManifest.xml中加入SDK ...

  3. Unity接入穿山甲广告SDK(以及GroMoreDemo)

    Unity接入穿山甲广告SDK(以及GroMoreDemo) 下载安装 穿山甲官网SDK下载链接(https://www.csjplatform.com/union/media/union/downl ...

  4. go语言 服务器接入小米支付SDK

    服务器需要接入小米支付, 但是官网只有java和php版本,因此签名解析需要自己写 实行步骤: 1. 用eclipse打开java版本支付用例,加入mainClass文件,代码如下: package ...

  5. Unity3D游戏开发之“Android SDK升级后不能打包问题”解决办法

    在我升级到最新的Android SDK用Unity打包出现了一下错误:"Error building Player: Win32Exception: ApplicationName='C:/ ...

  6. 无需上架,接入穿山甲广告和广点通广告 sdk

    我们都知道广告是商业流量变现最重要的方式之一,所以基本所有的游戏或者app都会接入广告sdk,而我们都知道穿山甲广告sdk和广点通广告sdk是国内收益相对比较高的,但是想接入穿山甲广告sdk,你的游戏 ...

  7. 解读广告SDK工作机制,保护App自身安全

    SDK,APP开发者应该都很了解,开发者们或多或少都接触或安装过,而提到SDK安全性这个问题,开发者们的情绪可能都不会平静,这其中的利害关系确实有点儿复杂. 一方面,SDK方便开发者产品设计,帮助开发 ...

  8. CocosCreator接入穿山甲广告(IOS)

    说明 接入穿山甲广告SDK 将Cocos Creator工程打包,在手机上运行,看能否正常运行游戏,保证游戏没有问题的前提下再引入SDK所需要的各种包 根据文档引入各种包,文档地址:https://p ...

  9. Unity游戏接入TypeSDK集成笔记

    前言: 这是一个unity小程序猿使用typesdk给公司项目接入各渠道游戏联运sdk的使用笔记,说是笔记是因为从接触这个聚合工具到接入项目中并且将项目上线到渠道(目前已上线oppo,huawei,a ...

最新文章

  1. 扎克伯格AR野心:下个十年,远程「闪现」,不出家门跑到朋友家聊天
  2. Android应用坐标系统全面详解
  3. AESNI/XData勒索病毒来袭 目前主要在乌克兰传播 它居然还能使用硬件加速加密过程...
  4. java整属取余数_js取整数、取余数的方法
  5. css,html走的坑:(1.2)
  6. elasticsearch 清理数据后硬盘不释放_电脑C盘正确的5种清理方法,你还不知道?学会后轻松释放20G空间...
  7. mean value coordinates
  8. windows 系统配置多网关win添加静态路由
  9. 超好用的两行java代码能获取几乎所有文件的contentType,返回前端能在浏览器上直接打开
  10. 下面不属于使用工具的潜在收益的是哪个_电子商务概论习题集
  11. HC(NH 2 ) 2 I (FAI) 甲脒氢碘酸盐 879643-71-7
  12. 概率论_证明_切比雪夫大数定律
  13. 国标GB28181摄像头直播视频流媒体服务器获取视频流失败问题分析
  14. 解决vue google无状态播放音频文件
  15. 百度高级搜索指令大全
  16. 血管内冲击波:冠状动脉钙化处理的技术革新
  17. [.net 面向对象编程基础] (20) LINQ使用
  18. ecshop文件结构
  19. webp学习http://isux.tencent.com/introduction-of-webp.html
  20. 热词解析(9) — hangry

热门文章

  1. TS中类的继承和类的重写
  2. Origin2023学习版安装教程
  3. 关于句子embedding的一些工作简介(三)---- Concatenated p-mean Word Embeddings
  4. python 之路,致那些年,我们依然没搞明白的编码
  5. 同时查询壹米滴答多个单号物流,并分析提前签收
  6. Python_p2_class
  7. 炫丽的朋友圈视频滚动播放功能
  8. 阿里acp认证考试考试时间、题型和分数都在这
  9. Mac系统-npm安装淘宝镜像
  10. QQ云控引流 为您定制营销推广方案