Forums Développement Multimédia

Aller au contenu

ANE pour Admob

ane admob android air

214 réponses à ce sujet

#181 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 16 February 2020 - 21:56 PM

Pour le premier test je n'ais pas de résultat, je vais recommencer les manipes une nouvelle fois.
J'ai modifié AdMob.as

package com.google.ads
{
            import flash.events.EventDispatcher;
            import flash.events.StatusEvent;
            import flash.external.ExtensionContext;
            public class AdMob extends EventDispatcher
            {
                            private var extContext:ExtensionContext = null;
                            public function AdMob()
                            {
                                            extContext = ExtensionContext.createExtensionContext("com.google.ads", null);
                                            extContext.addEventListener(StatusEvent.STATUS, onStatus);
                            }
    public function init(value:String):void
    {
          extContext.call("admob", value);
    }
    public function initInterstitial(value:String):void
    {
          extContext.call("admobInterstitial", value);
    }
                            private function onStatus(event:StatusEvent):void
                            {
                                            if (event.code == "INFO")
                                            {
                                                            dispatchEvent( new AdMobEvent( AdMobEvent.INFO, event.level ) );
                                            }
                            }
                            public function dispose():void
                            {
                                            extContext.removeEventListener(StatusEvent.STATUS, onStatus);
                                            extContext.dispose();
                                            extContext = null;
                            }
            }
}
 


#182 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 16 February 2020 - 22:01 PM

joint l'ane pour que je vérifie.

#183 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 16 February 2020 - 22:11 PM

C'est ok, ça fonctionne parfaitement.

#184 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 16 February 2020 - 22:12 PM

J'ai renouvelé le swc et cette fois-ci c'est passé je ne sais pas pourquoi ?!

#185 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 16 February 2020 - 22:12 PM

félicitations

#186 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 16 February 2020 - 22:16 PM

Gros merci à toi pol2095, je te souhaite une bonne fin de soirée ;-)

#187 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 06:12 AM

dans "AdMobExtensionContext.java" il faut créer une variable public "rewardedAd"

public class AdMobExtensionContext extends FREContext {

        public RewardedAd rewardedAd;  

et ajouter les lignes "rewardedAdLoad" et "rewardedAdShow"

functionMap.put("admob", new AdMob());
functionMap.put("admobInterstitial", new AdMobInterstitial());
functionMap.put("rewardedAdLoad", new AdMobRewardedLoad());
functionMap.put("rewardedAdShow", new AdMobRewardedShow());

créer les 2 classes Java "AdMobRewardedLoad" :

package com.google.ads;

import android.app.Activity;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREObject;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.rewarded.RewardedAd;
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback;

public class AdMobRewardedLoad implements FREFunction {
        @Override
        public FREObject call(FREContext arg0, FREObject[] arg1) {

                FREObject result = null;
                final AdMobExtensionContext extContext = (AdMobExtensionContext) arg0;

                Activity activity = extContext.getActivity();

                String adUnitId = "";
                try
                {
                        adUnitId = arg1[0].getAsString();
                }
                catch (Exception e)
                {
                        //Log.e("AIR_Error", e.getMessage());
                }

                extContext.rewardedAd = new RewardedAd(activity, adUnitId);

                RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
                        @Override
                        public void onRewardedAdLoaded() {
                                // Ad successfully loaded.
                                extContext.dispatchStatusEventAsync("INFO", "loadedRewardedAd");
                        }

                        @Override
                        public void onRewardedAdFailedToLoad(int errorCode) {
                                // Ad failed to load.
                                extContext.dispatchStatusEventAsync("INFO", "failed : " + errorCode);
                        }
                };
                extContext.rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);

                return result;
        }
}

et "AdMobRewardedShow"

package com.google.ads;

import android.app.Activity;

import androidx.annotation.NonNull;

import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREObject;
import com.google.android.gms.ads.rewarded.RewardItem;
import com.google.android.gms.ads.rewarded.RewardedAdCallback;

