Changing the advertising platform in the android studio app. interstitial advertising does not work, where is the bug? When you click on the button, InterstitialAd should start does not work
AdMob worked without problems.
InterstitialAd Yandex https://yandex.com/dev/mobile-ads/doc/android/quick-start/interstitial.html
class MainActivity : AppCompatActivity() {
private val interstitialAdEventListener = InterstitialAdYandexAdsEventListener()
lateinit var consentInformation : ConsentInformation
lateinit var consentForm : ConsentForm
companion object {
fun startActivity(context: Context) {
val intent = Intent(context, MainActivity::class.java)
context.startActivity(intent)
}
}
private lateinit var mBannerAdView: BannerAdView
private var initialLayoutComplete = false
private val viewModel by viewModel<MainViewModel>() // Lazy inject ViewModel
private lateinit var binding: ActivityMainBinding
private val minMeetingCodeLength = 10
private var currentUser: FirebaseUser? = null
private lateinit var createMeetingInterstitialAd: InterstitialAd
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
currentUser = FirebaseAuth.getInstance().currentUser
setProfileIcon()
val params = ConsentRequestParameters.Builder()
.setTagForUnderAgeOfConsent(false)
.build()
consentInformation = UserMessagingPlatform.getConsentInformation(this)
consentInformation.requestConsentInfoUpdate(
this,
params,
{
if (consentInformation.isConsentFormAvailable()) {
loadForm();
}
}
) {
// Handle the error.
}
val str_text = "<a href=\"https://videotranslation.ru/?utm_source=android&utm_medium=click\">videotranslation.ru</a>"
val link: TextView = findViewById<View>(R.id.textMeet2) as TextView
link.movementMethod = LinkMovementMethod.getInstance()
fun TextView.htmlText(text: String){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return setText(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY))
} else {
@Suppress("DEPRECATION")
return setText(Html.fromHtml(text))
}
}
textMeet2.htmlText(str_text)
// Load ads based on configuration
if (Meetly.isAdEnabled) {
initializeCreateMeetingInterstitialAd()
loadCreateMeetingInterstitialAd()
}
handleDynamicLink()
onMeetingToggleChange()
onCreateMeetingCodeChange()
onCopyMeetingCodeFromClipboardClick()
onShareMeetingCodeClick()
onJoinMeetingClick()
onCreateMeetingClick()
onMeetingHistoryClick()
onProfileClick()
if (Meetly.isAdEnabled) setupBannerAd() else binding.adViewContainer.makeGone()
}
private inner class InterstitialAdYandexAdsEventListener : InterstitialAdEventListener {
override fun onAdLoaded() {
Logger.debug( "onAdLoaded")
}
override fun onAdFailedToLoad(adRequestError: AdRequestError) {
Logger.error(adRequestError.description)
}
override fun onImpression(impressionData: ImpressionData?) {
Logger.debug("onImpression")
}
override fun onAdShown() {
Logger.debug( "onAdShown")
}
override fun onAdDismissed() {
Logger.debug("onAdDismissed")
}
override fun onAdClicked() {
Logger.debug( "onAdClicked")
}
override fun onLeftApplication() {
Logger.debug("onLeftApplication")
}
override fun onReturnedToApplication() {
Logger.debug("onReturnedToApplication")
}
}
fun loadForm(){
UserMessagingPlatform.loadConsentForm(
this,
{ consentForm ->
[email protected] = consentForm
if (consentInformation.consentStatus == ConsentInformation.ConsentStatus.REQUIRED) {
consentForm.show(
this@MainActivity
) { // Handle dismissal by reloading form.
loadForm()
}
}
}
) {
/// Handle Error.
}
}
private fun setProfileIcon() {
currentUser?.let {
if (it.photoUrl != null) {
binding.ivProfile.load(currentUser?.photoUrl) {
placeholder(R.drawable.ic_profile)
}
}
}
}
private fun initializeCreateMeetingInterstitialAd() {
createMeetingInterstitialAd = InterstitialAd(this)
createMeetingInterstitialAd.setAdUnitId("R-M-DEMO-480x320")
createMeetingInterstitialAd.setInterstitialAdEventListener(interstitialAdEventListener)
}
private fun loadCreateMeetingInterstitialAd() {
createMeetingInterstitialAd.loadAd(AdRequest.Builder().build())
}
private fun handleDynamicLink() {
Firebase.dynamicLinks
.getDynamicLink(intent)
.addOnSuccessListener { pendingDynamicLinkData ->
// Получить ссылку с результатом (может иметь значение NULL, если не найдено никакой связи)
val deepLink: Uri?
if (pendingDynamicLinkData != null) {
deepLink = pendingDynamicLinkData.link
deepLink?.getQueryParameter("meetingCode")?.let { joinMeeting(it) }
}
}
.addOnFailureListener { _ ->
toast(getString(R.string.main_error_fetch_dynamic_link))
}
}
/**
* Called when the meeting toggle button check state is changed
*/
private fun onMeetingToggleChange() {
binding.tgMeeting.addOnButtonCheckedListener { _, checkedId, isChecked ->
if (isChecked) {
when (checkedId) {
R.id.btnToggleJoinMeeting -> {
binding.groupCreateMeeting.makeGone()
binding.groupJoinMeeting.makeVisible()
}
R.id.btnToggleCreateMeeting -> {
binding.groupJoinMeeting.makeGone()
binding.groupCreateMeeting.makeVisible()
val meetingCode = generateMeetingCode()
binding.etCodeCreateMeeting.setText(meetingCode)
}
}
}
}
}
/**
* Called when the meeting code in the EditText of the CREATE MEETING toggle changes
*/
private fun onCreateMeetingCodeChange() {
binding.tilCodeCreateMeeting.etCodeCreateMeeting.doOnTextChanged { text, _, _, _ ->
if (text.toString().trim()
.replace(" ", "").length >= minMeetingCodeLength
) binding.tilCodeCreateMeeting.error = null
}
}
private fun generateMeetingCode(): String {
val allowedChars = ('a'..'z') + ('0'..'9')
return (1..10)
.map { allowedChars.random() }
.joinToString("")
}
/**
* Буфер обмена Called when the clipboard icon is clicked in the EditText of the JOIN MEETING toggle
*/
private fun onCopyMeetingCodeFromClipboardClick() {
binding.tilCodeJoinMeeting.setEndIconOnClickListener {
val clipboardText = getTextFromClipboard()
if (clipboardText != null) {
binding.etCodeJoinMeeting.setText(clipboardText)
toast(getString(R.string.main_meeting_code_copied))
} else {
toast(getString(R.string.main_empty_clipboard))
}
}
}
/**
* Called when the share icon is clicked in the EditText of the CREATE MEETING toggle
*/
private fun onShareMeetingCodeClick() {
binding.tilCodeCreateMeeting.setEndIconOnClickListener {
if (isMeetingCodeValid(getCreateMeetingCode())) {
binding.tilCodeCreateMeeting.error = null
toast(getString(R.string.main_creating_dynamic_link))
Firebase.dynamicLinks.shortLinkAsync {
link = Uri.parse(getString(R.string.app_deep_link_url, getCreateMeetingCode()))
domainUriPrefix = getString(R.string.app_dynamic_link_url_prefix)
androidParameters {}
navigationInfoParameters {
forcedRedirectEnabled = true // Directly open the link in the app
}
}.addOnSuccessListener { result ->
val shortDynamicLink = result.shortLink.toString()
startShareTextIntent(
getString(R.string.main_share_meeting_code_title),
getString(R.string.main_share_meeting_code_desc, shortDynamicLink)
)
}.addOnFailureListener {
toast(getString(R.string.main_error_create_dynamic_link))
}
} else {
binding.tilCodeCreateMeeting.error =
getString(R.string.main_error_meeting_code_length, minMeetingCodeLength)
}
}
}
/**
* Called when the JOIN button is clicked of the JOIN MEETING toggle
*/
private fun onJoinMeetingClick() {
binding.btnJoinMeeting.setOnClickListener {
if (isMeetingCodeValid(getJoinMeetingCode())) {
if (Meetly.isAdEnabled) {
if (createMeetingInterstitialAd.isLoaded) createMeetingInterstitialAd.show() else joinMeeting(
getJoinMeetingCode()
)
} else {
joinMeeting(getJoinMeetingCode())
}
}
}
}
private fun joinMeeting(meetingCode: String) {
MeetingUtils.startMeeting(
this,
meetingCode,
R.string.all_joining_meeting
) // Start Meeting
viewModel.addMeetingToDb(
Meeting(
meetingCode,
System.currentTimeMillis()
)
) // Add meeting to db
}
/**
* Returns the meeting code for joining the meeting
*/
private fun getJoinMeetingCode() =
binding.etCodeJoinMeeting.text.toString().trim().replace(" ", "")
/**
*
*/
private fun onCreateMeetingClick() {
binding.btnCreateMeeting.setOnClickListener {
if (isMeetingCodeValid(getCreateMeetingCode())) {
if (Meetly.isAdEnabled) {
if (createMeetingInterstitialAd.isLoaded()) createMeetingInterstitialAd.show() else createMeeting(
getCreateMeetingCode()
)
} else {
createMeeting(getCreateMeetingCode())
}
}
}
}
private fun createMeeting(meetingCode: String) {
MeetingUtils.startMeeting(
this,
meetingCode,
R.string.all_creating_meeting
) // Start Meeting
viewModel.addMeetingToDb(
Meeting(
meetingCode,
System.currentTimeMillis()
)
) // Add meeting to db
}
private fun getCreateMeetingCode() =
binding.etCodeCreateMeeting.text.toString().trim().replace(" ", "")
private fun isMeetingCodeValid(meetingCode: String): Boolean {
return if (meetingCode.length >= minMeetingCodeLength) {
true
} else {
Snackbar.make(
binding.constrainLayout,
getString(R.string.main_error_meeting_code_length, minMeetingCodeLength),
Snackbar.LENGTH_SHORT
).show()
false
}
}
private fun onMeetingHistoryClick() {
binding.ivMeetingHistory.setOnClickListener {
MeetingHistoryActivity.startActivity(this)
}
}
private fun onProfileClick() {
binding.ivProfile.setOnClickListener {
val profileDialog = MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show {
customView(R.layout.dialog_profile)
}
profileDialog.apply {
if (currentUser != null) {
currentUser!!.photoUrl?.let {
ivUserProfileDialog.load(it) {
placeholder(R.drawable.ic_profile)
}
}
tvUserName.text = currentUser!!.displayName
tvEmail.text = currentUser!!.email
btnUserAuthenticationStatus.text = getString(R.string.all_btn_sign_out)
} else {
tvUserName.makeGone()
tvEmail.makeGone()
tvUserNotAuthenticated.makeVisible()
btnUserAuthenticationStatus.text = getString(R.string.all_btn_sign_in)
}
switchDarkMode.isChecked = !AppPref.isLightThemeEnabled
// UserAuthenticationStatus button onClick
btnUserAuthenticationStatus.setOnClickListener {
dismiss()
if (currentUser != null) {
// User is currently signed in
AuthUI.getInstance().signOut(this@MainActivity).addOnCompleteListener {
AuthenticationActivity.startActivity(this@MainActivity)
finish()
}
} else {
// User is not signed in
AuthenticationActivity.startActivity(this@MainActivity)
finish()
}
}
// Dark Mode Switch
switchDarkMode.setOnCheckedChangeListener { _, isChecked ->
dismiss()
// Change theme after dismiss to prevent memory leak
onDismiss {
if (isChecked) setThemeMode(AppCompatDelegate.MODE_NIGHT_YES) else setThemeMode(
AppCompatDelegate.MODE_NIGHT_NO
)
}
}
// Send feedback onClick
tvSendFeedback.setOnClickListener {
startEmailIntent(
getString(R.string.app_feedback_contact_email),
getString(R.string.profile_feedback_email_subject)
)
}
// Rate app onClick
tvRateApp.setOnClickListener {
openAppInGooglePlay(applicationContext.packageName, R.color.colorSurface)
}
// Share app onClick
tvShareApp.setOnClickListener {
startShareTextIntent(
getString(R.string.profile_share_app_title),
getString(R.string.profile_share_app_text, applicationContext.packageName)
)
}
// FAQs onClick
tvFaqs.setOnClickListener {
FaqsActivity.startActivity(this@MainActivity)
}
// Privacy Policy onClick
tvPrivacyPolicy.setOnClickListener {
openUrl(getString(R.string.app_privacy_policy_url), R.color.colorSurface)
}
}
}
}
private fun setThemeMode(themeMode: Int) {
AppCompatDelegate.setDefaultNightMode(themeMode)
AppPref.isLightThemeEnabled = themeMode == AppCompatDelegate.MODE_NIGHT_NO
}
private fun setupBannerAd() {
mBannerAdView = BannerAdView(this)
binding.adViewContainer.addView(mBannerAdView)
binding.adViewContainer.viewTreeObserver.addOnGlobalLayoutListener {
if (!initialLayoutComplete) {
initialLayoutComplete = true
mBannerAdView.setAdUnitId("R-M-DEMO-320x50")
mBannerAdView.setAdSize(AdSize.BANNER_320x50)
mBannerAdView.loadAd(AdRequest.Builder().build())
}
}
}
}```