Как интегрировать рекламу с вознаграждением Admob в Android?

#android #admob

#Android #admob

Вопрос:

Я борюсь с admob rewarded ads интеграцией. Я пробовал использовать учебные пособия Google, но не смог добиться того, чего хочу.

Пожалуйста, предложите мне какой-нибудь хороший tutorial (предпочтительный видеоурок) для интеграции admob rewarded рекламы в Android.

Комментарии:

1. вот видеоурок: youtu.be/TIiY1VIIQwg (взято отсюда: firebase.google.com/docs/admob/android/rewarded-video )

2. Следуйте этой статье — developine.com /…

Ответ №1:

     public class YourActivity extends AppCompatActivity implements  RewardedVideoAdListener     


    RewardedVideoAd mAd = MobileAds.getRewardedVideoAdInstance(this);
    mAd.setRewardedVideoAdListener(this);
    loadRewardedVideo();

    private void loadRewardedVideo() {
    mAd.loadAd(getString("YOUR_AD_UNIT_ID"),
            new AdRequest.Builder()
                    .build());
    }
  

Вот слушатель:

 @Override
public void onRewardedVideoAdLoaded() {
    Log.i(TAG, "Rewarded: onRewardedVideoAdLoaded");
    try {
        if (mAd.isLoaded()) {
            mAd.show();
        }
    } catch (NullPointerException e) {
        e.printStackTrace();
    }
}

@Override
public void onRewardedVideoAdOpened() {
    Log.i(TAG, "Rewarded: onRewardedVideoAdOpened");
}

@Override
public void onRewardedVideoStarted() {
    Log.i(TAG, "Rewarded: onRewardedVideoStarted");
}

@Override
public void onRewardedVideoAdClosed() {
    Log.i(TAG, "Rewarded: onRewardedVideoAdClosed");
}

@Override
public void onRewarded(RewardItem rewardItem) {
    Log.i(TAG, "Rewarded:  onRewarded! currency: "   rewardItem.getType()   "  amount: "  
            rewardItem.getAmount());

}

@Override
public void onRewardedVideoAdLeftApplication() {
    Log.i(TAG, "Rewarded: onRewardedVideoAdLeftApplication ");
}

@Override
public void onRewardedVideoAdFailedToLoad(int i) {
    Log.i(TAG, "Rewarded: onRewardedVideoAdFailedToLoad: "   i);

}
  

Комментарии:

1. Это работает, но, когда открывается видеореклама с вознаграждением, она показывает исключение ниже: просочилось окно MainActivity

Ответ №2:

 public class MainActivity extends AppCompatActivity implements RewardedVideoAdListener {
private RewardedVideoAd mAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
    // Use an activity context to get the rewarded video instance.
    mAd = MobileAds.getRewardedVideoAdInstance(this);
    mAd.setRewardedVideoAdListener(this);
    loadRewardedVideoAd();

    Button button=(Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (mAd.isLoaded()) {
                mAd.show();
            }
        }
    });

}

@Override
public void onResume() {
    mAd.resume(this);
    super.onResume();
}

@Override
public void onPause() {
    mAd.pause(this);
    super.onPause();
}

@Override
public void onDestroy() {
    mAd.destroy(this);
    super.onDestroy();
}

private void loadRewardedVideoAd() {
    mAd.loadAd("ca-app-pub-3940256099942544/5224354917",
       new AdRequest.Builder().build());
}

@Override
public void onRewardedVideoAdLoaded() {

}

@Override
public void onRewardedVideoAdOpened() {

}

@Override
public void onRewardedVideoStarted() {

}

@Override
public void onRewardedVideoAdClosed() {

}

@Override
public void onRewarded(RewardItem rewardItem) {

}

@Override
public void onRewardedVideoAdLeftApplication() {

}

@Override
public void onRewardedVideoAdFailedToLoad(int i) {

}
  

Ответ №3:

Рекламные объявления с вознаграждением — это популярный формат рекламы, который дает пользователям возможность посмотреть видео или подключиться к воспроизводимой рекламе в обмен на вознаграждение в приложении.

Импортируйте Firebase Ads SDK

Чтобы показывать рекламу в нашем приложении, мы должны сначала внедрить Admob sdk в наше приложение, для этого.

Перейдите в раздел Gradle Scripts -> build.gradle (модуль: приложение) и импортируйте зависимости ниже, а затем нажмите «синхронизировать сейчас» вверху:

 dependencies {
     // adding Admob SDK
     implementation 'com.google.firebase:firebase-ads:20.3.0'
}
  

Загрузите объект с вознаграждением

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

public class MainActivity extends Activity {
  private RewardedAd mRewardedAd;
  private final String TAG = "MainActivity";

  @Override
  protected void onCreate(Bundle savedInstanceState) {

    AdRequest adRequest = new AdRequest.Builder().build();

    RewardedAd.load(this, "ca-app-pub-3940256099942544/5224354917",
      adRequest, new RewardedAdLoadCallback() {
        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
          // Handle the error.
          Log.d(TAG, loadAdError.getMessage());
          mRewardedAd = null;
        }

        @Override
        public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
          mRewardedAd = rewardedAd;
          Log.d(TAG, "Ad was loaded.");
        }
    });
  }
}
  