public class AdMobRewardedShow implements FREFunction {
        @Override
        public FREObject call(FREContext arg0, FREObject[] arg1) {

                FREObject result = null;
                final AdMobExtensionContext extContext = (AdMobExtensionContext) arg0;

                Activity activity = extContext.getActivity();

                if (extContext.rewardedAd.isLoaded()) {
                        RewardedAdCallback adCallback = new RewardedAdCallback() {
                                @Override
                                public void onRewardedAdOpened() {
                                        // Ad opened.
                                        extContext.dispatchStatusEventAsync("INFO", "opened");
                                }

                                @Override
                                public void onRewardedAdClosed() {
                                        // Ad closed.
                                        extContext.dispatchStatusEventAsync("INFO", "closed");
                                }

                                @Override
                                public void onUserEarnedReward(@NonNull RewardItem reward) {
                                        // User earned reward.
                                        extContext.dispatchStatusEventAsync("INFO", "reward : " + reward.getType() + " " + reward.getAmount());
                                }

                                @Override
                                public void onRewardedAdFailedToShow(int errorCode) {
                                        // Ad failed to display.
                                        extContext.dispatchStatusEventAsync("INFO", "failed : " + errorCode);
                                }
                        };
                        extContext.rewardedAd.show(activity, adCallback);
                } else {
                        //Log.d("TAG", "The rewarded ad wasn't loaded yet.");
                }

                return result;
        }
}


dans "AdMob.as" il faut ajouter la méthode "rewardedAdLoad" et "rewardedAdShow"

public function rewardedAdLoad(value:String):void
{
        extContext.call("rewardedAdLoad", value);
}
       
public function rewardedAdShow():void
{
        extContext.call("rewardedAdShow");
}

dans Flash pour lancer l'annonce

import com.google.ads.AdMob;
import com.google.ads.AdMobEvent;

var adUnitId:String = "ca-app-pub-3940256099942544/5224354917"; // test
var admob:AdMob = new AdMob();
admob.addEventListener(AdMobEvent.INFO, infoHandler);
admob.rewardedAdLoad(adUnitId);

private function infoHandler(event:AdMobEvent):void
{
        trace( event.message );
        if( event.message == "loadedRewardedAd" ) admob.rewardedAdShow();
}


#188 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 09:55 AM

J'ai effectué les première instruction mais le build donne une erreur.
Image IPB

#189 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 10:01 AM

ajoute

import com.google.android.gms.ads.rewarded.RewardedAd;


#190 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 10:16 AM

Déjà fait mais ca ne passe toujours pas.

#191 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 10:26 AM

fais une copie du fichier "build.gradle (Module: app)"

j'utilise
implementation 'com.google.android.gms:play-services-ads:18.3.0'


#192 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 10:31 AM


