標籤:unity3d 有米 廣告 android開發
開此貼的原因是,我用unity3d做了一個小遊戲,老闆讓我加上廣告。但是我本人不會java,更不會寫android,最後折騰了好幾天,查了亂七八糟的好多文章,要麼是使用老的有米SDK,要麼是說的不詳細,誤人子弟。最後我使用此方法,終於成功加上了廣告條。按照我的方法,即使不會android開發也沒問題。感興趣的可以看一下。</span>
準備:
1、首先需要有android開發環境:eclipse+android sdk+java,這個就不用我說了,網上有很多詳細的文章;
2、其次要有unity3d 軟體;
3、有米SDK:
有了上面的環境,下面就可以正式開始:
1、開啟unity3d,建立一個工程,為了示範簡單,我建了一個情境,加了一個指令檔,
2、building:注意中紅色部分
然後export到英文路徑下。比如我的是:D:\test\testYouMi\try
好了,現在我們用unity3d 做的android工程已經完成了,已經沒有unity3d 的事情了,下面開始給這個工程加有米廣告;
3、開啟eclipse,import我們剛才的工程,然後finishing
4、加入有米的SDK,匯入jar,直接將YoumiSdk_v5.00_2015-01-08.jar拖到lib檔案夾下,copy files ->OK;然後build path->add to path
5、修改UnityPlayerNativeActivity.java;
首先匯入包:添加以下代碼
import net.youmi.android.AdManager;import net.youmi.android.banner.AdSize;import net.youmi.android.banner.AdView;import net.youmi.android.spot.SpotManager;import android.app.Activity;import android.os.Bundle;import android.view.Gravity;import android.view.Menu;import android.view.MenuItem;import android.widget.FrameLayout;
然後添加代碼:
AdManager.getInstance(this).init("da4217c86b4902f1", "1f1d3f0007343c71", false);// 載入插播資源SpotManager.getInstance(this).loadSpotAds();// 插屏出現動畫效果,0:ANIM_NONE為無動畫,1:ANIM_SIMPLE為簡單動畫效果,2:ANIM_ADVANCE為進階動畫效果SpotManager.getInstance(this).setAnimationType(SpotManager.ANIM_ADVANCE);// 設定插屏動畫的橫豎屏展示方式,如果設定了橫屏,則在有廣告資源的情況下會是優先使用橫屏圖。SpotManager.getInstance(this).setSpotOrientation(SpotManager.ORIENTATION_PORTRAIT);FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT);// 設定廣告條的懸浮位置layoutParams.gravity = Gravity.BOTTOM | Gravity.END; // 這裡樣本為右下角// 執行個體化廣告條AdView adView = new AdView(this, AdSize.FIT_SCREEN);// 調用Activity的addContentView函數this.addContentView(adView, layoutParams);
最終UnityPlayerNativeActivity.java代碼如下,我們只添加了兩個部分:
package com.chuji.test;import com.unity3d.player.*;import android.app.NativeActivity;import android.content.res.Configuration;import android.graphics.PixelFormat;import android.os.Bundle;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;import android.view.Window;import android.view.WindowManager;import net.youmi.android.AdManager;import net.youmi.android.banner.AdSize;import net.youmi.android.banner.AdView;import net.youmi.android.spot.SpotManager;import android.app.Activity;import android.os.Bundle;import android.view.Gravity;import android.view.Menu;import android.view.MenuItem;import android.widget.FrameLayout;public class UnityPlayerNativeActivity extends NativeActivity{protected UnityPlayer mUnityPlayer;// don't change the name of this variable; referenced from native code// Setup activity layout@Override protected void onCreate (Bundle savedInstanceState){requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);getWindow().takeSurface(null);setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);getWindow().setFormat(PixelFormat.RGB_565);mUnityPlayer = new UnityPlayer(this);if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(mUnityPlayer);mUnityPlayer.requestFocus();AdManager.getInstance(this).init("da4217c86b4902f1", "1f1d3f0007343c71", false);// 載入插播資源SpotManager.getInstance(this).loadSpotAds();// 插屏出現動畫效果,0:ANIM_NONE為無動畫,1:ANIM_SIMPLE為簡單動畫效果,2:ANIM_ADVANCE為進階動畫效果SpotManager.getInstance(this).setAnimationType(SpotManager.ANIM_ADVANCE);// 設定插屏動畫的橫豎屏展示方式,如果設定了橫屏,則在有廣告資源的情況下會是優先使用橫屏圖。SpotManager.getInstance(this).setSpotOrientation(SpotManager.ORIENTATION_PORTRAIT);FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT);// 設定廣告條的懸浮位置layoutParams.gravity = Gravity.BOTTOM | Gravity.END; // 這裡樣本為右下角// 執行個體化廣告條AdView adView = new AdView(this, AdSize.FIT_SCREEN);// 調用Activity的addContentView函數this.addContentView(adView, layoutParams);}// Quit Unity@Override protected void onDestroy (){mUnityPlayer.quit();super.onDestroy();}// Pause Unity@Override protected void onPause(){super.onPause();mUnityPlayer.pause();}// Resume Unity@Override protected void onResume(){super.onResume();mUnityPlayer.resume();}// This ensures the layout will be correct.@Override public void onConfigurationChanged(Configuration newConfig){super.onConfigurationChanged(newConfig);mUnityPlayer.configurationChanged(newConfig);}// Notify Unity of the focus change.@Override public void onWindowFocusChanged(boolean hasFocus){super.onWindowFocusChanged(hasFocus);mUnityPlayer.windowFocusChanged(hasFocus);}// For some reason the multiple keyevent type is not supported by the ndk.// Force event injection by overriding dispatchKeyEvent().@Override public boolean dispatchKeyEvent(KeyEvent event){if (event.getAction() == KeyEvent.ACTION_MULTIPLE)return mUnityPlayer.injectEvent(event);return super.dispatchKeyEvent(event);}// Pass any events not handled by (unfocused) views straight to UnityPlayer@Override public boolean onKeyUp(int keyCode, KeyEvent event) { return mUnityPlayer.injectEvent(event); }@Override public boolean onKeyDown(int keyCode, KeyEvent event) { return mUnityPlayer.injectEvent(event); }@Override public boolean onTouchEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); }/*API12*/ public boolean onGenericMotionEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); }}6、修改AndroidMainfest.xml檔案:記住
<application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false">
這句話不允許修改代碼,所以我們要刪掉android:debuggable="false",成為這樣:
<application android:icon="@drawable/app_icon" android:label="@string/app_name" >
加入代碼:
<!-- 配置許可權 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
再繼續加入代碼:
<!-- 添加必須的組件 --> <service android:name="net.youmi.android.AdService" > </service> <activity android:name="net.youmi.android.AdBrowser" android:theme="@android:style/Theme.NoTitleBar" > </activity> <receiver android:name="net.youmi.android.AdReceiver" > <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_INSTALL" /> <data android:scheme="package" /> </intent-filter> </receiver>
最後AndroidMainfest.xml代碼如下
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.chuji.test" android:theme="@android:style/Theme.NoTitleBar" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal"> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" /> <!-- 配置許可權 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> <application android:icon="@drawable/app_icon" android:label="@string/app_name" > <activity android:label="@string/app_name" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale" android:name="com.chuji.test.UnityPlayerNativeActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" /> </activity> <!-- 添加必須的組件 --> <service android:name="net.youmi.android.AdService" > </service> <activity android:name="net.youmi.android.AdBrowser" android:theme="@android:style/Theme.NoTitleBar" > </activity> <receiver android:name="net.youmi.android.AdReceiver" > <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_INSTALL" /> <data android:scheme="package" /> </intent-filter> </receiver> </application> <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="20" /> <uses-feature android:glEsVersion="0x00020000" /></manifest>
7:、拿真機測試如下:
unity3d android工程加入最新的有米廣告