Инициализация MoPub с помощью SdkInitializationListener - PullRequest
0 голосов
/ 19 февраля 2020

Мне нравится инициализировать MoPub SDK в Android и продолжать загружать баннеры и рекламные вставки, только если SDK init завершен и успешен.

Что может быть хорошим способом для достижения sh этого?

1 Ответ

0 голосов
/ 19 февраля 2020

Очень просто выполнить sh с помощью новых объектов Livedata Android. Там объекты являются наблюдаемыми, и вы можете получать их изменения в любом месте вашего приложения.

Используемые технологии и шаблоны:

  • Livedata
  • Шаблон Singleton
  • MoPub SDK 5.11.1

Я покажу вам, как по фрагментам кода

Шаблон синглтона

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, который меняет свое значение на true (isInitialized), когда вызывается слушатель, а SDK MoPub готов вызывать объявления. Также смотрите функцию 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 имеет значение false. Инициирование занимает некоторое время, в случае успеха значение переключается в true и вызывается наблюдатель, вы можете начать загрузку баннера.

При переключении действий во время init или вызова MoPubSdk # getInstance в другое время значение уже имеет значение true и передается непосредственно при вызове #observe, и вы сразу запускаете свой баннер.

...