Partage
  • Partager sur Facebook
  • Partager sur Twitter

Rewarded video sur une application webview

    20 septembre 2018 à 11:07:27

    Bonjour je lance une application android d'un jeu web  et j'aimerai qu'il soit possible que lorsque le joueur et sur une certaine page web (clique sur un bouton qui lui fait gagner des pièces) une pub se lance pour ensuite rediriger le joueur comme il se doit.

    Merci pour ta lecture :)

    • Partager sur Facebook
    • Partager sur Twitter
      21 septembre 2018 à 10:41:19

      Bonjour,

      Je te renvoie à la doc AdMob pour les rewarded video ads  : https://developers.google.com/admob/android/rewarded-video

      Si tu utilises un WebView pour ton jeu, dans ce cas il te faudra utiliser le système JavascriptInterface du WebView pour appeler la fonction native liée au lancement de la pub AdMob : https://developer.android.com/guide/webapps/webview 

      Dans le onRewarded() de l'interface RewardedVideoAdListener, tu injectes le code js dans le WebView pour gérer la récompense dans le jeu. De mémoire tu dois utiliser la méthode loadUrl("javascript:taFonctionJs();") du WebView.

      J'espère avoir pu t'aider.

      • Partager sur Facebook
      • Partager sur Twitter
        4 octobre 2018 à 11:58:45

        Salut et merci de ta réponse, j'ai essayé de suivre ton idée. Cependant ma pub ne s'ouvre pas quand elle est lancé à l'intérieur de la fonction alors que le message "ouverture pub" lui s'affiche bien . La pub google marche bien en tout cas, lorsque je la lance à l'ouverture de l'app ccela marche ! mais pas quand je la lance a travers ma fonction !

        package fr.bbbb.myapplication;
        
        import android.content.Context;
        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        import android.view.View;
        import android.webkit.JavascriptInterface;
        import android.webkit.WebChromeClient;
        import android.webkit.WebView;
        import android.webkit.WebViewClient;
        import android.webkit.WebSettings;
        import android.widget.Toast;
        
        import com.google.android.gms.ads.AdRequest;
        import com.google.android.gms.ads.MobileAds;
        import com.google.android.gms.ads.reward.RewardItem;
        import com.google.android.gms.ads.reward.RewardedVideoAd;
        import com.google.android.gms.ads.reward.RewardedVideoAdListener;
        
        
        public class MainActivity extends AppCompatActivity implements RewardedVideoAdListener{
        
            private WebView webView;
            private RewardedVideoAd mRewardedVideoAd;
        
        
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        
                webView = (WebView) findViewById(R.id.webview);
                webView.setWebViewClient(new WebViewClient());
                WebSettings settings = webView.getSettings();
                settings.setJavaScriptEnabled(true);
                webView.setWebChromeClient(new WebChromeClient());
        
                MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
                mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
                mRewardedVideoAd.setRewardedVideoAdListener(this);
        
                webView.addJavascriptInterface(new MyJavascriptInterface(this) , "Android");
                webView.loadUrl("http://www.bbbb.fr");
                mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917", new AdRequest.Builder().build());
        
            }
        
        
          public class MyJavascriptInterface {
        
                private Context context;
        
                public MyJavascriptInterface(Context context){
                    this.context = context;
                }
        
                @JavascriptInterface
                public void startRewardVideoAndroidFunction(){
                    Toast.makeText(context , "ouverture pub",Toast.LENGTH_SHORT).show();
                    mRewardedVideoAd.show();
        
                }
        
            }
        
        
        
        
            private void loadRewardedVideoAd() {
                mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917", new AdRequest.Builder().build());
            }
        
        
            @Override
            public void onRewardedVideoAdLeftApplication() {
                Toast.makeText(this, "onRewardedVideoAdLeftApplication",Toast.LENGTH_SHORT).show();
            }
        
            @Override
            public void onRewardedVideoAdClosed() {
                Toast.makeText(this, "onRewardedVideoAdClosed", Toast.LENGTH_SHORT).show();
            }
        
            @Override
            public void onRewardedVideoAdFailedToLoad(int errorCode) {
                Toast.makeText(this, "onRewardedVideoAdFailedToLoad", Toast.LENGTH_SHORT).show();
            }
        
            @Override
            public void onRewardedVideoAdLoaded() {
                Toast.makeText(this, "onRewardedVideoAdLoaded", Toast.LENGTH_SHORT).show();
            }
        
            @Override
            public void onRewardedVideoAdOpened() {
                Toast.makeText(this, "onRewardedVideoAdOpened", Toast.LENGTH_SHORT).show();
            }
        
            @Override
            public void onRewardedVideoStarted() {
                Toast.makeText(this, "onRewardedVideoStarted", Toast.LENGTH_SHORT).show();
            }
        
            @Override
            public void onRewardedVideoCompleted() {
                Toast.makeText(this, "onRewardedVideoCompleted", Toast.LENGTH_SHORT).show();
            }
        
        
            @Override
            public void onRewarded(RewardItem rewardItem) {
            loadRewardedVideoAd();
            }
        
        }
        



        -
        Edité par FlorianGirod 4 octobre 2018 à 12:04:40

        • Partager sur Facebook
        • Partager sur Twitter
          4 octobre 2018 à 15:54:35

          Salut,

          Ton code me semble correct dans l'ensemble. Il se peut que la pub ne soit pas totalement chargée par l'api au moment où tu veux l'afficher. Essaye avec ça pour vérifier : 

          if (mRewardedVideoAd.isLoaded()) {
              mRewardedVideoAd.show();
          } else {
              Log.i("Pub", "La publicité n'est pas encore chargée");
          }

          Essaye d'afficher la publicité dans onRewardedVideoAdLoaded() si c'est le cas.

          -
          Edité par Little Programmer 4 octobre 2018 à 15:54:51

          • Partager sur Facebook
          • Partager sur Twitter
            5 octobre 2018 à 17:42:51

            Merci pour ta réponse, j'ai changé un peu le code, la pub test marche mais MAINTENANT c'est ma pub réelle qui ne marche pas ! pourtant j'ai bien mis mes données persos etc, ça me donne le message : Fail à chaque fois.

            package fr.bbbb.myapplication;
            
            import android.content.Context;
            import android.support.v7.app.AppCompatActivity;
            import android.os.Bundle;
            import android.view.View;
            import android.webkit.JavascriptInterface;
            import android.webkit.WebChromeClient;
            import android.webkit.WebView;
            import android.webkit.WebViewClient;
            import android.webkit.WebSettings;
            import android.widget.Toast;
            
            import com.google.android.gms.ads.AdRequest;
            import com.google.android.gms.ads.MobileAds;
            import com.google.android.gms.ads.reward.RewardItem;
            import com.google.android.gms.ads.reward.RewardedVideoAd;
            import com.google.android.gms.ads.reward.RewardedVideoAdListener;
            
            
            public class MainActivity extends AppCompatActivity implements RewardedVideoAdListener{
            
                private WebView webView;
                private RewardedVideoAd mRewardedVideoAd;
            
            
            
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
            
                    webView = (WebView) findViewById(R.id.webview);
                    webView.setWebViewClient(new WebViewClient());
                    WebSettings settings = webView.getSettings();
                    settings.setJavaScriptEnabled(true);
                    webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
                    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
                    webView.getSettings().setAppCacheEnabled(true);
                    webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
                    settings.setDomStorageEnabled(true);
                    settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
                    settings.setUseWideViewPort(true);
                    settings.setSavePassword(true);
                    settings.setSaveFormData(true);
                    settings.setEnableSmoothTransition(true);
            
                    webView.setWebChromeClient(new WebChromeClient());
            
                    MobileAds.initialize(this, "ca-app-pub-1892261722090392~2201910440");
                    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
                    mRewardedVideoAd.setRewardedVideoAdListener(this);
            
                    webView.addJavascriptInterface(new MyJavascriptInterface(this) , "Android");
                    webView.loadUrl("http://www.bbbb.net");
                    mRewardedVideoAd.loadAd("ca-app-pub-18922617220903942/40823933541", new AdRequest.Builder().build());
            
                }
            
            
              public class MyJavascriptInterface {
            
                    private Context context;
            
                    public MyJavascriptInterface(Context context){
                        this.context = context;
                    }
            
                    @JavascriptInterface
                    public void startRewardVideoAndroidFunction(){
                        runOnUiThread(new Runnable() {
                            public void run() {
                                if (mRewardedVideoAd.isLoaded()) {
                                    mRewardedVideoAd.show();
                                }
                            }
            
                        });
                    }
            
                }
            
            
            
            
                private void loadRewardedVideoAd() {
                    mRewardedVideoAd.loadAd("ca-app-pub-18922617220903942/40823933541", new AdRequest.Builder().build());
                }
            
            
                @Override
                public void onRewardedVideoAdLeftApplication() {
                    mRewardedVideoAd.loadAd("ca-app-pub-18922617220903942/40823933541",new AdRequest.Builder().build());
                }
            
                @Override
                public void onRewardedVideoAdClosed() {
                    mRewardedVideoAd.loadAd("ca-app-pub-18922617220903942/40823933541",new AdRequest.Builder().build());
                }
            
                @Override
                public void onRewardedVideoAdFailedToLoad(int errorCode) {
                    Toast.makeText(this, "Fail", Toast.LENGTH_SHORT).show();
                }
            
                @Override
                public void onRewardedVideoAdLoaded() {
            
                }
            
                @Override
                public void onRewardedVideoAdOpened() {
            
                }
            
                @Override
                public void onRewardedVideoStarted() {
                    Toast.makeText(this, "Regarde la vidéo en entier pour valider ton pronostic", Toast.LENGTH_SHORT).show();
                }
            
                @Override
                public void onRewardedVideoCompleted() {
                    webView.loadUrl("javascript:envoyer_formulaire()");
                    Toast.makeText(this, "Grille validée", Toast.LENGTH_SHORT).show();
                    mRewardedVideoAd.loadAd("ca-app-pub-18922617220903942/40823933541",new AdRequest.Builder().build());
                }
            
            
                @Override
                public void onRewarded(RewardItem rewardItem) {
                loadRewardedVideoAd();
                }
            
            }
            



            • Partager sur Facebook
            • Partager sur Twitter
              5 octobre 2018 à 19:09:25

              Salut, 

              On va finir par y arriver ;)

              Je peux pas tester ton code, mais les erreurs sont données avec le errorCode. Je pense que ça doit être les mêmes qu'ici, donc essaie de comprendre avec ça déjà.

              Sinon, vérifie s'il n'y a pas d'erreurs pour le code de la pub et l'id de l'application qui correspond à l'app dans ton compte AdMob.

              Dans ton code, attention avec ton runOnUiThread(...), si le Runnable est exécuté et que la pub n'est pas téléchargée (mauvaise connexion ou autre), la vidéo ne se lancera pas. Je pense qu'utiliser le callback avec un boolean pour lancer la vidéo serait plus judicieux.

              ...
              
              private boolean mustTrigger = false;
              
              ...
              
              @JavascriptInterface
              public void startRewardVideoAndroidFunction(){
                  if (mRewardedVideoAd.isLoaded()) {
                      // pub chargée -> lancer
                      mRewardedVideoAd.show();
                  } else {
                      // la pub est en téléchargement (vu ton code,
                      // loadAd(...) est toujours appelé avant, donc pas de problèmes)
                      mustTrigger = true; // mis à jour pour onRewardedVideoAdLoaded()
                      
                      // Attention, si tu n'es pas sûr d'avoir appelé loadAd(...), 
                      // met le dans ce block
                  }
              }
              
              ...
              
              @Override
              public void onRewardedVideoAdLoaded() {
                  if (mustTrigger) {
                      mRewardedVideoAd.show();
                      mustTrigger = false;
                  }
              }



              • Partager sur Facebook
              • Partager sur Twitter
                6 octobre 2018 à 12:40:55

                Merci en tout cas pour ton aide ! le code est le 0,

                Something happened internally; for instance, an invalid response was received from the ad server.

                Constant Value: 0


                • Partager sur Facebook
                • Partager sur Twitter
                  6 octobre 2018 à 14:46:12

                  Là je sèche ...

                  De ce que j'en comprends, je pense que c'est l'API AdMob Android qui a un problème lorsqu'elle reçoit la réponse du serveur. Le format de données ne doit pas être le bon.

                  Essaye de recréer un bloc d'annonce en prenant soin de le paramétrer pour une annonce avec récompense. On n'est pas à l'abri d'une erreur sur leur serveur quand tu as créé la première.

                  Croisons les doigts.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 octobre 2018 à 15:37:34

                    Merci !!! alors maintenant c'est fait et maintenant c'est erreur 3, admob n'a aucune pub à me proposer ^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 octobre 2018 à 15:45:29

                      Mdr 😂😂😂😂😂😂

                      Ça on y peut rien.

                      Notifie le a ton utilisateur dans le webview ...

                      Si ton application n'est pas publiée officiellement, peut être que Google bloque la diffusion pour éviter de faire payer les annonceurs pour des "fausses" vues.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 octobre 2018 à 15:48:14

                        Ok ok ça marche ! Merci.Juste une question.

                        Je dois mettre quoi dans la premiere ligne à la place de application_id. je dois laisser comme ça

                         <meta-data
                                    android:name="com.google.android.gms.ads.APPLICATION_ID"
                                    android:value="[ADMOB_APP_ID]"/>



                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 octobre 2018 à 19:40:51

                          Tu dois récupérer ton id dans la console AdMob spécifique à ton application et tu l'insères dans l'attribut value.

                          <meta-data
                              android:name="com.google.android.gms.ads.APPLICATION_ID"
                              android:value="ton_app_id_ici"/>



                          • Partager sur Facebook
                          • Partager sur Twitter

                          Rewarded video sur une application webview

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown