Google ads integration.

This commit is contained in:
2024-09-05 21:09:28 +05:30
parent 4bb7a10a01
commit 3e05b46828
9 changed files with 148 additions and 52 deletions

View File

@@ -4,6 +4,18 @@
<value>
<entry key="app">
<State>
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="RZCW41EJRPN" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-09-05T13:17:23.775124Z" />
<targetsSelectedWithDialog>
<Target>
<type value="QUICK_BOOT_TARGET" />

View File

@@ -128,6 +128,9 @@ dependencies {
// optional - Kotlin Extensions and Coroutines support for Room
implementation(libs.room.ktx)
// admob
implementation(libs.play.services.ads)
implementation libs.firebase.analytics
implementation libs.firebase.perf

View File

@@ -165,6 +165,16 @@
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
<property
android:name="android.adservices.AD_SERVICES_CONFIG"
android:resource="@xml/gma_ad_services_config"
tools:replace="android:resource" />
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-5699008063638916~5336678778"/>
</application>
</manifest>

View File

@@ -2,6 +2,9 @@ package com.woka
import android.annotation.SuppressLint
import android.app.Application
import android.util.Log
import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.RequestConfiguration
import com.jwplayer.pub.api.license.LicenseUtil
import com.onesignal.OneSignal
import com.woka.advertisements.AdsRepository
@@ -13,6 +16,7 @@ import com.woka.utils.ONESIGNAL_APP_ID
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.util.Arrays
class WokaApp: Application() {
@@ -36,6 +40,8 @@ class WokaApp: Application() {
}
initOneSignal()
initAdmob()
}
private fun initOneSignal(){
@@ -48,4 +54,11 @@ class WokaApp: Application() {
OneSignal.Notifications.requestPermission(false)
}
}
private fun initAdmob(){
CoroutineScope(Dispatchers.IO).launch {
MobileAds.initialize(this@WokaApp)
// MobileAds.setRequestConfiguration(RequestConfiguration.Builder().setTestDeviceIds(listOf("F895DC452659EA607EB688E47B041B20")).build())
}
}
}

View File

