Здравствуйте.
Не удается вывести фулл-скрин баннеры. Как только даю команду выполнения метода показывающий баннер, приложение минимализируется (сворачивается), без отображения баннера.
Код рабочий, так как писал его я, и отлично работает без аппаратного ускорения (исходки из предидущих наработок / или же может быть, я не там ищу)
Посмотрите может что знаете, стыкались с подобный, или увидите в чём проблема.
Код AS3:
package net.alexscript.advers
{
public interface IADSetup
{
function get type():uint;
}
}
package net.alexscript.advers
{
import flash.events.IEventDispatcher;
public interface IAd extends IEventDispatcher
{
function show(type:String):void
function activate(type:String):void
}
}
Код AS3:
var google:IADSetup = new AdMobConfig('my_appID','my_BannerID','my_InterstitialID');
AdCore.enable( google, AdCore.INTERSTITIAL );
Код AS3:
public function enable(setup:IADSetup,key:String='AD_TYPE'):void
{
var ad:IAd
switch (setup.type) {
case GOOGLE_ADMOB:
ad = new ExtendsAdMob(setup);
break;
case ALCHEMY_ADMOB:
// ad = new AdMobAlchemy();
break;
case ADCOLONY_ADMOB:
ad = new ExtendsAdColony(setup);
break;
default: return;
}
ad.addEventListener( ADEvent.OPEN, cmdProvider );
ad.addEventListener( ADEvent.CLOSE, cmdProvider );
ad.addEventListener( ADEvent.AD_LOAD_COMPLETE, cmdProvider);
ad.addEventListener( ADEvent.AD_ERROR, cmdProvider);
runtime.push( ad );
Debug.log('Advers.activate('+key+')');
ad.activate( key );
}
Класс работы с ЭдМобом
Код AS3:
package net.alexscript.advers
{
import com.admob.AdMobEvent;
import com.admob.AdMobManager;
import com.admob.AdMobPosition;
import com.admob.AdMobSize;
import flash.events.EventDispatcher;
import flash.system.Capabilities;
public class ExtendsAdMob extends EventDispatcher implements IAd
{
private var setupConfig:AdMobConfig;
private var isShow:Boolean = false;
private static var adMobManager:AdMobManager;
public function ExtendsAdMob(cfg:IADSetup)
{
setupConfig = cfg as AdMobConfig;
adMobManager = AdMobManager.manager;
if(adMobManager.isSupported){
adMobManager.verbose = Capabilities.isDebugger;
if (setupConfig.testMode) {
adMobManager.operationMode = AdMobManager.TEST_MODE;
adMobManager.testDeviceID = adMobManager.device;
} else {
adMobManager.operationMode = AdMobManager.PROD_MODE;
}
adMobManager.isCDT = true;
}
}
public function activate(type:String):void {
Debug.log(this+' -> '+type);
switch (type)
{
case AdCore.BANNER:
adMobManager.bannersAdMobId = setupConfig.bannerID;
addListener( AdCore.BANNER );
adMobManager.createBanner(AdMobSize.BANNER,AdMobPosition.BOTTOM_CENTER,AdCore.BANNER, setupConfig.bannerID, true);
break;
case AdCore.INTERSTITIAL:
adMobManager.interstitialAdMobId = setupConfig.interstitialID;
addListener( AdCore.INTERSTITIAL );
adMobManager.cacheInterstitial();
break;
default:
break;
}
}
public function show(type:String):void {
Debug.log('Show '+type);
if(adMobManager.isSupported)
{
switch (type)
{
case AdCore.EXIT:
case AdCore.INTERSTITIAL:
{
Debug.log('Interstitial loaded status '+adMobManager.isInterstitialLoaded());
if(adMobManager.isInterstitialLoaded())
adMobManager.showInterstitial();
else
adMobManager.cacheInterstitial();
isShow = true;
} break;
case AdCore.BANNER:
adMobManager.showBanner(type);
break;
}
}
}
private function addListener(type:String):void
{
var eventMap:Vector.<String>;
switch (type) {
case AdCore.BANNER:
eventMap = new <String>
[ AdMobEvent.BANNER_LOADED,
AdMobEvent.BANNER_AD_OPENED,
AdMobEvent.BANNER_AD_CLOSED,
AdMobEvent.BANNER_FAILED_TO_LOAD,
AdMobEvent.BANNER_LEFT_APPLICATION
]; break;
case AdCore.INTERSTITIAL:
eventMap = new <String>
[ AdMobEvent.INTERSTITIAL_LOADED,
AdMobEvent.INTERSTITIAL_AD_OPENED,
AdMobEvent.INTERSTITIAL_AD_CLOSED,
AdMobEvent.INTERSTITIAL_FAILED_TO_LOAD,
AdMobEvent.INTERSTITIAL_LEFT_APPLICATION
]; break;
default: return;
}
dispatcher.addEventListener( eventMap.shift(), onBannerLoaded);
dispatcher.addEventListener( eventMap.shift(), onStatusHandler);
dispatcher.addEventListener( eventMap.shift(), onStatusHandler);
dispatcher.addEventListener( eventMap.shift(), onErrorHandler);
dispatcher.addEventListener( eventMap.shift(), onErrorHandler);
}
private function onBannerLoaded(e:AdMobEvent):void
{
Debug.log('Onloaded '+e.type+' > '+e.data);
dispatchEvent(new ADEvent(ADEvent.AD_LOAD_COMPLETE,e.data));
}
protected function onStatusHandler(event:AdMobEvent):void
{
Debug.log('switchHandler '+event.data+' : '+event.type);
switch (event.type)
{ case AdMobEvent.BANNER_AD_OPENED:
dispatchEvent( new ADEvent(ADEvent.OPEN, AdCore.BANNER ) );
break;
case AdMobEvent.BANNER_AD_CLOSED:
dispatchEvent( new ADEvent(ADEvent.CLOSE, AdCore.BANNER ) );
break;
case AdMobEvent.INTERSTITIAL_AD_OPENED:
dispatchEvent( new ADEvent(ADEvent.OPEN, AdCore.INTERSTITIAL ) );
break;
case AdMobEvent.INTERSTITIAL_AD_CLOSED:
if (setupConfig.autocache) adMobManager.cacheInterstitial();
dispatchEvent( new ADEvent(ADEvent.CLOSE, AdCore.INTERSTITIAL ) );
break;
}
}
private function onErrorHandler(e:AdMobEvent):void
{
Debug.log('Error '+e.type+' > '+e.data);
switch (e.type) {
case AdMobEvent.INTERSTITIAL_FAILED_TO_LOAD:
case AdMobEvent.INTERSTITIAL_LEFT_APPLICATION:
dispatchEvent(new ADEvent(ADEvent.AD_ERROR,e.data));
break
case AdMobEvent.BANNER_FAILED_TO_LOAD:
case AdMobEvent.BANNER_LEFT_APPLICATION:
dispatchEvent(new ADEvent(ADEvent.AD_ERROR,e.data));
break;
}
}
private function get dispatcher():EventDispatcher {
return adMobManager.dispatcher;
}
}
}
Перед тем как вывести какойнить баннер, система "полу-автоматом" инициализирует, кеширует и если всё ок, только тогда происходит вызов
Код AS3:
iad.show( type ); // iad implements IAd
Старлинг "стартер"
Код AS3:
package net.alexscript.service
{
import flash.display.Stage;
import flash.events.Event;
import flash.geom.Rectangle;
import net.alexscript.worker.Worker;
import starling.core.Starling;
import starling.events.Event;
public class BaseStarlingService extends Worker
{
public static var STARLING_ON_READY:String = 'STARLING_ON_READY';
private static var _starling:Starling;
private var stage:Stage;
private var contextCreated:Boolean = false;
private var rootCreated:Boolean = false;
public function BaseStarlingService()
{
super();
}
override public function run():void{
trace('run base');
}
public function enable(stage:Stage, view:Class):void {
Debug.log( 'StarlingService enable');
if (!_starling) {
Starling.handleLostContext = true;
Starling.multitouchEnabled = true;
_starling = new Starling(view, stage);
_starling.addEventListener(starling.events.Event.ROOT_CREATED, onStarlingEvent);
_starling.addEventListener(starling.events.Event.CONTEXT3D_CREATE, onStarlingEvent);
_starling.addEventListener(starling.events.Event.FATAL_ERROR, onStarlingEvent);
_starling.simulateMultitouch = true;
_starling.antiAliasing = 0;
_starling.showStats = true;
_starling.enableErrorChecking = false;
_starling.start();
this.stage = stage;
stage.addEventListener(flash.events.Event.RESIZE, stage_resizeHandler, false, int.MAX_VALUE, true);
stage.addEventListener(flash.events.Event.DEACTIVATE, stage_deactivateHandler, false, 0, true);
}
}
private function onStarlingEvent(e:starling.events.Event):void
{
switch (e.type) {
case starling.events.Event.CONTEXT3D_CREATE:
trace("[Main] Starling Context3D created");
contextCreated = true;
break;
case starling.events.Event.ROOT_CREATED:
trace("[Main] Starling root created");
rootCreated = true;
break;
case starling.events.Event.FATAL_ERROR:
trace("[Main] Starling Fatal Error");
break;
}
if (contextCreated && rootCreated)
this.dispatchEvent( new flash.events.Event(BaseStarlingService.STARLING_ON_READY ) );
}
public function get starling():Starling {
return _starling;
}
private function stage_resizeHandler(event:flash.events.Event):void
{
_starling.stage.stageWidth = this.stage.stageWidth;
_starling.stage.stageHeight = this.stage.stageHeight;
const viewPort:Rectangle = _starling.viewPort;
viewPort.width = this.stage.stageWidth;
viewPort.height = this.stage.stageHeight;
try
{
_starling.viewPort = viewPort;
}
catch(error:Error) {}
}
private function stage_deactivateHandler(event:flash.events.Event):void
{
_starling.stop();
this.stage.addEventListener(flash.events.Event.ACTIVATE, stage_activateHandler, false, 0, true);
}
private function stage_activateHandler(event:flash.events.Event):void
{
this.stage.removeEventListener(flash.events.Event.ACTIVATE, stage_activateHandler);
_starling.start();
}
}
}
Манифест
Код:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/18.0">
<id>appy.app.Jumper</id>
<filename>Main</filename>
<name>Jumper</name>
<versionNumber>1.7.3</versionNumber>
<initialWindow>
<content>[This value will be overwritten by Flash Builder in the output app.xml]</content>
<systemChrome>standard</systemChrome>
<transparent>false</transparent>
<visible>true</visible>
<fullScreen>true</fullScreen>
<autoOrients>false</autoOrients>
<aspectRatio>portrait</aspectRatio> <!-- -->
<renderMode>direct</renderMode>
</initialWindow>
<customUpdateUI>false</customUpdateUI>
<allowBrowserInvocation>false</allowBrowserInvocation>
<android>
<containsVideo>true</containsVideo>
<manifestAdditions><![CDATA[
<manifest android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-configuration android:reqFiveWayNav="true"/>
<!--<supports-screens android:normalScreens="true"/>-->
<uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch"/>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="16" />
<application android:excludeFromRecents="false" android:enabled="true" android:hardwareAccelerated="true">
<activity android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data android:name="com.google.android.gms.version" android:value="4452000" />
<activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
<activity android:name="com.jirbo.adcolony.AdColonyOverlay" android:windowSoftInputMode="adjustNothing" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<activity android:name="com.jirbo.adcolony.AdColonyFullscreen" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" />
<activity android:name="com.jirbo.adcolony.AdColonyBrowser" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" />
</application>
</manifest>
]]></manifestAdditions>
</android>
<iPhone>
<InfoAdditions><![CDATA[
<key>UIDeviceFamily</key>
<array>
<string>1</string>
<string>2</string>
</array>
]]></InfoAdditions>
<requestedDisplayResolution>high</requestedDisplayResolution>
</iPhone>
<extensions>
<extensionID>pl.mateuszmackowiak.nativeANE.properties.SystemProperties</extensionID>
<extensionID>pl.mateuszmackowiak.nativeANE.NativeDialogs</extensionID>
<extensionID>com.jirbo.airadc.AirAdColony</extensionID>
<extensionID>com.admob.ane</extensionID>
</extensions>
</application>
На просторах нашел вот такую конструкцию
Код AS3:
Starling.current.stop(true);
setTimeout(function():void {
AdManager.getInstance().show();
}, 100);
но результат негативный
Добавлено через 58 минут
Спасибо за внимание. Нашёл траблочку в мейне, два слеша и профит)
Код AS3:
if(Capabilities.cpuArchitecture == "ARM") {
NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, handleActivate, false, 0, true);
NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleDeactivate, false, 0, true);
}
protected function handleDeactivate(event:Event):void
{
NativeApplication.nativeApplication.exit();
}