[RÉSOLU] Récompense d'une pub doublé

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

[RÉSOLU] Récompense d'une pub doublé

Message par wesh57 » 28 Avr 2020 12:39

Bonjour,

j'ai un souci lors d'une récompense en visionnant une vidéo d'une pub avec le plug-in admob, voila tout fonctionne parfaitement, sauf que lorsque je change de scène et que je reviens à ma scène de départ, les récompense sont doublé (x3 pour 3 scènes changées, x6 pour 6, ...., sachant que dans mes 2 scènes que j'utilise il y a le script ADManager) et je n'arrive pas à comprendre pourquoi sa fait cela.

voici mon code :

Code : Tout sélectionner


using UnityEngine;
using GoogleMobileAds.Api;
using System;
using UnityEngine.UI;

public class ADManager : MonoBehaviour
{
    private string APP_ID = "...";

    private BannerView bannerAD;
    private InterstitialAd interstitialAD;
    private RewardBasedVideoAd rewardVideoAD;

    private GameObject Player;

    // Start is called before the first frame update
    void Start()
    {
        Player = GameObject.Find("Player");

        //MobileAds.Initialize(APP_ID);

        // Get singleton reward based video ad reference.
        this.rewardVideoAD = RewardBasedVideoAd.Instance;

        // Called when an ad request failed to load.
        rewardVideoAD.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
        // Called when the user should be rewarded for watching a video.
        rewardVideoAD.OnAdRewarded += HandleRewardBasedVideoRewarded;
        // Called when the ad is closed.
        rewardVideoAD.OnAdClosed += HandleRewardBasedVideoClosed;

        RequestBannerAD();
        RequestInterstitialAD();
        RequestVideoAD();

        Display_BannerAD();
    }

    void RequestBannerAD()
    {
        //string banner_ID = "...";
        string banner_ID = "...";
        bannerAD = new BannerView(banner_ID, AdSize.SmartBanner, AdPosition.Top);
    }

    public void Display_BannerAD()
    {
        //Real APP
        //AdRequest adRequest = new AdRequest.Builder().Build();

        //Test
        AdRequest adRequest = new AdRequest.Builder().AddTestDevice("...").Build();

        bannerAD.LoadAd(adRequest);
    }


    void RequestInterstitialAD()
    {
        //string interstitial_ID = "...";
        string interstitial_ID = "...";
        interstitialAD = new InterstitialAd(interstitial_ID);

        //Real APP
        //AdRequest adRequest = new AdRequest.Builder().Build();

        //Test
        AdRequest adRequest = new AdRequest.Builder().AddTestDevice("...").Build();

        interstitialAD.LoadAd(adRequest);
    }

    public void Display_InterstitialAD()
    {
        if (interstitialAD.IsLoaded())
        {
            interstitialAD.Show();
        }
    }


    void RequestVideoAD()
    {
        //string video_ID = "...";
        string video_ID = "...";
        rewardVideoAD = RewardBasedVideoAd.Instance;

        //Real APP
        //AdRequest adRequest = new AdRequest.Builder().Build();

        //Test
        AdRequest adRequest = new AdRequest.Builder().AddTestDevice("...").Build();

        rewardVideoAD.LoadAd(adRequest, video_ID);
    }

    public void Display_Reward_Video()
    {
        if (rewardVideoAD.IsLoaded())
        {
            rewardVideoAD.Show();
        }
    }



    //BANNER
    public void HandleOnAdLoaded(object sender, EventArgs args)
    {
        Display_BannerAD();
    }

    public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        RequestBannerAD();
    }


    //REWARD VIDEO
    public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        RequestVideoAD();
    }

    public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
    {
        RequestVideoAD();
    }

    public void HandleRewardBasedVideoRewarded(object sender, Reward args)
    {
            PlayerPrefs.SetInt("coin", PlayerPrefs.GetInt("coin", 0) + 300);
            RequestVideoAD();
    }
}

Dernière édition par wesh57 le 28 Avr 2020 22:19, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Récompense d'une pub doublé

Message par boubouk50 » 28 Avr 2020 12:56

As-tu un DontDestroyOnLoad sur le gameObject? Ou quelque chose qui fait que ce script se retrouve 2 fois? Ou alors que celui qui y fait appel soit dupliqué?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Re: Récompense d'une pub doublé

Message par wesh57 » 28 Avr 2020 16:51

Non je n'ai pas de DontDestroyOnLoad et rien de d'un truc comme ça, le script complet de Admob est au-dessus.
Sa fait plusieurs heures que je recherche sur google et je pense que ça vient de cette ligne-là.

Code : Tout sélectionner

	// Called when an ad request failed to load.
        rewardVideoAD.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
        // Called when the user should be rewarded for watching a video.
        rewardVideoAD.OnAdRewarded += HandleRewardBasedVideoRewarded;
        // Called when the ad is closed.
        rewardVideoAD.OnAdClosed += HandleRewardBasedVideoClosed;
Mais bon quand je l’enlève rien ne se passe :(
Je n'arrive pas à comprendre

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Récompense d'une pub doublé

Message par boubouk50 » 28 Avr 2020 18:18

Peut-être que tu t'inscris plusieurs fois à l'event. Du coup, lorsqu'il est levé, ta fonction est appelée autant de fois qu'elle est inscrite.
Fais-tu bien la désinscription?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Re: Récompense d'une pub doublé

Message par wesh57 » 28 Avr 2020 21:29

Non je ne crois pas, tu parle bien d'un truc comme ça?

Code : Tout sélectionner

rewardVideoAD.OnAdRewarded -= HandleRewardBasedVideoRewarded;
Si oui, j'ai déjà vu des bouts de codes en faisant des recherches sur Admob, mais je ne sais pas à quoi ça sert, ni où le placer dans mon code.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Récompense d'une pub doublé

Message par boubouk50 » 28 Avr 2020 21:36

Oui

Code : Tout sélectionner

rewardVideoAD.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
Ici, tu t'abonnes à un event. C'est à dire qu'a chaque fois que l'event rewardVideoAD.OnAdFailedToLoad est levé, la fonction HandleRewardBasedVideoFailedToLoad est appelée.
Si tu t'abonnes 2 fois, la fonction est appelée 2 fois. Et ainsi de suite.
Il faut donc penser à ce désabonner

Code : Tout sélectionner

rewardVideoAD.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
Pour éviter l'accumulation.

A toi de trouver où et quand te désabonner (avant un changement de scène, sur un OnDisable (), etc)
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Re: Récompense d'une pub doublé

Message par wesh57 » 28 Avr 2020 22:18

Ohhhh
j'ai fait comme tu me la conseillé avec OnDisable() et sa marche, j'ai plus de duplication de récompense :amen: :-D
MERCIIIIII, tu me sauves

Répondre

Revenir vers « Scripting »