使用 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有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)