使用 SdkInitializationListener 初始化 MoPub
Posted
技术标签:
【中文标题】使用 SdkInitializationListener 初始化 MoPub【英文标题】:MoPub initialization with SdkInitializationListener 【发布时间】:2020-06-04 02:27:26 【问题描述】:我喜欢在 android 中初始化 MoPub SDK 并仅在 SDK 初始化完成且成功后继续加载横幅和插页式广告。
有什么好的方法可以做到这一点?
【问题讨论】:
【参考方案1】:创建一个变量监听器:
private SdkInitializationListener Listner2;
然后将此代码放入您的 oncreate 中:
final SdkConfiguration.Builder configBuilder = new SdkConfiguration.Builder("24534e1901884e398f1253216226017e");
configBuilder.withLogLevel(DEBUG);
Listner2 = new SdkInitializationListener()
@Override
public void onInitializationFinished()
Log.d("MoPub", "SDK initialized");
mInterstitial.load();
;
MoPub.initializeSdk(this, configBuilder.build(), Listner2);
如果 SDK 初始化完成并成功,上面的代码会加载测试插页式。
【讨论】:
【参考方案2】:使用 Android 的新 Livedata 对象非常容易实现。这些对象是可观察的,您可以在应用中的任何位置接收它们的更改。
使用的技术和模式:
实时数据 单例模式 MoPub SDK 5.11.1我会通过代码sn-ps告诉你如何
单例模式
public class MoPubSdk
private static MoPubSdk INSTANCE;
public static MoPubSdk getInstance(Activity activity)
if(MoPubSdk.INSTANCE == null)
MoPubSdk.INSTANCE = new MoPubSdk(activity);
return MoPubSdk.INSTANCE;
带有 SdkInitializationListener 函数的构造函数
注意 MutableLiveData 对象在调用侦听器并且 MoPub SDK 准备好调用广告时将其值更改为 true (isInitialized)。另请参阅下一个代码块中的 showConsentIfNeeded 函数。如果不需要,只需对函数进行注释即可。
public class MoPubSdk
private final MutableLiveData<Boolean> isMoPubSdkInitialized = new MutableLiveData<>();
private Activity mActivity;
private MoPubSdk(Activity activity)
this.mActivity = activity;
SdkConfiguration sdkConfiguration = new SdkConfiguration.Builder("ANYadunitID")
.withLogLevel(BuildConfig.DEBUG ? MoPubLog.LogLevel.DEBUG : MoPubLog.LogLevel.NONE)
.build();
MoPub.initializeSdk(activity, sdkConfiguration, initSdkListener());
private SdkInitializationListener initSdkListener()
return new SdkInitializationListener()
@Override
public void onInitializationFinished()
/* MoPub SDK initialized.
Check if you should show the consent dialog here, and make your ad requests. */
Log.d("MoPub", "SDK initialized");
isMoPubSdkInitialized.setValue(true);
showConsentIfNeeded();
;
public LiveData<Boolean> isMoPubSdkInitialized()
return isMoPubSdkInitialized;
可选的同意对话框
private void showConsentIfNeeded()
PersonalInfoManager mPersonalInfoManager = MoPub.getPersonalInformationManager();
Log.d("customeee", "Can collect pers information? "+MoPub.canCollectPersonalInformation()
+ ".\nShould show consent dialog? "+mPersonalInfoManager.shouldShowConsentDialog());
if(!MoPub.canCollectPersonalInformation())
if(mPersonalInfoManager.shouldShowConsentDialog())
mPersonalInfoManager.loadConsentDialog(new ConsentDialogListener()
@Override
public void onConsentDialogLoaded()
mPersonalInfoManager.showConsentDialog();
@Override
public void onConsentDialogLoadFailed(@NonNull MoPubErrorCode moPubErrorCode)
MoPubLog.i("Consent dialog failed to load.");
);
初始化就讲这么多。现在让我们从一个活动中调用 MoPub SDK 并继续加载横幅。
public class MyActivity extends Activity
private MoPubSdk moPubSdk;
protected void onCreate(final Bundle savedInstanceState)
moPubSdk = MoPubSdk.getInstance(this);
moPubSdk.isMoPubSdkInitialized().observe(this, new Observer<Boolean>()
@Override
public void onChanged(Boolean aBoolean)
if (aBoolean)
//Init your banner here.
);
LiveData 很容易解释。第一次 MoPub SDK 初始化开始 Livedata 对象是假的。初始化需要一些时间,成功后值切换为 true 并调用观察者,您可以开始加载横幅。
在 init 期间切换活动或再次调用 MoPubSdk#getInstance 时,该值已经为 true,并直接在 #observe 调用中传递,然后您立即初始化横幅。
【讨论】:
以上是关于使用 SdkInitializationListener 初始化 MoPub的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)