小米广告接入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里面打包就行了, 然后
插屏和横幅广告都能正常出来,,顺利接通