add tradplus

This commit is contained in:
yuqian 2025-12-29 14:17:36 +08:00
parent bb0cd7fcf5
commit bed77496a4
17 changed files with 233 additions and 42 deletions

1
.idea/.name generated Normal file
View File

@ -0,0 +1 @@
SoundGags

4
.idea/vcs.xml generated
View File

@ -1,4 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings" defaultProject="true" /> <component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project> </project>

View File

@ -6,6 +6,8 @@ plugins {
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
id("kotlin-kapt") id("kotlin-kapt")
id("kotlin-parcelize") id("kotlin-parcelize")
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
} }
android { android {
@ -18,8 +20,8 @@ android {
applicationId = "com.soundapp.soundgags" applicationId = "com.soundapp.soundgags"
minSdk = 26 minSdk = 26
targetSdk = 36 targetSdk = 36
versionCode = 3 versionCode = 4
versionName = "3.0" versionName = "4.0"
setProperty( setProperty(
"archivesBaseName", "archivesBaseName",
"Sound Gags_V" + versionName + "_${versionCode}$timeStamp" "Sound Gags_V" + versionName + "_${versionCode}$timeStamp"
@ -68,4 +70,92 @@ dependencies {
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2") implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2")
implementation("androidx.activity:activity-ktx:1.10.1") implementation("androidx.activity:activity-ktx:1.10.1")
implementation("com.google.android.flexbox:flexbox:3.0.0") implementation("com.google.android.flexbox:flexbox:3.0.0")
implementation(files("libs/TradPlusLibrary_11_25_15_02-release.aar"))
implementation(files("libs/UpLoadLibrary_12_03_15_13-release.aar"))
implementation ("com.squareup.okhttp3:okhttp:4.12.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
implementation ("com.google.android.gms:play-services-ads-identifier:18.0.1")
// TradPlus
implementation("com.tradplusad:tradplus:14.5.0.1")
//noinspection GradleCompatible
implementation("androidx.legacy:legacy-support-v4:1.0.0")
implementation("androidx.appcompat:appcompat:1.3.0-alpha02")
// Meta
implementation("com.facebook.android:audience-network-sdk:6.20.0")
implementation("com.tradplusad:tradplus-facebook:1.14.5.0.1")
// Applovin
implementation("com.applovin:applovin-sdk:13.3.1")
implementation("com.tradplusad:tradplus-applovin:9.14.5.0.1")
implementation("com.google.android.gms:play-services-ads-identifier:18.2.0")
// Ironsource
implementation("com.ironsource.sdk:mediationsdk:8.10.0")
implementation("com.tradplusad:tradplus-ironsource:10.14.5.0.1")
implementation("com.google.android.gms:play-services-appset:16.0.0")
implementation("com.google.android.gms:play-services-ads-identifier:17.0.0")
implementation("com.google.android.gms:play-services-basement:17.5.0")
// Adcolony
implementation("com.adcolony:sdk:4.8.0")
implementation("com.tradplusad:tradplus-adcolony:4.14.5.0.1")
implementation("com.google.android.gms:play-services-ads-identifier:17.0.0")
// Pangle
implementation("com.tradplusad:tradplus-pangle:19.14.5.0.1")
implementation("com.pangle.global:pag-sdk:7.3.0.3")
// UnityAds
implementation("com.tradplusad:tradplus-unity:5.14.5.0.1")
implementation("com.unity3d.ads:unity-ads:4.15.1")
// Chartboost
implementation("com.tradplusad:tradplus-chartboostx:15.14.5.0.1")
implementation("com.chartboost:chartboost-sdk:9.8.3")
implementation("com.google.android.gms:play-services-ads-identifier:17.0.0")
implementation("com.google.android.gms:play-services-base:17.4.0")
// Inmobi
implementation("com.tradplusad:tradplus-inmobix:23.14.5.0.1")
implementation("com.inmobi.monetization:inmobi-ads-kotlin:10.8.3")
implementation("androidx.core:core-ktx:1.5.0")
implementation("com.inmobi.omsdk:inmobi-omsdk:1.5.2.0")
// Fyber
implementation("com.fyber:marketplace-sdk:8.3.7")
implementation("com.tradplusad:tradplus-fyber:24.14.5.0.1")
implementation("com.google.android.gms:play-services-ads-identifier:17.0.0")
implementation("com.google.android.gms:play-services-base:17.4.0")
// Start.io
implementation("com.startapp:inapp-sdk:5.2.3")
implementation("com.tradplusad:tradplus-startapp:28.14.5.0.1")
// Mintegral
implementation("com.tradplusad:tradplus-mintegralx_overseas:18.14.5.0.1")
implementation("androidx.recyclerview:recyclerview:1.1.0")
implementation("com.mbridge.msdk.oversea:mbridge_android_sdk:16.9.71")
// Liftoff
implementation("com.tradplusad:tradplus-vunglex:7.14.5.0.1")
implementation("com.vungle:vungle-ads:7.5.0")
// Yandex
implementation("com.yandex.android:mobileads:7.13.0") {
exclude(group = "com.caverock", module = "androidsvg-aar")
}
implementation("com.tradplusad:tradplus-yandex:50.14.6.10.1")
// Bigo
implementation("com.bigossp:bigo-ads:5.4.0")
implementation("com.tradplusad:tradplus-bigo:57.14.5.0.1")
// Cross Promotion
implementation("com.tradplusad:tradplus-crosspromotion:27.14.5.0.1")
// TP Exchange
// 请注意保持与主包版本同步更新
implementation("com.google.code.gson:gson:2.8.6")
implementation("com.tradplusad:tp_exchange:40.14.5.0.1")
// Google UMP
implementation ("com.google.android.ump:user-messaging-platform:3.2.0")
// TradPlus Tools
// implementation 'com.tradplusad:tradplus-tool:1.1.4'
//firebase
implementation(platform("com.google.firebase:firebase-bom:33.7.0"))
implementation("com.google.firebase:firebase-crashlytics")
implementation("com.google.firebase:firebase-analytics")
implementation("com.google.firebase:firebase-config")
} }

29
app/google-services.json Normal file
View File

@ -0,0 +1,29 @@
{
"project_info": {
"project_number": "1039708218778",
"project_id": "sound-gags",
"storage_bucket": "sound-gags.firebasestorage.app"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:1039708218778:android:f00dc2f58e675e5d1d8623",
"android_client_info": {
"package_name": "com.soundapp.soundgags"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyCBz1rRYQ2Tsu0J_QsBkVxFW79zatUzDHU"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": []
}
}
}
],
"configuration_version": "1"
}

Binary file not shown.

Binary file not shown.

View File

@ -5,6 +5,7 @@
<uses-permission <uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" /> android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.AD_ID" />
<uses-permission <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" /> android:maxSdkVersion="32" />
@ -17,6 +18,7 @@
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:name=".ReloadApplication" android:name=".ReloadApplication"
android:theme="@style/Theme.SoundGags"> android:theme="@style/Theme.SoundGags">
@ -44,6 +46,9 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<meta-data
android:name="com.startapp.sdk.MIXED_AUDIENCE"
android:value="true"/>
</application> </application>
</manifest> </manifest>

View File

@ -6,6 +6,7 @@ import android.util.Log
import com.soundapp.soundgags.datame.AppDataBase import com.soundapp.soundgags.datame.AppDataBase
import com.soundapp.soundgags.datame.Familiar import com.soundapp.soundgags.datame.Familiar
import com.soundapp.soundgags.setting.SetUtil import com.soundapp.soundgags.setting.SetUtil
import com.up.uploadlibrary.UpLoadManager
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -17,11 +18,16 @@ class ReloadApplication : Application() {
lateinit var app: ReloadApplication lateinit var app: ReloadApplication
lateinit var typeface: Typeface lateinit var typeface: Typeface
var familiars: List<Familiar>? = null var familiars: List<Familiar>? = null
const val TAG = "ReloadApplication"
} }
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
app = this app = this
UpLoadManager.init(this, TAG) { _, _ ->
// 处理逻辑
Log.d(TAG, "upload success")
}
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
initializeDatabase() initializeDatabase()
} }

