Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   [Starling] HardwareAccelerate и full-screen banners ( AdMob.Intersteil / AdColony ) (http://www.flasher.ru/forum/showthread.php?t=211151)

AlexCooper 03.07.2015 15:48

[Starling] HardwareAccelerate и full-screen banners ( AdMob.Intersteil / AdColony )
 
Здравствуйте.
Не удается вывести фулл-скрин баннеры. Как только даю команду выполнения метода показывающий баннер, приложение минимализируется (сворачивается), без отображения баннера.
Код рабочий, так как писал его я, и отлично работает без аппаратного ускорения (исходки из предидущих наработок / или же может быть, я не там ищу)

Посмотрите может что знаете, стыкались с подобный, или увидите в чём проблема.

Код 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();
}



Часовой пояс GMT +4, время: 12:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.