Android 使用LibGDX实现AdMob奖励视频
我正在用LibGDX创建一个游戏,想在上面放一些有奖励的视频,但我不知道怎么做 我已经在本教程中显示了admob横幅: 我已经看到了这个问题,但不明白该把代码放在哪里:Android 使用LibGDX实现AdMob奖励视频,android,libgdx,admob,admob-rewardedvideoad,Android,Libgdx,Admob,Admob Rewardedvideoad,我正在用LibGDX创建一个游戏,想在上面放一些有奖励的视频,但我不知道怎么做 我已经在本教程中显示了admob横幅: 我已经看到了这个问题,但不明白该把代码放在哪里: public void showVideoAd(){ runOnUiThread(new Runnable() { public void run() { if (mAd.isLoaded()) { mAd.show(
public void showVideoAd(){
runOnUiThread(new Runnable() {
public void run() {
if (mAd.isLoaded()) {
mAd.show();
} else {
loadRewardedVideoAd();
}
}
});
}
public boolean hasVideoReward(){
return isRewardLoaded;
//return mAd.isLoaded(); // -> must be called on the main UI thread.
}
(首先,其中未声明任何mAd):
最后一次,我又做了几次实验:
AdHandler.java:
public interface AdHandler {
public void showVideo();
}
安德鲁伊德拉舍尔:
public class AndroidLauncher extends AndroidApplication implements AdHandler {
RewardedVideoAd rewardedVideoAd;
@Override
public void showVideo() {
if (rewardedVideoAd.isLoaded()) {
rewardedVideoAd.show();
}
}
Handler handler = new Handler();
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
initialize(new Restart(this), config);
rewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
rewardedVideoAd.setRewardedVideoAdListener(new RewardedVideoAdListener() {
@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) {
}
});
loadRewardedVideoAd();
}
private void loadRewardedVideoAd() {
rewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917", new AdRequest.Builder().build());
}
}
public class AndroidLauncher extends AndroidApplication implements AdHandler {
RewardedVideoAd rewardedVideoAd;
@Override
public void showVideo() {
runOnUiThread(new Runnable() {
@Override public void run() {
if (rewardedVideoAd.isLoaded()) {
rewardedVideoAd.show();
}
}
});
}
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
initialize(new Restart(this), config);
MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
rewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
rewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917", new AdRequest.Builder().build());
rewardedVideoAd.setRewardedVideoAdListener(new RewardedVideoAdListener() {
@Override
public void onRewardedVideoAdLoaded() {
}
@Override
public void onRewardedVideoAdOpened() {
}
@Override
public void onRewardedVideoStarted() {
}
@Override
public void onRewardedVideoAdClosed() {
rewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917", new AdRequest.Builder().build());
}
@Override
public void onRewarded(RewardItem rewardItem) {
}
@Override
public void onRewardedVideoAdLeftApplication() {
}
@Override
public void onRewardedVideoAdFailedToLoad(int i) {
}
});
}
}
然后我在android类上有以下代码:
AdHandler adHandler;
public Restart(AdHandler handler) {
this.adHandler = handler;
}
最后我打电话给你
adHandler.showVideo();
在render()上,是什么导致了错误
java.lang.IllegalStateException:必须在主服务器上调用isLoaded
用户界面线程
(我真的不知道这是什么意思)
如果有人能给我一个完整的工作项目与LibGDX+AdMob奖励视频将是可怕的
[编辑]
所以,经过几次测试,我已经能够使它工作,我只需要改变
@Override
public void showVideo() {
if (rewardedVideoAd.isLoaded()) {
rewardedVideoAd.show();
}
}
到
这就解决了我之前说过的错误
现在代码是这样的:
java:未更改
Andoid发射器:
public class AndroidLauncher extends AndroidApplication implements AdHandler {
RewardedVideoAd rewardedVideoAd;
@Override
public void showVideo() {
runOnUiThread(new Runnable() {
@Override public void run() {
if (rewardedVideoAd.isLoaded()) {
rewardedVideoAd.show();
}
}
});
}
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
initialize(new Restart(this), config);
MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
rewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
rewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917", new AdRequest.Builder().build());
rewardedVideoAd.setRewardedVideoAdListener(new RewardedVideoAdListener() {
@Override
public void onRewardedVideoAdLoaded() {
}
@Override
public void onRewardedVideoAdOpened() {
}
@Override
public void onRewardedVideoStarted() {
}
@Override
public void onRewardedVideoAdClosed() {
rewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917", new AdRequest.Builder().build());
}
@Override
public void onRewarded(RewardItem rewardItem) {
}
@Override
public void onRewardedVideoAdLeftApplication() {
}
@Override
public void onRewardedVideoAdFailedToLoad(int i) {
}
});
}
}
Andoid类:
public class RewVideo extends ApplicationAdapter {
AdHandler adHandler;
public Restart(AdHandler handler) {
this.adHandler = handler;
}
@Override
public void create () {
}
@Override
public void render () {
if (Gdx.input.justTouched()) {
adHandler.showVideo();
}
}
但是,它会用奇怪的消息和异常填充我的日志:
W/Ads:调用Firebase方法getInstance错误。
java.lang.ClassNotFoundException:在路径上未找到类“com.google.android.gms.measurement.AppMeasurement”:
谷歌移动广告SDK不会与Firebase集成。
Admob/Firbase集成需要最新的Firebase SDK jar,但
Firebase SDK缺失或已过期
W/Ads:服务器参数:{…}
W/DynamiteModule:未找到com.google.android.gms.ads.dynamite的本地模块描述符类
W/OkHttpClient:与的连接泄漏。你忘了关闭一个响应机构了吗
W/MessageQueue:Handler(android.os.Handler){c84505c}向死线程上的处理程序发送消息
java.lang.IllegalStateException:处理程序(android.os.Handler){c84505c}向死线程上的处理程序发送消息
带ExoPlayerImplInternal:发布后发送消息(1)。消息被忽略
E/ACodec:[OMX.google.h264.decoder]在输出到DynamicANWBuffer时设置端口模式失败,w/err-1010
视频播放时,此消息每秒显示一次:
W/合子:尝试删除非JNI本地引用,转储线程
除了大量的信息外,我还注意到每一条都有两条信息:“广告加载完成”、“广告打开”和“广告关闭”
这正常吗