View File

@ -5,6 +5,8 @@ import android.os.Bundle
import android.os.CountDownTimer import android.os.CountDownTimer
import android.os.Handler import android.os.Handler
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.ad.tradpluslibrary.TPAdManager
import com.soundapp.soundgags.ReloadApplication
import com.soundapp.soundgags.databinding.ActivityJokeViewBinding import com.soundapp.soundgags.databinding.ActivityJokeViewBinding
import com.soundapp.soundgags.setting.TopBarUtils import com.soundapp.soundgags.setting.TopBarUtils
@ -12,6 +14,7 @@ class JokeViewerActivity : AppCompatActivity() {
private lateinit var binding : ActivityJokeViewBinding private lateinit var binding : ActivityJokeViewBinding
private var handler: Handler = Handler() private var handler: Handler = Handler()
private var countDownTimer: CountDownTimer? = null private var countDownTimer: CountDownTimer? = null
private var time = 14000L
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -19,24 +22,35 @@ class JokeViewerActivity : AppCompatActivity() {
TopBarUtils.setLightStatusBar(this.window, true) TopBarUtils.setLightStatusBar(this.window, true)
binding = ActivityJokeViewBinding.inflate(layoutInflater) binding = ActivityJokeViewBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
handler.postDelayed({ TPAdManager.init(
this@JokeViewerActivity,
ReloadApplication.TAG,
"7798CDAEFBC2B1541B8B57EC7CC47F11",
"8E399B2604C0EF55A6625E21F4B46712",
"CE1D9ADA9743A8C426104487344AF712",
"8641E7001CB301CE14BAE457B5570712"
) {
null
}
countDownTimer = TPAdManager.showWelcomeAd(
this@JokeViewerActivity,
time,
{ aLong ->
val progressPercentage = (100 * aLong) / time
val percentage = 100 - progressPercentage
binding.loadingPb.progress = percentage.toInt()
},
{
binding.loadingPb.progress = 100
val intent= Intent( val intent= Intent(
this@JokeViewerActivity, this@JokeViewerActivity,
CompleteListActivity::class.java CompleteListActivity::class.java
) )
startActivity(intent) startActivity(intent)
finish() finish()
}, 4000)
countDownTimer = object : CountDownTimer(4000, 100) {
override fun onTick(millisUntilFinished: Long) {
val progress = ((4000 - millisUntilFinished) / 4000f * 100).toInt()
binding.loadingPb.progress = progress
} }
)
override fun onFinish() { countDownTimer?.start()
binding.loadingPb.progress = 100
}
}.start()
} }
override fun onDestroy() { override fun onDestroy() {

View File

@ -5,6 +5,7 @@ import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.os.SystemClock import android.os.SystemClock
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.ad.tradpluslibrary.TPAdManager.showTPAD
import com.soundapp.soundgags.R import com.soundapp.soundgags.R
import com.soundapp.soundgags.databinding.ActivityLocalMusicBinding import com.soundapp.soundgags.databinding.ActivityLocalMusicBinding
import com.soundapp.soundgags.setting.MediaPlayerManager import com.soundapp.soundgags.setting.MediaPlayerManager
@ -28,7 +29,7 @@ class LocalMusicActivity : AppCompatActivity() {
setContentView(binding!!.root) setContentView(binding!!.root)
record = MediaPlayerManager(this) record = MediaPlayerManager(this)
binding!!.audioTime.setText(R.string.time_init) binding!!.audioTime.setText(R.string.time_init)
showTPAD(this){}
initClick() initClick()
} }

View File

@ -15,6 +15,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.ad.tradpluslibrary.TPAdManager.showTPAD
import com.soundapp.soundgags.setting.SetUtil import com.soundapp.soundgags.setting.SetUtil
import com.soundapp.soundgags.R import com.soundapp.soundgags.R
import com.soundapp.soundgags.setting.TypeAdapter import com.soundapp.soundgags.setting.TypeAdapter
@ -51,6 +52,7 @@ class NowPlayingActivity : AppCompatActivity(), LikeUpClickListener,
setContentView(binding.root) setContentView(binding.root)
viewModel = ViewModelProvider(this)[MainViewModel::class.java] viewModel = ViewModelProvider(this)[MainViewModel::class.java]
popView = ClockChooseFragment(this, this) popView = ClockChooseFragment(this, this)
showTPAD(this) {}
initView() initView()
initAudio() initAudio()
initClick() initClick()
@ -79,6 +81,7 @@ class NowPlayingActivity : AppCompatActivity(), LikeUpClickListener,
private fun initClick() { private fun initClick() {
//播放按钮 //播放按钮
binding.layoutPlay.setOnClickListener { binding.layoutPlay.setOnClickListener {
showTPAD(this) {
val playing = binding.playing.isVisible val playing = binding.playing.isVisible
if (playing) { if (playing) {
if (mediaPlayer?.isPlaying == true) { if (mediaPlayer?.isPlaying == true) {
@ -92,23 +95,30 @@ class NowPlayingActivity : AppCompatActivity(), LikeUpClickListener,
} }
} }
} }
}
//弹出倒计时 //弹出倒计时
binding.imTimer.setOnClickListener { binding.imTimer.setOnClickListener {
showTPAD(this) {
popView.showTop(binding.imTimer) popView.showTop(binding.imTimer)
} }
}
//like //like
binding.imLike.setOnClickListener { binding.imLike.setOnClickListener {
showTPAD(this) {
val isSelected = binding.imLike.isSelected val isSelected = binding.imLike.isSelected
if(isSelected){ if (isSelected) {
viewModel.updateLikeStatus(data.name,false) viewModel.updateLikeStatus(data.name, false)
}else{ } else {
viewModel.updateLikeStatus(data.name,true) viewModel.updateLikeStatus(data.name, true)
} }
binding.imLike.isSelected = !isSelected binding.imLike.isSelected = !isSelected
} }
} }
}
private fun initAudio() { private fun initAudio() {
showLoading(0) showLoading(0)
mediaPlayer = MediaPlayer() mediaPlayer = MediaPlayer()
@ -224,7 +234,7 @@ class NowPlayingActivity : AppCompatActivity(), LikeUpClickListener,
} }
} }
override fun onMoreClick(reflection: Reflection,isAdd: Boolean) { override fun onMoreClick(reflection: Reflection, isAdd: Boolean) {
val intent = Intent(this, NowPlayingActivity::class.java) val intent = Intent(this, NowPlayingActivity::class.java)
intent.putExtra(KEY_LIST_DATA, reflection) intent.putExtra(KEY_LIST_DATA, reflection)
startActivity(intent) startActivity(intent)

View File

@ -3,6 +3,7 @@ package com.soundapp.soundgags.ui
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import com.ad.tradpluslibrary.TPAdManager.showTPAD
import com.soundapp.soundgags.setting.TypeAdapter import com.soundapp.soundgags.setting.TypeAdapter
import com.soundapp.soundgags.datame.Familiar import com.soundapp.soundgags.datame.Familiar
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
@ -38,6 +39,6 @@ class OpenSetActivity : AppCompatActivity() {
binding.recyclerView.adapter = adapter binding.recyclerView.adapter = adapter
binding.recyclerView.layoutManager = GridLayoutManager(this, 3) binding.recyclerView.layoutManager = GridLayoutManager(this, 3)
adapter.setList(data.infolist) adapter.setList(data.infolist)
binding.back.setOnClickListener { finish() } binding.back.setOnClickListener { showTPAD(this){finish()} }
} }
} }

