SDK在 小米开发者平台 中可以下载
导入MimoSdk.jar,右击jar包,Add As Library
在Module的AndroidManifest.xml中加入SDK demo 中的相应权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.testaar" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> </manifest>
导入Assets中的apk文件
package com.test.testaar; import android.app.Activity; import android.view.Gravity; import android.view.ViewGroup; import android.widget.FrameLayout; import com.miui.zeus.mimo.sdk.MimoSdk; 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 java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class AdsTest { // 请注意,千万要把以下的 APP_ID 替换成您在小米开发者网站上申请的 AppID。否则,可能会影响你的应用广告收益。 private static final String APP_ID = "2882303761517411490"; // 以下两个没有的话就按照以下传入 private static final String APP_KEY = "fake_app_key"; private static final String APP_TOKEN = "fake_app_token"; private Activity _unityActivity; /** * 获取unity项目的上下文 * @return */ Activity getActivity(){ 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 ignored) { } } return _unityActivity; } static boolean callUnity(String gameObjectName, String functionName, String args){ try { Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer"); Method method =classtype.getMethod("UnitySendMessage", String.class,String.class,String.class); method.invoke(classtype,gameObjectName,functionName,args); return true; } catch (ClassNotFoundException e) { } catch (NoSuchMethodException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } return false; } public void Init(){ getActivity().runOnUiThread(new Runnable() { @Override public void run() { callUnity("Main Camera","FromAndroid", " android Init "); MimoSdk.setDebugOn(); // 正式上线时候务必关闭stage MimoSdk.setStageOn(); // 如需预置插件请在assets目录下添加mimo_assets.apk MimoSdk.init(getActivity().getApplicationContext(), APP_ID, APP_KEY, APP_TOKEN); // 如果api >= 23 需要显式申请权限 // if (Build.VERSION.SDK_INT >= 23) { // if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED // || ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED // || ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) { // ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, // Manifest.permission.READ_PHONE_STATE, Manifest.permission.INTERNET}, 0); // } // } } }); } public void ShowBanner(){ callUnity("Main Camera","FromAndroid", "ShowBanner"); getActivity().runOnUiThread(new Runnable() { @Override public void run() { FrameLayout layout = new FrameLayout(getActivity()); FrameLayout.LayoutParams frameLayout = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); frameLayout.gravity=Gravity.BOTTOM|Gravity.CENTER; getActivity().addContentView(layout, frameLayout);//显示布局管理器 try { MimoAdListener listener = new MimoAdListener() { @Override public void onAdPresent() { } @Override public void onAdClick() { } @Override public void onAdDismissed() { } @Override public void onAdFailed(String s) { callUnity("Main Camera","FromAndroid", "onAdFailed"); } @Override public void onAdLoaded(int i) { callUnity("Main Camera","FromAndroid", "onAdLoaded"); } @Override public void onStimulateSuccess() { } }; IAdWorker mBannerAd = AdWorkerFactory.getAdWorker(getActivity(), layout, listener, AdType.AD_BANNER ); mBannerAd.loadAndShow("802e356f1726f9ff39c69308bfd6f06a"); } catch (Exception e) { e.printStackTrace(); } } }); } }
using UnityEngine; using UnityEngine.UI; public class Test : MonoBehaviour { public Text m_TextLog; private AndroidJavaObject _ajoAds = null; private void Start() { _ajoAds = new AndroidJavaObject("com.test.testaar.AdsTest"); _ajoAds.Call("Init"); AddText("Init Ads"); } public void OnBannerClick() { _ajoAds.Call("ShowBanner"); AddText("OnBannerClick"); } //接收Android 发过来的消息 public void FromAndroid(string content) { AddText(content); } private void AddText(string content) { m_TextLog.text += content + " -->> "; Debug.Log(content); } }
创建一个Button 用于显示广告
这样 Banner 广告就可以显示出来了, 其他类型的广告,按照sdk demo中的实例,也同样可以显示出来
Unity版本: 2018.2.0
AndroidStudio版本:3.2
参考文章链接:
1.Unity与Android交互方案优化版
2.小米广告接入unity MimoSdk
3.Unity直接调用Android Native Code