简体   繁体   English

AdMob奖励的视频广告无法在Android的片段内加载

[英]AdMob Rewarded Video Ads Failed to Load inside Fragment in Android

Admob rewarded video ads fail to load in fragment. 奖励Admob的视频广告无法分段加载。 I think there is problem in these two lines 我认为这两行有问题

mAd = MobileAds.getRewardedVideoAdInstance(getActivity()); mAd.setRewardedVideoAdListener(this);

Please check the code below. 请检查下面的代码。 The code is working fine in Activity but doesn't work in Fragment. 该代码在“活动”中工作正常,但在“片段”中无效。

public class FragmentWatchEarn extends Fragment implements RewardedVideoAdListener {
    int coins = 0;

    View rootView;
    Button bAdmob;
    TextView tvCoins;

    private RewardedVideoAd mAd;//Admob
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_watch_earn, container, false);
        bAdmob = (Button) rootView.findViewById(R.id.btnAdmob);

        admobAdsPart();

        return rootView;
    }
    private void admobAdsPart() {
        mAd = MobileAds.getRewardedVideoAdInstance(getActivity()); //Might me Problem in this line
        mAd.setRewardedVideoAdListener(this); //Might me Problem in this line
        loadAd();

        bAdmob.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(mAd.isLoaded()){
                    mAd.show();
                }else {
                    Toast.makeText(getActivity(), "Ad not yet loaded", Toast.LENGTH_SHORT).show();
                    loadAd();
                }
            }
        });
    }

    private void loadAd() {
        if (!mAd.isLoaded()) {
            mAd.loadAd("ca-app-pub-5059726881726792/4575431467", 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) {
        coins = coins + 20;
        myRef.setValue("" + coins);
    }

    @Override
    public void onRewardedVideoAdLeftApplication() {

    }

    @Override
    public void onRewardedVideoAdFailedToLoad(int i) {
        Toast.makeText(getActivity(), "Admob Ad Failed to load", Toast.LENGTH_SHORT).show();
    }
}

This code works for me. 该代码对我有用。

With this code you dont have to implement the OnRewardListener in the top side of your XXXXXFragment.java 使用此代码,您不必在XXXXXFragment.java的顶部实现OnRewardListener。

private RewardedVideoAd mRewardedVideoAd;

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        rootView = inflater.inflate(R.layout.fragment_main, container, false);
        mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(getContext());
        mRewardedVideoAd.setRewardedVideoAdListener(rewardedVideoAdListener);

        CircleImageView circleImageView = (CircleImageView)rootView.findViewById(R.id.btn_play);
        circleImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                loadRewardedVideoAd();
            }
        });
        return rootView;
    }

    RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() {
        @Override
        public void onRewardedVideoAdLoaded() {
            Toast.makeText(getActivity(), "onRewardedVideoAdLoaded", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onRewardedVideoAdOpened() {
            Toast.makeText(getActivity(), "onRewardedVideoAdOpened", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onRewardedVideoStarted() {
            Toast.makeText(getActivity(), "onRewardedVideoStarted", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onRewardedVideoAdClosed() {
            Toast.makeText(getActivity(), "onRewardedVideoAdClosed", Toast.LENGTH_SHORT).show();
            ////// UpdateDataBase
        }

        @Override
        public void onRewarded(RewardItem reward) {
            Toast.makeText(getActivity(), getString(R.string.on_rewarded_video) + " " +  reward.getAmount() + " " + reward.getType(), Toast.LENGTH_LONG).show();
            // Reward the user.
        }

        @Override
        public void onRewardedVideoAdLeftApplication() {
            Toast.makeText(getActivity(), "onRewardedVideoAdLeftApplication", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onRewardedVideoAdFailedToLoad(int i) {
            Toast.makeText(getActivity(), "onRewardedVideoAdFailedToLoad", Toast.LENGTH_SHORT).show();
        }
    };

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

I hope it can helps you 我希望它可以帮助您

Try to change: 尝试更改:

mAd = MobileAds.getRewardedVideoAdInstance(getContext());

I have same code and it's working. 我有相同的代码,并且可以正常工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM