|
Admob有两种广告:插屏(只显示部分屏幕上,如:上,下)、插页(全屏的广告)
package com.plugin.unity;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout.LayoutParams;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import com.plugin.unity.Common;
public class Admob { private AdView adView; private InterstitialAd mInterstitialAd; private Activity activity = Common.getUnityActivity(); static Admob mInstance = null;
@UnityCallable public static Admob getInstance(){ if(mInstance == null){ mInstance = new Admob(); }
return mInstance; }
@UnityCallable public void StartAdmob(String params){ UnityParams unity_params = UnityParams.parse(params,"can not parse ad setup params");
if(unity_params.hasString("banner_id")){
SetupBanner(unity_params.getString("banner_id"));
}
if(unity_params.hasString("intertitial_id")){
SetupIntertitial(unity_params.getString("intertitial_id"));
} }
//插屏广告 void SetupBanner(final String adUnitId) { activity.runOnUiThread(new Runnable() { @Override public void run() {
if(adView == null){
// TODO Auto-generated method stub adView = new AdView(activity); //"ca-app-pub-1769111074675577/9673638847" adView.setAdUnitId(adUnitId); adView.setAdSize(AdSize.SMART_BANNER); adView.setAdListener(new AdListener(){
@Override
public void onAdLoaded() {
adView.refreshDrawableState();
Log.i("admob","BannerAds onAdLoaded()");
}
@Override
public void onAdFailedToLoad(int errorCode) {
String errorReason = "";
switch(errorCode) {
case AdRequest.ERROR_CODE_INTERNAL_ERROR:
errorReason = "Internal error";
break;
case AdRequest.ERROR_CODE_INVALID_REQUEST:
errorReason = "Invalid request";
break;
case AdRequest.ERROR_CODE_NETWORK_ERROR:
errorReason = "Network Error";
break;
case AdRequest.ERROR_CODE_NO_FILL:
errorReason = "No fill";
break;
}
Log.i("admob","BannerAds onAdFailedToLoad()" + errorReason);
}
@Override
public void onAdOpened() {
Log.i("admob","BannerAds onAdOpened()");
}
@Override
public void onAdClosed() {
Log.i("admob","BannerAds onAdClosed()");
}
@Override
public void onAdLeftApplication() {
Log.i("admob","BannerAds onAdLeftApplication()");
} }); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); params.gravity = Gravity.TOP; adView.setVisibility(View.INVISIBLE); //adView.setFocusableInTouchMode(true); activity.addContentView(adView, params); Log.i("admob", "setupBannerAds"); } } }); }
// 插页广告
void SetupIntertitial(final String adUnitId){
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if(mInterstitialAd == null){
// Create the InterstitialAd and set the adUnitId.
mInterstitialAd = new InterstitialAd(activity);
mInterstitialAd.setAdUnitId(adUnitId);
mInterstitialAd.setAdListener(new AdListener(){
@Override
public void onAdLoaded() {
Log.i("admob","InstertitialAds onAdLoaded()");
}
@Override
public void onAdFailedToLoad(int errorCode) {
String errorReason = "";
switch(errorCode) {
case AdRequest.ERROR_CODE_INTERNAL_ERROR:
errorReason = "Internal error";
break;
case AdRequest.ERROR_CODE_INVALID_REQUEST:
errorReason = "Invalid request";
break;
case AdRequest.ERROR_CODE_NETWORK_ERROR:
errorReason = "Network Error";
break;
case AdRequest.ERROR_CODE_NO_FILL:
errorReason = "No fill";
break;
}
Log.i("admob","InstertitialAds onAdFailedToLoad()" + errorReason);
}
@Override
public void onAdOpened() {
Log.i("admob","InstertitialAds onAdOpened()");
}
@Override
public void onAdClosed() {
Log.i("admob","InstertitialAds onAdClosed()");
}
@Override
public void onAdLeftApplication() {
Log.i("admob","InstertitialAds onAdLeftApplication()");
}
});
Log.i("admob", "setupInstertitialAds");
}
}
});
}
@UnityCallable public void LoadBanner(){ activity.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if(adView != null){
adView.loadAd(new AdRequest.Builder().build());
Log.i("admob", "LoadBannerAds");
}
}
}); }
@UnityCallable public void ShowBanner(){ activity.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if(adView != null){
adView.loadAd(new AdRequest.Builder().build());
adView.setVisibility(View.VISIBLE);
Log.i("admob", "ShowBannerAds");
}
}
}); }
@UnityCallable public void HideBanner(){ activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if(adView != null){
adView.setVisibility(View.INVISIBLE);
Log.i("admob", "HideBannerAds");
}
}
}); }
@UnityCallable public void LoadIntertitial(){ activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if(mInterstitialAd != null && mInterstitialAd.isLoaded() == false){
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
else{
Log.i("admob", "InterstitialAd is null or has loaded");
}
}
}); }
@UnityCallable public void ShowIntertitial(){ activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if(mInterstitialAd != null){
if(mInterstitialAd.isLoaded()){
mInterstitialAd.show();
}
else{
Log.i("admob", "InterstitialAd has not loaded!!");
}
}
}
}); }
}
在AndroidManifest.xml的</Application>前添加
<!-- Activity required to show ad overlays. -->
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
<!-- META-DATA -->
<meta-data android:name="com.google.android.gms.version" android:value="6587000" />
在<activity>中添加标记,否则,插屏广告将不能点击
<!-- Banner clicked need. -->
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
c#代码:
using System;
using UnityEngine;
using LitJson;
class AdPlugin
{
private static AndroidJavaObject _plugin;
static AdPlugin()
{
if (Application.platform == RuntimePlatform.Android)
{
using (var pluginClass = new AndroidJavaClass("com.plugin.unity.Admob"))
{
_plugin = pluginClass.CallStatic<AndroidJavaObject>("getInstance");
}
}
}
public static void SetAds()
{
if (Application.platform == RuntimePlatform.Android)
{
JsonData data = new JsonData();
data["banner_id"] = "";//在admob后台添加广告后可以看到
data["intertitial_id"] = "";//在admob后台添加广告后可以看到
_plugin.Call("StartAdmob", JsonMapper.ToJson(data));
}
}
//插页广告
public static void ShowIntertitialAds()
{
if (Application.platform == RuntimePlatform.Android)
{
_plugin.Call("ShowIntertitial");
}
}
public static void LoadIntertitialAds()
{
if (Application.platform == RuntimePlatform.Android)
{
_plugin.Call("LoadIntertitial");
}
}
//横幅广告
public static void ShowBannerAds(bool show)
{
if (Application.platform == RuntimePlatform.Android)
{
if (show)
{
_plugin.Call("ShowBanner");
}
else
{
_plugin.Call("HideBanner");
}
}
}
public static void LoadBannerAds()
{
if (Application.platform == RuntimePlatform.Android)
{
_plugin.Call("LoadBanner");
}
}
}
|