Я пытаюсь внедрить рекламу admob во фрагменте, но прошел месяц, а я все еще получаю ошибку 3 (нет объявлений для заполнения).
Я пробовал использовать новый идентификатор, но все равно получаю ту же ошибку, тестовые объявления работают нормально. logcat:
08-03 16:59:21.653 9892-10265/? W/AdvertisingIdClient: Error while reading from SharedPreferences
java.lang.SecurityException: MODE_WORLD_READABLE no longer supported
at android.app.ContextImpl.checkMode(ContextImpl.java:2134)
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:354)
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:349)
at
com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo(Unknown Source)
at com.duapps.ad.base.GoogleAdvertisingIdHelper.getAdIdNormal(GoogleAdvertisingIdHelper.java:46)
at com.duapps.ad.base.GoogleAdvertisingIdHelper.getAdId(GoogleAdvertisingIdHelper.java:33)
at com.duapps.ad.base.HttpParamsHelper.commonParams(HttpParamsHelper.java:118)
at com.duapps.ad.stats.ToolStatsCore.pushToServer(ToolStatsCore.java:370)
at com.duapps.ad.stats.ToolStatsCore.report(ToolStatsCore.java:325)
at com.duapps.ad.stats.ToolStatsCore.handleMessage(ToolStatsCore.java:217)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
08-03 16:59:24.873 26224-26246/? D/DynamitePackage: Instantiating
com.google.android.gms.ads.adshield.ChimeraAdShieldCreatorImpl
08-03 16:59:25.489 25315-25315/com.nsdeveloper.apppromotion I/Ads:
Starting ad request.
08-03 16:59:25.489 25315-25315/com.nsdeveloper.apppromotion I/Ads: Use
AdRequest.Builder.addTestDevice("10C9D896CF812C194BD949D82F766C9B")
to get test ads on this device.
08-03 16:59:25.850 25315-25332/com.nsdeveloper.apppromotion I/Ads: No fill from ad server.
08-03 16:59:25.850 25315-25315/com.nsdeveloper.apppromotion W/Ads: Failed to load ad: 3Я реализую рекламу во фрагменте, поэтому в контексте я передавал getActivity ():
MobileAds.initialize(getActivity(), "xxxxxxxxxxxxxxxxxxx");
mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(getActivity());
mRewardedVideoAd.setRewardedVideoAdListener(rewardAdListener);
loadRewardedAdVideo();
RewardVideoAdListener
RewardedVideoAdListener rewardAdListener = new RewardedVideoAdListener() {
@Override
public void onRewardedVideoAdLoaded() {
Toast.makeText(getActivity(),"ad is loaded",Toast.LENGTH_SHORT).show();
Log.d("ADS_SHOW","loaded");
}
@Override
public void onRewardedVideoAdOpened() {
}
@Override
public void onRewardedVideoStarted() {
}
@Override
public void onRewardedVideoAdClosed() {
loadRewardedAdVideo();
}
@Override
public void onRewarded(RewardItem rewardItem) {
int rewardPoints = rewardItem.getAmount();
int userPoints = getActivity().getSharedPreferences(PREFERENCE,0).getInt(POINTS,0) - rewardPoints;
userRef.child(POINTS).setValue(userPoints);
getActivity().getSharedPreferences(PREFERENCE,0).edit().putInt(POINTS,userPoints).commit();
}
@Override
public void onRewardedVideoAdLeftApplication() {
}
@Override
public void onRewardedVideoAdFailedToLoad(int i) {
Toast.makeText(getActivity(),"No ads to show "+i,Toast.LENGTH_SHORT).show();
}
@Override
public void onRewardedVideoCompleted() {
}
};
private void loadRewardedAdVideo(){
if (! mRewardedVideoAd.isLoaded()){
mRewardedVideoAd.loadAd("ca-app-pub-xxxxxxxxx", new AdRequest.Builder().build());
}
}
Вы используете SharePreference в режиме MODE_WORLD_READABLE где-нибудь в вашем коде? Также разместите свой код.
Я использую SharedPreferences с режимом по умолчанию 0, и я не думаю, что это было связано с ошибкой admob
Просто закомментируйте весь код внутри onRewarded(), просто распечатайте журнал. И проверьте, получите ли вы на этот раз ошибку или нет.
получение той же ошибки @ADM
Ну, я никогда не работал с admob. Но вы должны добавить зависимость, которую вы используете, с вопросом. См. Также Эта проблема. Это может проблема версии. Использовать последнюю зависимость от Здесь.
Я использую обновленные зависимости, и, как я уже сказал, тестовые объявления работают отлично, но когда я использую свой идентификатор, я получаю ошибку 3 (и уже месяц я получал эту ошибку) @ADM
Попробуйте запустить свою рекламу в тестовом режиме, если он покажет вам ошибку, тогда ваш код должен быть неправильным, прочтите документ реализации admob Документы Google для видеорекламы
Одна вещь, которую я заметил, что вы можете попытаться прочитать общее предпочтение в общедоступном режиме, оно должно быть написано в частном режиме, поэтому возникает ошибка.
Если вы видите рекламу в тестовом режиме, возможно, у меня есть две вещи: один идентификатор вашего приложения может быть неправильным, во-вторых, в вашем районе нет такой рекламы с вознаграждением, поэтому Google не может заполнить рекламу.
Я пробовал запускать рекламу в тестовом режиме, и она отлично работает. и я нигде не использую sharedPreference в общедоступном режиме, я проверял его два раза. Я также попытался создать новый идентификатор приложения.
Убедитесь, что ваш идентификатор приложения и идентификатор объявления верны или нет, он не должен выдавать ошибку, если он работает в тестовом режиме.
У меня была такая же проблема - я читал в Интернете, что Google может позже решить, включить ли вашу рекламу или нет.
Иногда они отключают рекламу, потому что разработчик нажимает на нее. Многие разработчики поступали так в прошлом, и поэтому Google кажется осторожным с этим.
В конце концов, я не решил свою проблему с google - я также написал в их поддержку и зарегистрировался в аудитории сети facebook - это то же самое, только facebook. Теперь я их получаю. Существует также система, которая позволяет вам регистрировать тестовые устройства - это означает, что по идентификатору вашего телефона вы также можете нажимать на рекламу, и с этим не будет проблем - поскольку теперь это тестовое устройство.
пожалуйста, покажите нам код для рекламы admob