apply plugin: 'com.android.library'
android {
    compileSdkVersion 28
    defaultConfig {
            //applicationId "com.google.admob"
            minSdkVersion 25
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            //testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
            release {
                    minifyEnabled false
                    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
    }
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.0.2'
    //testImplementation 'junit:junit:4.12'
    //androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    //androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    implementation files('libs/FlashRuntimeExtensions.jar')
    implementation 'com.google.android.gms:play-services-ads:9.8.0'
}
 


#193 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 10:34 AM

il faut changer de version 18.3.0

#194 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 11:55 AM

Premier essai rapide: 1061 : Appel à la méthode rewardedAdShow peut-être non définie, via la référence de type static com.google.ads:AdMob.

#195 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 12:51 PM

il faut ajouter à la classe as3 "com.google.ads.AdMob"

public function rewardedAdLoad(value:String):void
{
                extContext.call("rewardedAdLoad", value);
}
         
public function rewardedAdShow():void
{
                extContext.call("rewardedAdShow");
}

puis recompiler le swc et extraire le fichier "library.swf" avant de compiler l'ane

en utilisant la version 18.3.0 les jars à utiliser pour compiler l'ane ne sont pas les mêmes

il faut également modifier "com.google.android.gms.version" dans l'app descriptor :

<meta-data android:name="com.google.android.gms.version"
           android:value="12451000" />

quand tu mettras ta propre "ID du bloc d'annonces" il faudra également dans l'app descriptor ajouter l' "ID de l'application" (nécessaire depuis la version 17.0.0) :

<!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
<meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>


#196 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 14:09 PM

Oui pour l'ANE j'ai bien effectué toute les étapes comme tu me l'avais apris normalement il est ok, pour le descripteur il faut que je regarde.

#197 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 14:37 PM

Autant pour moi j'ai zappé l'étape -> d'extraire le fichier "library.swf, je recommence l'ANE ...

#198 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 15:15 PM

Je dois également refaire les étapes
où il faut que je récupère et modifie également les 5 fichiers *.aar ?

#199 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 15:28 PM

si tu as gardé les fichiers de la version 18.3.0 non, sinon oui

play-services-ads-18.3.0.aar
play-services-ads-base-18.3.0.aar
play-services-ads-lite-18.3.0.aar
play-services-basement-17.0.0.aar
play-services-gass-18.3.0.aar

tu peux les télécharger également :

https://maven.google.com/com/google/android/gms/play-services-ads/18.3.0/play-services-ads-18.3.0.aar
https://maven.google...base-18.3.0.aar
https://maven.google...lite-18.3.0.aar
https://maven.google...ment-17.0.0.aar
https://maven.google...gass-18.3.0.aar

#200 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 17:10 PM

J'ai tout refait mais ça ne fonctionne pas, mon ANE ne fait que 41ko j'ai compilé avec:

C:\Users\Laurent\Downloads\Harman_AIR_SDK_33\bin\adt -package -target ane AdMob.ane extension.xml -swc AdMob.swc -platform Android-ARM library.swf AdMob.jar -platform Android-x86 library.swf AdMob.jar -platform Android-ARM64 library.swf AdMob.jar -platform Android-x64 library.swf AdMob.jar
 


#201 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 17:19 PM

le bon code

C:\Users\Laurent\Downloads\Harman_AIR_SDK_33\bin\adt -package -target ane AdMob.ane extension.xml -swc AdMob.swc -platform Android-ARM -platformoptions platform.xml play-services-ads-18.3.0.jar play-services-ads-base-18.3.0.jar play-services-ads-lite-18.3.0.jar play-services-basement-17.0.0.jar play-services-gass-18.3.0.jar library.swf AdMob.jar -platform Android-x86 -platformoptions platform.xml play-services-ads-18.3.0.jar play-services-ads-base-18.3.0.jar play-services-ads-lite-18.3.0.jar play-services-basement-17.0.0.jar play-services-gass-18.3.0.jar library.swf AdMob.jar -platform Android-ARM64 -platformoptions platform.xml play-services-ads-18.3.0.jar play-services-ads-base-18.3.0.jar play-services-ads-lite-18.3.0.jar play-services-basement-17.0.0.jar play-services-gass-18.3.0.jar library.swf AdMob.jar -platform Android-x64 -platformoptions platform.xml play-services-ads-18.3.0.jar play-services-ads-base-18.3.0.jar play-services-ads-lite-18.3.0.jar play-services-basement-17.0.0.jar play-services-gass-18.3.0.jar library.swf AdMob.jar

il faut mettre à jour le fichier "platform.xml"

<platform xmlns="http://ns.adobe.com/air/extension/32.0">
                <packagedDependencies>
                   <packagedDependency>play-services-ads-18.3.0.jar</packagedDependency>
                   <packagedDependency>play-services-ads-base-18.3.0.jar</packagedDependency>
                   <packagedDependency>play-services-ads-lite-18.3.0.jar</packagedDependency>
                   <packagedDependency>play-services-basement-17.0.0.jar</packagedDependency>
                   <packagedDependency>play-services-gass-18.3.0.jar</packagedDependency>
                </packagedDependencies>
</platform>


#202 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 17:31 PM

C'est mieux pour l'ANE mais pour le moment rien ne s'affiche, je vais re-contrôler les fichiers.

#203 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 17:42 PM

Fla:

import com.google.ads.AdMob;
import com.google.ads.AdMobEvent;
var adUnitId:String = "ca-app-pub-3940256099942544/5224354917"; // test
var admob:AdMob = new AdMob();
admob.addEventListener(AdMobEvent.INFO, infoHandler);
admob.rewardedAdLoad(adUnitId);
function infoHandler(event:AdMobEvent):void
{
            trace( event.message );
            if( event.message == "loadedRewardedAd" ) admob.rewardedAdShow();

}
 

platform.xml:

<platform xmlns="http://ns.adobe.com/air/extension/32.0">
            <packagedDependencies>
                   <packagedDependency>play-services-ads-18.3.0.jar</packagedDependency>
                   <packagedDependency>play-services-ads-base-18.3.0.jar</packagedDependency>
                   <packagedDependency>play-services-ads-lite-18.3.0.jar</packagedDependency>
                   <packagedDependency>play-services-basement-17.0.0.jar</packagedDependency>
                   <packagedDependency>play-services-gass-18.3.0.jar</packagedDependency>
            </packagedDependencies>
</platform>
 

AdMob.as:

package com.google.ads
{
            import flash.events.EventDispatcher;
            import flash.events.StatusEvent;
            import flash.external.ExtensionContext;
            public class AdMob extends EventDispatcher
            {
                            private var extContext:ExtensionContext = null;
                            public function AdMob()
                            {
                                            extContext = ExtensionContext.createExtensionContext("com.google.ads", null);
                                            extContext.addEventListener(StatusEvent.STATUS, onStatus);
                            }
                            public function init(value:String):String
                            {
                                            return extContext.call("admob", value) as String;
                            }
                            private function onStatus(event:StatusEvent):void
                            {
                                            if (event.code == "INFO")
                                            {
                                                            dispatchEvent( new AdMobEvent( AdMobEvent.INFO, event.level ) );
                                            }
                            }
                            public function dispose():void
                            {
                                            extContext.removeEventListener(StatusEvent.STATUS, onStatus);
                                            extContext.dispose();
                                            extContext = null;
                            }
    public function rewardedAdLoad(value:String):void
    {
         extContext.call("rewardedAdLoad", value);
    }
               
    public function rewardedAdShow():void
    {
         extContext.call("rewardedAdShow");
    }
            }
}
 

Descripteur:

<android>
    <manifestAdditions><![CDATA[<manifest>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application>
    <meta-data
         android:name="com.google.android.gms.ads.APPLICATION_ID"
         android:value="ca-app-pub-4088575284661660~--------------"/>
                            <meta-data
         android:name="com.google.android.gms.version"
         android:value="12451000" />
                            <activity android:name="com.google.android.gms.ads.AdActivity"
                                    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
                                    android:theme="@android:style/Theme.Translucent" />
                    </application>
</manifest>]]></manifestAdditions>
  </android>
 


#204 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 17:43 PM

ajoute après "android.permission.INTERNET"
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

est-ce que trace( event.message ); renvoie quelque chose ?

joint ton ane je vais vérifier

#205 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 18:05 PM

Non je n'ais pas de trace.
http://apklgc.free.fr/AdMob.ane

#206 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 18:16 PM

ton fichier n'est pas valide 43 octets ?

#207 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 19:25 PM

Le fichier ANE ? il fait 14 mo.

#208 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 19:29 PM

pb d'antivirus après test ton ane fonctionne correctement

#209 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 20:30 PM

C'est ok, ça fonctionne, petit soucis dans le descripteur.

#210 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 26 April 2020 - 20:51 PM

J'ai placé un btn pour afficher la pub sur demande mais une fois lue ou fermée, elle ne revient plus, c'est parce que c'est une demo ou un paramètre à voir dans la console AdMob d'après toi ?

Sinon un gros merci pour tout Mr pol2095.

#211 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 26 April 2020 - 22:53 PM

Il faudrait voir ton code, je peux lancer la vidéo plusieurs fois.
Il faut charger une nouvelle annonce à chaque fois.

var admob:AdMob = new AdMob();
var adUnitId:String = "ca-app-pub-3940256099942544/5224354917"; // test
admob.addEventListener(AdMobEvent.INFO, infoHandler);

btn.addEventListener(MouseEvent.CLICK, onClick);

function onClick(event:MouseEvent):void
{
        admob.rewardedAdLoad(adUnitId);
}

function infoHandler(event:AdMobEvent):void
{
        trace( event.message );
        if( event.message == "loadedRewardedAd" ) admob.rewardedAdShow();
}


#212 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 27 April 2020 - 07:26 AM

Bonjour pol2095,
Oui elles reviennent bien effectivement, en fait elles sont plus ou moins longues à charger ce n'est pas instantané. Le principale c'est que ça fonctionne.

#213 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 07 May 2020 - 12:45 PM

Bonjour pol2095,

Je n'avais pas prévu n'y pensé cette situation au départ mais comment savoir si l'annonce vidéo à été complètement lue afin de déclencher une action de récompense ou pas.

#214 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 07 May 2020 - 12:51 PM

on aurait pu créer un écouteur pour ça mais tu peux utiliser

function infoHandler(event:AdMobEvent):void
{
                trace( event.message );
                if( event.message == "loadedRewardedAd" ) admob.rewardedAdShow();
                if( event.message.indexOf("reward : ") == 0 ) recompense();
}

function recompense():void
{
                //
}


#215 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 07 May 2020 - 17:46 PM

Merci pol2095, ça suffit amplement, c'est parfait ;-) !



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)