小米广告接入unity MimoSdk

小米广告接入MimoSdk

  • **前几天接个小米的广告sdk,发现之前打jar包的一些方法有些过时了,打不了了,所以在这里重新写一篇博客记录一下接入过程中出现的一些问题,和整个接入的过程,没接过的可以看看 接入使用unity+Androids tudio

  • 这里使用的是 导出Jar包 + 扩展MainActivity + Java主导
    注:官方已经不再推荐这种方法。

准备工作

1.将接入所需要的appid,sdk,横幅id,开屏id 等准备好 (没有appid也可以,因为小米提供了测试用的appid,横幅等一系列测试id)
2.准备好Android和unity,,因为我打jar使用的是Androidstudio 我这里用的20174.7f1

##开始接入
1、打开Android Studio新建一个项目,新建一个Library模块(Module),取名随意。注意选择最小SDK16,因为Unity最小支持的是16。
如果有不会建立Library module的 可以参考我写的一篇 android Studio打Jar包的帖子,里面有详细的图片说明

2、进入Unity的安装目录(如D:\Unity 5.4.3f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下)复制classes.jar文件,粘贴到该模块UnityAndroidLibrary/libs目录下。右键该jar选择Add as Library,选Add to Module UnityAndroidLibrary。
然后按照要求将 位于libs目录下 MimoSdk.jar : Sdk的jar包也用同样的方法拷贝到libs下右键该jar选择Add as Library,选Add to Module UnityAndroidLibrary。

3、打开你的library下的build.gradle 将如下代码复制过去然后点击右上角的 Sync Now 按钮等待执行完毕

//需要自己添加的
//task to delete the old jar
task deleteOldJar(type: Delete) {
    delete 'release/AndroidPlugin.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
    from('build/intermediates/packaged-classes/release/') //从这个目录下取出默认jar包
    into('release/')
    include('classes.jar')
    ///Rename the jar
    rename('classes.jar', 'AndroidPlugin.jar')
}

exportJar.dependsOn(deleteOldJar, build)

3、接下来开始写方法了 在java里面开始写方法 一共需要两个类 这里直接将类贴出来了,方法是按sdk内的demo中的方法改的

package com.huanlebolibei.mi;

import android.app.Application;

import com.miui.zeus.mimo.sdk.MimoSdk;

public class MyApplication extends Application {
    // 请注意,千万要把以下的 APP_ID 替换成您在小米开发者网站上申请的 AppID。否则,可能会影响你的应用广告收益。
    private static final String APP_ID = Constants.APP_ID;
    // 以下两个没有的话就按照以下传入
    private static final String APP_KEY = "fake_app_key";
    private static final String APP_TOKEN = "fake_app_token";
    @Override
    public void onCreate() {
        super.onCreate();
        // 如果担心sdk自升级会影响开发者自身app的稳定性可以关闭,
        // 但是这也意味着您必须得重新发版才能使用最新版本的sdk, 建议开启自升级
        MimoSdk.setEnableUpdate(true);
        MimoSdk.init(this, APP_ID, APP_KEY, APP_TOKEN);

    }
}

package com.huanlebolibei.mi;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
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.ad.IVideoAdWorker;
import com.miui.zeus.mimo.sdk.listener.MimoAdListener;
import com.miui.zeus.mimo.sdk.listener.MimoVideoListener;
import com.unity3d.player.UnityPlayerActivity;
import com.xiaomi.ad.common.pojo.AdType;


public class MainActivity extends UnityPlayerActivity {

    private static final String BANNER_POS_ID = Constants.BANNER_POS_ID;
    IAdWorker mBannerAd;
    public static String TAG = "MiSdk";

    private static final String INTERS_POS_ID =  Constants.POSITION_ID;
    private static IAdWorker mInterstitialAd;
    public static String INTERTAG = "MiSdk";



    private boolean reLoadBanner;
    private boolean reLoadInter;

    private static final int MSG_REQUEST_INTERAD	    = 111;
    private static final int MSG_REQUEST_BANNERAD	= 112;
    private static final int MSG_SHOW_INTERS_AD		= 113;
    private static final int MSG_SHOW_VIDEO_AD		= 114;

