Unity3D Google admob: пользователь получает награду дважды (или больше) - PullRequest
0 голосов
/ 21 января 2020

Я создал систему ежедневных наград, в которой игрок может получать около трех 500 монет в день, например 1/3 золотых монет. Я использую Admob Unity Plugin , чтобы показать игроку вознагражденные видео, когда они нажимают на кнопку, чтобы получить 500 золотых монет, на кнопку можно нажать 3 раза, и каждый раз, когда игрок смотрит видео наград, он получает 500 золотые монеты.

Моя проблема:

1: Если пользователь нажимает на кнопку вознаграждения и впервые полностью просматривает видео с вознаграждением, мой int увеличится до 1, а игрок получит 500 монет - ( так что 1/3 с 500 монетами

1008 * 2: если пользователь нажимает на кнопку вознаграждения второй раз, но затем решает закрыть видео вознаграждения, int будет не увеличиваться и игрок не награждается 500 монетами (это все еще 1/3 с 500 монетами)

3: но если пользователь решит нажать на кнопку вознаграждения, а затем решил Посмотрите новое видео с наградами полностью, int увеличится на 2 (вместо 1), и игрок теперь будет вознагражден 1000 золотых монет (вместо 500) - (сейчас, 3/3 с 1500 золотыми монетами)

ПРИМЕЧАНИЕ: в этом порядке не указано c, пользователь может сделать этот метод с самого начала или до того, как int достигнет 3/3, и сделать это, однако, много раз пользователь хочет, просто закрывая видео наград много времени (не завершая видео ео) пока не доволен, а затем просмотр видео награды полностью 3 раза.

Я не буду включать свой ежедневный сценарий вознаграждения, поскольку я не верю, что это вызывает мою проблему. Пожалуйста, кто-нибудь может мне помочь с этим, спасибо !!!!

Это мой сценарий вознаграждения:

    {
        public Admob ad;
        public int clickInt = 0;
        public Text clickText;
        public Image coinImage;
        public Button rewardButton;


    void Awake()
    {
            if (PlayerPrefs.HasKey("amount"))
            {
                clickInt = PlayerPrefs.GetInt("amount");
            }
     }


      void Start ()
        {
#if UNITY_EDITOR
    Debug.Log("Unable to play ad in the EDITOR");
       if (clickInt == 1) { 
            clickText.text = "1/3 Daily uses"; 
       } else if (clickInt == 2) { 
            clickText.text = "2/3 Daily uses"; 
       } else if (clickInt >= 3) {
            clickInt = 3;
       }

       if (clickInt == 3) {
           clickText.text = "3/3 Daily uses";
       }
#elif UNITY_ANDROID

       if (clickInt == 1) { 
           clickText.text = "1/3 Daily uses"; 
       } else if (clickInt == 2) { 
           clickText.text = "2/3 Daily uses"; 
       } else if (clickInt >= 3) {
           clickInt = 3;
       }

       if (clickInt == 3) {
           clickText.text = "3/3 Daily uses";
       }     
#endif
      }

    // Update is called once per frame
    void Update()
    {
#if UNITY_EDITOR
    Debug.Log("Unable to play ad in the EDITOR");
       if (clickInt == 1) { 
            clickText.text = "1/3 Daily uses"; 
       } else if (clickInt == 2) { 
            clickText.text = "2/3 Daily uses"; 
       } else if (clickInt >= 3) {
            clickInt = 3;
       }

       if (clickInt == 3) {
           clickText.text = "3/3 Daily uses";
       }
#elif UNITY_ANDROID

        ad = Admob.Instance ();
       if (ad.isRewardedVideoReady ()) {
          coinImage.enabled = true;
       } else {
          ad.loadRewardedVideo ("ca-app-pub-…………………/……………"); 
          coinImage.enabled = false;
       }

       if (clickInt == 1) { 
           clickText.text = "1/3 Daily uses";
           rewardButton.interactable = true; 
       } else if (clickInt == 2) { 
           clickText.text = "2/3 Daily uses";
           rewardButton.interactable = true;  
       } else if (clickInt >= 3) {
           clickInt = 3;
       }

       if (clickInt == 3) {
           clickText.text = "3/3 Daily uses";
           rewardButton.interactable = false; 
       }     
#endif
      }




       public void Free_500_Coins()
        {
#if UNITY_EDITOR
        Debug.Log("Unable to play ad in the EDITOR");
         clickInt += 1;
        ShopManager.Playercurrency += 500;
#elif UNITY_ANDROID
        if (ad.isRewardedVideoReady ()) {
            Admob.Instance().interstitalRewardHandler += onInterstitalRewardVideoEvent;
            coinImage.enabled = true;
        ad.showRewardedVideo ();
    } else {
            ad.loadRewardedVideo ("ca-app-pub-............/..........."); 
            coinImage.enabled = false;
        }
#endif
    }


    void onInterstitalRewardVideoEvent(string eventNames, string msgs)
    {
        if (eventNames == "onRewarded")
        {
                Admob.Instance().interstitalRewardHandler -= onInterstitalRewardVideoEvent;
                Debug.Log("Well Done! You got 500 coins");
                clickInt += 1;
                ShopManager.Playercurrency += 500;
                Debug.Log("handler AdmobEventsHandler---" + eventNames + "   " + msgs);
        }
     }

    public void OnDestroy()
    {
        Admob.Instance().interstitalRewardHandler -= onInterstitalRewardVideoEvent;
    }

   }```   

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Вы должны удалить «onInterstitalRewardVideoEvent» из всех назначений с помощью + & - и добавить ниже этих строк.

 void OnEnable() {
    Admob.Instance().interstitalRewardHandler += onInterstitalRewardVideoEvent;
}
void OnDisable() {
    Admob.Instance().interstitalRewardHandler -= onInterstitalRewardVideoEvent;
}
0 голосов
/ 21 января 2020

Просто измените if (ad.isRewardedVideoReady ()) { на if (ad.isRewardedVideoReady () && !coinImage.enabled) {.

Спам на кнопке, которая вызывает Free_500_Coins, приведет к двум вызовам для добавления обработчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...