Очень просто выполнить 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, и вы сразу запускаете свой баннер.