Показать объявление

Когда вы показываете рекламу с вознаграждением, вы будете использовать объект OnUserEarnedRewardListener для обработки событий вознаграждения.

   Activity activityContext = MainActivity.this;
  mRewardedAd.show(activityContext, new OnUserEarnedRewardListener() {
    @Override
    public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
      // Handle the reward.
      Log.d(TAG, "The user earned the reward.");
      int rewardAmount = rewardItem.getAmount();
      String rewardType = rewardItem.getType();
    }
  });
} else {
  Log.d(TAG, "The rewarded ad wasn't ready yet.");
}
  

Для получения дополнительной информации / исходного кода
https://github.com/Shiv-Shambhu/Admob-Rewarded-Ads-Android

Комментарии:

1. И как обработать событие, когда пользователь закрыл событие до того, как получил вознаграждение?

Ответ №4:

 import android.util.Log
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import com.google.android.gms.ads.*
import com.google.android.gms.ads.rewarded.RewardedAd
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback

class GoogleAdsActivity : AppCompatActivity() {
    private var mRewardedAd: RewardedAd? = null
    private var totalRewardAmount = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_google_ads)
        val sharedPreferences = getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE)
        totalRewardAmount = sharedPreferences.getInt("totalRewardAmount", 0)
        findViewById<TextView>(R.id.totalRewardedAmountText).text = totalRewardAmount.toString()
        loadRewardedAds()
        findViewById<Button>(R.id.rewarded_adsBtn).setOnClickListener {
            showRewardedAds()
        }
   }
}
  
  private fun loadRewardedAds() {
        val adRequest = AdRequest.Builder().build()

        RewardedAd.load(
            this,
            getString(R.string.rewardedAdsId),
            adRequest,
            object : RewardedAdLoadCallback() {

                override fun onAdFailedToLoad(adError: LoadAdError) {
                    Log.d("TAG", adError.message)
                    mRewardedAd = null
                }

                override fun onAdLoaded(rewardedAd: RewardedAd) {
                    Log.d("TAG", "Ad was loaded.")
                    mRewardedAd = rewardedAd
                }
            })
    }

    private fun showRewardedAds() {
        if (mRewardedAd != null) {
            mRewardedAd?.fullScreenContentCallback = object : FullScreenContentCallback() {

                override fun onAdDismissedFullScreenContent() {
                    Log.d("TAG", "Ad was dismissed.")
                    // Don't forget to set the ad reference to null so you
                    // don't show the ad a second time.
                    mRewardedAd = null
                    loadRewardedAds()
                }

                override fun onAdFailedToShowFullScreenContent(adError: AdError?) {
                    Log.d("TAG", "Ad failed to show.")
                    // Don't forget to set the ad reference to null so you
                    // don't show the ad a second time.
                    mRewardedAd = null
                }

                override fun onAdShowedFullScreenContent() {
                    Log.d("TAG", "Ad showed fullscreen content.")
                    // Called when ad is dismissed.

                }
            }
            mRewardedAd?.show(this) {
                val rewardAmount = it.amount
                Log.d("rewardAmount", rewardAmount.toString())
                totalRewardAmount  = rewardAmount
                val sharedPreferences =
                    getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE)
                sharedPreferences.edit().putInt("totalRewardAmount", totalRewardAmount)
                    .apply()
                Log.d("TAG", rewardAmount.toString())
                findViewById<TextView>(R.id.totalRewardedAmountText).text =
                    totalRewardAmount.toString()
            }


        } else {
            Toast.makeText(this, "Ads is not loaded", Toast.LENGTH_LONG).show()
        }
}
//    Todo: Rewarded Ads
  

Ответ №5:

 Use this Id for Testing : - ca-app-pub-4824494878097656/8403117409

package com.safal.bhatia;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
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 Demo extends AppCompatActivity implements RewardedVideoAdListener {

    private RewardedVideoAd mRewardedVideoAd;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
rewardAds();
    }
    private void rewardAds() {
        mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
        mRewardedVideoAd.setRewardedVideoAdListener(this);
        loadRewardedVideoAd();
    }

    private void loadRewardedVideoAd() {
        mRewardedVideoAd.loadAd("ca-app-pub-4824494878097656/8403117409",//use this id for testing
                new AdRequest.Builder().build());

    }

    @Override
    public void onRewarded(RewardItem reward) {
        Toast.makeText(this, "Download to Earn"   reward.getType()   "  amount: "  
                reward.getAmount(), Toast.LENGTH_SHORT).show();

        // Reward the user.
    }

    @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();
        if (mRewardedVideoAd.isLoaded()) {
            mRewardedVideoAd.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();
    }

}
  

Комментарии:

1. Используйте этот идентификатор для тестирования: — ca-app-pub-4824494878097656/8403117409