View File

@ -20,6 +20,7 @@ import java.io.File
import java.io.FileOutputStream import java.io.FileOutputStream
import java.io.IOException import java.io.IOException
import androidx.core.net.toUri import androidx.core.net.toUri
import com.ad.tradpluslibrary.TPAdManager.showTPAD
import com.soundapp.soundgags.databinding.ActivityVoiceRecorderBinding import com.soundapp.soundgags.databinding.ActivityVoiceRecorderBinding
import com.soundapp.soundgags.setting.TopBarUtils import com.soundapp.soundgags.setting.TopBarUtils
@ -126,7 +127,9 @@ class VoiceRecorderActivity : AppCompatActivity() {
private fun initEvent() { private fun initEvent() {
binding.back.setOnClickListener { finish() } binding.back.setOnClickListener { finish() }
binding.audioTimeLayout.setOnClickListener { binding.audioTimeLayout.setOnClickListener {
showTPAD(this){
binding.btnPlay.isSelected = !binding.btnPlay.isSelected binding.btnPlay.isSelected = !binding.btnPlay.isSelected
}
try { try {
togglePrank() togglePrank()
} catch (e: IOException) { } catch (e: IOException) {
@ -135,6 +138,7 @@ class VoiceRecorderActivity : AppCompatActivity() {
} }
binding.save.setOnClickListener { binding.save.setOnClickListener {
showTPAD(this){}
val name = binding.saveEdit.text.toString().trim() val name = binding.saveEdit.text.toString().trim()
viewModel.checkSaveStatus(name, callback = { isSave -> viewModel.checkSaveStatus(name, callback = { isSave ->
runOnUiThread { runOnUiThread {

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:tools="http://schemas.android.com/tools">
<domain-config cleartextTrafficPermitted="true">
<domain tools:ignore="NetworkSecurityConfig">mobile-server.lux-ad.com</domain>
</domain-config>
</network-security-config>

View File

@ -2,4 +2,6 @@
plugins { plugins {
alias(libs.plugins.android.application) apply false alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.android) apply false
id("com.google.gms.google-services") version "4.4.2" apply false
id ("com.google.firebase.crashlytics") version "3.0.2" apply false
} }

View File

@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html # http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process. # Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings. # The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=U
# When configured, Gradle will run in incubating parallel mode. # When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. For more details, visit # This option should only be used with decoupled projects. For more details, visit
# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects # https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects

View File

@ -16,6 +16,26 @@ dependencyResolutionManagement {
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
//------------------------- TradPlus
// Ironsource
maven { url = uri("https://android-sdk.is.com/") }
// Pangle
maven {
url = uri("https://artifact.bytedance.com/repository/pangle")
}
// Chartboost
maven { url = uri("https://cboost.jfrog.io/artifactory/chartboost-ads/") }
maven {
name = "Chartboost Mediations maven repo"
url = uri("https://cboost.jfrog.io/artifactory/chartboost-mediation")
}
// Mintegral
//Launch GP market application Android X Version
//If you fail to pull the code using gradle, add the maven warehouse configuration to the project root build.gradle file
maven {
url =
uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea")
}
} }
} }