@@ -3,12 +3,23 @@ package com.woka.home.fragments
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.DisplayMetrics
import android.util.Log
import android.view.Display
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.bumptech.glide.Glide
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.google.android.gms.ads.LoadAdError
import com.google.android.gms.ads.interstitial.InterstitialAd
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
import com.jwplayer.pub.api.media.playlists.PlaylistItem
import com.woka.R
import com.woka.WokaApp
@@ -47,7 +58,7 @@ class Home2Fragment : Fragment() {
override fun onAttach(context: Context) {
super.onAttach(context)
context.changeLocale(WokaApp.userPrefs?.appLanguage?:"en")
context.changeLocale(WokaApp.userPrefs?.appLanguage ?: "en")
}
override fun onCreateView(
@@ -67,20 +78,48 @@ class Home2Fragment : Fragment() {
clickEvents()
loadGoogleAds()
return binding.root
}
private fun loadGoogleAds() {
binding.adView.adListener = object : AdListener() {
override fun onAdFailedToLoad(p0: LoadAdError) {
super.onAdFailedToLoad(p0)
Log.d("aditya_ad_testing", "onAdFailedToLoad: $p0")
}
}
binding.adView.loadAd(
AdRequest.Builder()
.build()
)
InterstitialAd.load(requireContext(),"ca-app-pub-5699008063638916/6300144761",
AdRequest.Builder().build(), object : InterstitialAdLoadCallback() {
override fun onAdFailedToLoad(adError: LoadAdError) {
Log.d("aditya_ad_testing", "Interrstitial onAdFailedToLoad: $adError")
}
override fun onAdLoaded(interstitialAd: InterstitialAd) {
Log.d("aditya_ad_testing", "AdLoaded:")
interstitialAd.show(requireActivity())
}
})
}
private fun iniViews() {
if (viewModel.isHomeBackgroundBlurred){
if (viewModel.isHomeBackgroundBlurred) {
binding.playerView.hide()
}else{
} else {
binding.playerView.show()
}
}
override fun onResume() {
super.onResume()
if (viewModel.player?.isPlaying == false){
if (viewModel.player?.isPlaying == false) {
viewModel.player?.play()
}
@@ -91,7 +130,7 @@ class Home2Fragment : Fragment() {
super.onPause()
if (viewModel.player?.isPlaying == true) viewModel.player?.pause()
if (viewModel.isHomeBackgroundBlurred){
if (viewModel.isHomeBackgroundBlurred) {
binding.playerView.hide()
}
}
@@ -101,7 +140,7 @@ class Home2Fragment : Fragment() {
binding.playerView.useController = false
}
private fun clickEvents(){
private fun clickEvents() {
binding.apply {
playerCard.setOnClickListener {
liveTv.performClick()
@@ -162,10 +201,12 @@ class Home2Fragment : Fragment() {
.build()
)
},
mutableListOf(VideoViewData(
0,
ContentType.TEASER
))
mutableListOf(
VideoViewData(
0,
ContentType.TEASER
)
)
)
)
putExtra(PlayerActivity.EXTRA_PLAY_INDEX, 0)
@@ -209,37 +250,49 @@ class Home2Fragment : Fragment() {
initPlayerView()
}
StreamingUrlRepository.liveStreamLiveData.observe(viewLifecycleOwner){
when (it){
StreamingUrlRepository.liveStreamLiveData.observe(viewLifecycleOwner) {
when (it) {
is ApiResult.Error -> {
progressView.hide()
binding.liveTv.setOnClickListener {
StreamingUrlRepository.loadLiveStreamingUrls()
}
}
is ApiResult.Loading -> {
progressView.show()
}
is ApiResult.Success -> {
it.data?.live_data?.let {urls ->
if (urls.isNotEmpty()){
urls.first()?.let {liveData ->
it.data?.live_data?.let { urls ->
if (urls.isNotEmpty()) {
urls.first()?.let { liveData ->
progressView.hide()
binding.liveTv.setOnClickListener {
activity?.let {activity ->
startActivity(Intent(activity, LiveStreamPlayerActivity::class.java).apply {
putExtra(LiveStreamPlayerActivity.EXTRA_LIVE_STREAM_ID, liveData.id)
putExtra(LiveStreamPlayerActivity.EXTRA_LIVE_STREAM_URL, liveData.live_url?.hd_url_en)
})
activity?.let { activity ->
startActivity(
Intent(
activity,
LiveStreamPlayerActivity::class.java
).apply {
putExtra(
LiveStreamPlayerActivity.EXTRA_LIVE_STREAM_ID,
liveData.id
)
putExtra(
LiveStreamPlayerActivity.EXTRA_LIVE_STREAM_URL,
liveData.live_url?.hd_url_en
)
})
}
}
}
}
}
it.data?.live_fm_data?.let {fmData ->
it.data?.live_fm_data?.let { fmData ->
binding.wokaFm.setOnClickListener {
activity?.let {activity ->
activity?.let { activity ->
startActivity(Intent(activity, FMActivity::class.java).apply {
putExtra(FMActivity.EXTRA_FM_URL, fmData.live_fm_url)
putExtra(FMActivity.EXTRA_FM_ID, fmData.id)
@@ -262,8 +315,9 @@ class Home2Fragment : Fragment() {
.into(profileImage)
}
val name = if (WokaApp.userPrefs?.userType == UserType.GUEST) WokaApp.userPrefs?.guestUserName
else data?.result?.fullname
val name =
if (WokaApp.userPrefs?.userType == UserType.GUEST) WokaApp.userPrefs?.guestUserName
else data?.result?.fullname
if (!name.isNullOrEmpty()) {
val text = ", ${name.split(" ")[0]}"
@@ -275,13 +329,14 @@ class Home2Fragment : Fragment() {
companion object {
private var instance: Home2Fragment? = null
private val any = Any()
fun getInstance(): Home2Fragment{
return synchronized(any){
if (instance == null){
fun getInstance(): Home2Fragment {
return synchronized(any) {
if (instance == null) {
instance = Home2Fragment()
}
return@synchronized instance!! }
return@synchronized instance!!
}
}
}
}

View File

@@ -15,7 +15,6 @@ import android.net.Network
import android.net.NetworkRequest
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.HapticFeedbackConstants
import android.view.View.GONE
import android.view.View.VISIBLE

View File

@@ -1,6 +1,5 @@
package com.woka.onboard.fragments
import android.animation.Animator
import android.content.Intent
import android.media.MediaPlayer
import android.os.Bundle
@@ -67,8 +66,16 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
if (userPrefs?.userType == UserType.CHILD || userPrefs?.userType == UserType.GUARDIAN) {
// some type of user is logged in
// thus, loading data
// thus, loading user data
userPrefs?.userLiveData?.observe(viewLifecycleOwner, this)
userPrefs?.loadUserData()
}else{
// no user is logged in
// listening to version history
lifecycleScope.launch {
delay(4000)
listenVersionHistory()
}
}
clickEvents()
@@ -103,24 +110,6 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
private fun animateLogo() {
binding.logo.animate().scaleXBy(1f).scaleYBy(1f)
.setDuration(2000)
.setListener(object : Animator.AnimatorListener {
override fun onAnimationStart(animation: Animator) {}
override fun onAnimationEnd(animation: Animator) {
lifecycleScope.launch {
delay(2000)
if (userPrefs?.userType == UserType.CHILD || userPrefs?.userType == UserType.GUARDIAN) {
// listening to user data
userPrefs?.userLiveData?.observe(viewLifecycleOwner, this@SplashFragment)
}else{
listenVersionHistory()
}
}
}
override fun onAnimationCancel(animation: Animator) {}
override fun onAnimationRepeat(animation: Animator) {}
})
.start()
}
@@ -212,9 +201,12 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
binding.progressBar.show()
}
is ApiResult.Success -> {
binding.retryBtn.hide()
binding.progressBar.hide()
listenVersionHistory()
lifecycleScope.launch {
delay(4000)
binding.retryBtn.hide()
binding.progressBar.hide()
listenVersionHistory()
}
}
null -> {}

View File

@@ -531,6 +531,16 @@
</HorizontalScrollView>
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/ad_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="25dp"
ads:adSize="320x100"
ads:adUnitId="ca-app-pub-5699008063638916/6755919260" />
<TextView
android:id="@+id/coming_soon_txt"
android:layout_width="wrap_content"

View File

@@ -13,6 +13,7 @@ navigationFragmentKtx = "2.7.7"
navigationUiKtx = "2.7.7"
navigationSafeArgs = "2.7.7"
onesignal = "5.1.20"
playServicesAds = "23.3.0"
roomKtx = "2.6.1"
roomRuntime = "2.6.1"
ksp = "2.0.0-1.0.24"
@@ -35,6 +36,7 @@ androidx-constraintlayout = { group = "androidx.constraintlayout", name = "const
androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "navigationFragmentKtx" }
androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigationUiKtx" }
onesignal = { module = "com.onesignal:OneSignal", version.ref = "onesignal" }
play-services-ads = { module = "com.google.android.gms:play-services-ads", version.ref = "playServicesAds" }
room-ktx = { module = "androidx.room:room-ktx", version.ref = "roomKtx" }
google-services = { group = "com.google.gms", name = "google-services", version.ref = "googleServices" }
firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics", version.ref = "firebaseAnalytics" }