    static Handler mHandler = new Handler(){
        public void handleMessage(Message msg) {
            MainActivity obj = new MainActivity();
            switch(msg.what){
                case MSG_SHOW_INTERS_AD:
                    handleShowMiIntersAd();
                    break;

                case MSG_REQUEST_BANNERAD:

                    obj.handleRequestBannerAds();
                    break;
                case MSG_REQUEST_INTERAD:
                    obj.handleRequestInterAds();
                    break;
                default:
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        reLoadBanner = false;
        reLoadInter = false;

        while ( !MimoSdk.isSdkReady()){

        }

        requestInterAd();
        //MainActivity.requestVideoAd();
        requestBannerAd();

    }



    public void reLoadBannerAd(){

        Message msg = Message.obtain();
        msg.what = MSG_REQUEST_BANNERAD;
        MainActivity.mHandler.sendMessage(msg);

    }

    public void handleRequestBannerAds(){

        requestBannerAd();

    }


    public void reLoadInterAd(){

        Message msg = Message.obtain();
        msg.what = MSG_REQUEST_INTERAD;
        MainActivity.mHandler.sendMessage(msg);

    }

    public void handleRequestInterAds(){

        requestInterAd();

    }

    public void requestInterAd(){

        //Inters Ad----------------------------------------------------------------------
        /* 2.showInterstitialAd的调用和requestInterstitialAd 要配对。不能调用一次requestInterstitialAd之后,多次调用showInterstitialAd
         */
        Log.e(TAG, "request Inter");

        try {
            mInterstitialAd = AdWorkerFactory.getAdWorker(this, (ViewGroup) getWindow().getDecorView(), new MimoAdListener() {
                @Override
                public void onAdPresent() {
                    Log.e(TAG, "Inter onAdPresent");
                }

                @Override
                public void onAdClick() {
                    Log.e(TAG, "Inter onAdClick");
                }

                @Override
                public void onAdDismissed() {
                    Log.e(TAG, "Inter onAdDismissed");

                    try{
                        mInterstitialAd.load(INTERS_POS_ID);

                    }catch (Exception e) {

                    }
                }

                @Override
                public void onAdFailed(String s) {
                    Log.e(TAG, "Inter onAdFailed " + s);
                }

                @Override
                public void onAdLoaded(int size) {
                    Log.e(TAG, "Inter  ad loaded");
                }

                @Override
                public void onStimulateSuccess() {
                }
            }, AdType.AD_INTERSTITIAL);

            mInterstitialAd.load(INTERS_POS_ID);

        } catch (Exception e) {

            Log.e(TAG, "Inter : " + e);

        }
    }

    public void requestBannerAd(){

        Log.e(TAG, "request banner");

        //Banner Ad----------------------------------------------------------------------
        FrameLayout layout = new FrameLayout(this);
        FrameLayout.LayoutParams frameLayout =new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        frameLayout.gravity=Gravity.BOTTOM|Gravity.CENTER;
        super.addContentView(layout,frameLayout);//显示布局管理器

        final ViewGroup container = (ViewGroup) layout;

        try{
            mBannerAd = AdWorkerFactory.getAdWorker(this, container, new MimoAdListener() {
                @Override
                public void onAdPresent() {
                    Log.e(TAG, "onAdPresent");
                }

                @Override
                public void onAdClick() {
                    Log.e(TAG, "onAdClick");
                }

                @Override
                public void onAdDismissed() {
                }

                @Override
                public void onAdFailed(String s) {
                    Log.e(TAG, "on banner load failed " + s);

                }

                @Override
                public void onAdLoaded(int size) {
                    Log.e(TAG, "on banner loaded");

                }

                @Override
                public void onStimulateSuccess() {
                }
            }, AdType.AD_BANNER);

            try {
                mBannerAd.loadAndShow(BANNER_POS_ID);
            } catch (Exception e) {

                Log.e(TAG, "show banner : " + e);

            }


        }catch (Exception e) {
            e.printStackTrace();
            Log.e(TAG, "banner : " + e);


        }


    }


    public static void showInterAd(){

        Message msg = Message.obtain();
        msg.what = MSG_SHOW_INTERS_AD;
        MainActivity.mHandler.sendMessage(msg);

    }

    public static void showVideoAd(){

        Message msg = Message.obtain();
        msg.what = MSG_SHOW_VIDEO_AD;
        MainActivity.mHandler.sendMessage(msg);

    }

    public static void 	handleShowMiIntersAd(){

        Log.e(TAG, "showInterAd~~~");

        try {
            if (!mInterstitialAd.isReady()) {
                Log.e(TAG, "Inter ad is not ready!");
                mInterstitialAd.load(INTERS_POS_ID);

            } else {

                mInterstitialAd.show();

            }
        } catch (Exception e) {
            Log.e(TAG, "Show Inter : " + e);

        }
    }




    @Override
    protected void onDestroy() {
        try{
            super.onDestroy();
            mBannerAd.recycle();
            mInterstitialAd.recycle();
        }catch (Exception e) {

        }
    }
}



其中所需要的 splashad.xml 和webview_layout.xml 可以在demo里面找到,并将其复制到library下的res里面就行了

4、打jar包 打包方法参考我写的那个帖子打包就行了 右上角的 Geadle>(你所建立的library的类名)>Tasks>other>export 双击一下就行了 然后看到下面的打包完成提示就行了

  • 这里是我的工程这里写图片描述

##unity接入
将sdk里面的所有assets libs res 文件全部复制到unity Assets/Plugins/Android下面 并将AndroidManifest配置一下,按照sdk所需得一下权限和activity,

然后写脚本调用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MISDK  {
    private static MISDK instance;
    public static MISDK Instance
    {
        get { if (instance == null) {
                instance = new MISDK();

            }
            return instance;
        }
    }

    // 获得位于com.unity3d.player包下的UnityPlayer类,固定写法。
    AndroidJavaClass jc;
    AndroidJavaObject jo;

    public MISDK()
    {
        // 获得位于com.unity3d.player包下的UnityPlayer类,固定写法。
        jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");   // 参数是包名+类名
                                                                       // 获得jc所代表的类里的currentActivity对象,固定写法。这是Unity提供的classes.jar中的功能,可通过currentActivity获取到安卓端代表MainActivty的对象。
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
    }
    // Use this for initialization
   
    public void showInterAd()
    {
        jo.CallStatic("showInterAd");
    }
    public void showBannerAd()
    {
        jo.Call("reLoadBannerAd");
    }


}

package com.huanlebolibei.mi;

public class Constants {

    public static final String APP_ID = "*******************";
    public static final String BANNER_POS_ID = "************";
    public static final String POSITION_ID = "***********";

}

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="***********"
    android:versionCode="1"
    android:versionName="1.0" >

  <supports-screens
       android:smallScreens="true"
       android:normalScreens="true"
       android:largeScreens="true"
       android:xlargeScreens="true"
       android:anyDensity="true"/>
  <uses-sdk
        android:minSdkVersion="18"
        android:targetSdkVersion="22" />

  <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.GET_TASKS"/>
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  <uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS"/>
  <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />


    <application
        android:name="com.huanlebolibei.mi.MyApplication"
        android:theme="@style/UnityThemeSelector"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name">

        <activity
            android:name="com.huanlebolibei.mi.MainActivity"
            android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
            android:configChanges="orientation|keyboardHidden|navigation|screenSize"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
      




      <activity
        android:name="com.miui.zeus.mimo.sdk.activityProxy.ProxyActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:exported="false"
        android:screenOrientation="behind"
        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"></activity>
      <provider
          android:name="android.support.v4.content.FileProvider"
          android:authorities="*************.fileprovider"
          android:exported="false"
          android:grantUriPermissions="true">
        ;
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
      </provider>

    </application>

</manifest>

之后直接在unity里面打包就行了, 然后测试
这里写图片描述
插屏和横幅广告都能正常出来,,顺利接通

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值