TopOn集成(mintegral、unityads、liftoff(vungle)、Bigo)V1.2(3)

This commit is contained in:
litingting 2024-07-17 18:16:24 +08:00
parent a161dda6c0
commit 29bdb87355
17 changed files with 580 additions and 277 deletions

View File

@ -1,30 +1,31 @@
import java.util.Date
import java.text.SimpleDateFormat
plugins { plugins {
id("com.android.application") id("com.android.application")
id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.android")
id("com.google.gms.google-services") id("com.google.gms.google-services")
id("applovin-quality-service") id("com.google.firebase.crashlytics")
}
applovin {
apiKey = "HiXscdwWaEIFC16qq8xh13TwCnN5Jrs_b0ANd1EtqbPEQX_KegZ5CxV47OaffUbNouMT1l31b3ND3kKEbthqWZ"
} }
val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
android { android {
namespace = "com.prankapp.fartsounds.airhorn" namespace = "com.prankapp.fartsounds.airhorn"
compileSdk = 33 compileSdk = 34
defaultConfig { defaultConfig {
applicationId = "com.prankapp.fartsounds.airhorn" applicationId = "com.prankapp.fartsounds.airhorn"
minSdk = 21 minSdk = 23
targetSdk = 33 targetSdk = 34
versionCode = 2 versionCode = 3
versionName = "1.1" versionName = "1.2"
setProperty("archivesBaseName", "Prank App_V" + versionName + "(${versionCode})_$timestamp")
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }
//prank01 prank prank123 //prank01 prank prank123
buildTypes { buildTypes {
release { release {
isMinifyEnabled = false isMinifyEnabled = true
proguardFiles( proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"), getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro" "proguard-rules.pro"
@ -48,26 +49,69 @@ dependencies {
androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
implementation ("com.google.code.gson:gson:2.8.6") implementation("com.google.code.gson:gson:2.8.6")
implementation ("com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.47") implementation("com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.47")
implementation ("com.github.bumptech.glide:glide:4.16.0") implementation("com.github.bumptech.glide:glide:4.16.0")
implementation ("me.drakeet.materialdialog:library:1.3.1") implementation("me.drakeet.materialdialog:library:1.3.1")
annotationProcessor ("com.github.bumptech.glide:compiler:4.16.0") annotationProcessor("com.github.bumptech.glide:compiler:4.16.0")
implementation ("com.github.ForgetAll:LoadingDialog:v1.1.2") implementation("com.github.ForgetAll:LoadingDialog:v1.1.2")
implementation ("com.alibaba:fastjson:1.2.70") implementation("com.alibaba:fastjson:1.2.70")
implementation(platform("com.google.firebase:firebase-bom:33.0.0"))
implementation(platform("com.google.firebase:firebase-bom:33.1.1"))
implementation("com.google.firebase:firebase-crashlytics")
implementation("com.google.firebase:firebase-analytics") implementation("com.google.firebase:firebase-analytics")
implementation("com.applovin:applovin-sdk:12.5.0")
implementation("com.applovin.mediation:adcolony-adapter:4.8.0.4") //-----------------------------TopOn 聚合mintegral、unityads、liftoff(vungle)、Bigo
implementation("com.applovin.mediation:ironsource-adapter:8.1.0.0.0") //Anythink (Necessary)
implementation("com.applovin.mediation:vungle-adapter:7.3.2.1") implementation("com.anythink.sdk:core-tpn:6.3.68")
implementation("com.applovin.mediation:facebook-adapter:6.17.0.0") implementation("com.anythink.sdk:nativead-tpn:6.3.68")
implementation("com.applovin.mediation:bytedance-adapter:5.9.0.6.0") implementation("com.anythink.sdk:banner-tpn:6.3.68")
implementation("com.applovin.mediation:unityads-adapter:4.12.0.0") implementation("com.anythink.sdk:interstitial-tpn:6.3.68")
implementation("com.anythink.sdk:rewardedvideo-tpn:6.3.68")
implementation("com.anythink.sdk:splash-tpn:6.3.68")
//Androidx (Necessary)
implementation("androidx.appcompat:appcompat:1.1.0")
implementation("androidx.browser:browser:1.4.0")
//Vungle
implementation("com.anythink.sdk:adapter-tpn-vungle:6.3.68")
implementation("com.vungle:vungle-ads:7.3.2")
implementation("com.google.android.gms:play-services-basement:18.1.0")
implementation("com.google.android.gms:play-services-ads-identifier:18.0.1")
//UnityAds
implementation("com.anythink.sdk:adapter-tpn-unityads:6.3.68")
implementation("com.unity3d.ads:unity-ads:4.9.3")
//Bigo
implementation("com.anythink.sdk:adapter-tpn-bigo:6.3.68")
implementation("com.bigossp:bigo-ads:4.7.4")
//Mintegral
implementation("com.anythink.sdk:adapter-tpn-mintegral-nonchina:6.3.68")
implementation("com.mbridge.msdk.oversea:reward:16.7.51")
implementation("com.mbridge.msdk.oversea:newinterstitial:16.7.51")
implementation("com.mbridge.msdk.oversea:mbnative:16.7.51")
implementation("com.mbridge.msdk.oversea:mbnativeadvanced:16.7.51")
implementation("com.mbridge.msdk.oversea:mbsplash:16.7.51")
implementation("com.mbridge.msdk.oversea:mbbanner:16.7.51")
implementation("com.mbridge.msdk.oversea:mbbid:16.7.51")
implementation("androidx.recyclerview:recyclerview:1.1.0")
//Tramini
implementation("com.anythink.sdk:tramini-plugin-tpn:6.3.68")
//-----------------------------TopOn 聚合
// Debugger UI Tools
// implementation ("com.anythink.sdk:debugger-ui:1.0.7")
} }

View File

@ -1,13 +1,13 @@
{ {
"project_info": { "project_info": {
"project_number": "545114132353", "project_number": "890674306096",
"project_id": "prank-app-funny-sounds-air-hor", "project_id": "prank-app-funny-sound-air-horn",
"storage_bucket": "prank-app-funny-sounds-air-hor.appspot.com" "storage_bucket": "prank-app-funny-sound-air-horn.appspot.com"
}, },
"client": [ "client": [
{ {
"client_info": { "client_info": {
"mobilesdk_app_id": "1:545114132353:android:2f3713b50c726900a2a280", "mobilesdk_app_id": "1:890674306096:android:1ea832c0b755fe7fd161f5",
"android_client_info": { "android_client_info": {
"package_name": "com.prankapp.fartsounds.airhorn" "package_name": "com.prankapp.fartsounds.airhorn"
} }
@ -15,7 +15,7 @@
"oauth_client": [], "oauth_client": [],
"api_key": [ "api_key": [
{ {
"current_key": "AIzaSyCkBnu8PFLZmPPBEEv1o27iTAYBVZpBdec" "current_key": "AIzaSyB5GQ6DOpqiXmY6EBGCJy4yrV3OyRvt2F8"
} }
], ],
"services": { "services": {

5
app/keyinfo Normal file
View File

@ -0,0 +1,5 @@
keyfile:prankapp.jks
key store psd prankapp
aliasprank
key psdprankapp123

View File

@ -1,10 +0,0 @@
{\rtf1\ansi\ansicpg936\cocoartf2761
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
\f0\fs24 \cf0 key store psd \uc0\u65306 prank123\
alias\uc0\u65306 prank\
key psd\uc0\u65306 prank123123}

107
app/proguard-rules.pro vendored
View File

@ -18,4 +18,109 @@
# If you keep the line number information, uncomment this to # If you keep the line number information, uncomment this to
# hide the original source file name. # hide the original source file name.
#-renamesourcefileattribute SourceFile #-renamesourcefileattribute SourceFile
#---------------------------------TopOn 聚合
# Vungle
-dontwarn com.vungle.ads.**
-keepclassmembers class com.vungle.ads.** {
*;
}
# Google
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.android.gms.**
# START OkHttp + Okio
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-adaptresourcefilenames okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# OkHttp platform used only on JVM and when Conscrypt and other security providers are available.
-dontwarn okhttp3.internal.platform.**
-dontwarn org.conscrypt.**
-dontwarn org.bouncycastle.**
-dontwarn org.openjsse.**
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# END OkHttp + Okio
# START Protobuf
-dontwarn com.google.protobuf.**
-keepclassmembers class com.google.protobuf.** {
*;
}
-keep class * extends com.google.protobuf.GeneratedMessageLite { *; }
# END Protobuf
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.mbridge.** {*; }
-keep interface com.mbridge.** {*; }
-keep class android.support.v4.** { *; }
-dontwarn com.mbridge.**
-keep class **.R$* { public static final int mbridge*; }
-keep public class com.mbridge.* extends androidx.** { *; }
-keep public class androidx.viewpager.widget.PagerAdapter{ *; }
-keep public class androidx.viewpager.widget.ViewPager.OnPageChangeListener{ *; }
-keep interface androidx.annotation.IntDef{ *; }
-keep interface androidx.annotation.Nullable{ *; }
-keep interface androidx.annotation.CheckResult{ *; }
-keep interface androidx.annotation.NonNull{ *; }
-keep public class androidx.fragment.app.Fragment{ *; }
-keep public class androidx.core.content.FileProvider{ *; }
-keep public class androidx.core.app.NotificationCompat{ *; }
-keep public class androidx.appcompat.widget.AppCompatImageView { *; }
-keep public class androidx.recyclerview.*{ *; }
#---------------------------------TopOn 聚合
-dontwarn java.awt.Color
-dontwarn java.awt.Font
-dontwarn java.awt.Point
-dontwarn java.awt.Rectangle
-dontwarn javax.money.CurrencyUnit
-dontwarn javax.money.Monetary
-dontwarn javax.ws.rs.Consumes
-dontwarn javax.ws.rs.Produces
-dontwarn javax.ws.rs.core.Response
-dontwarn javax.ws.rs.core.StreamingOutput
-dontwarn javax.ws.rs.ext.MessageBodyReader
-dontwarn javax.ws.rs.ext.MessageBodyWriter
-dontwarn javax.ws.rs.ext.Provider
-dontwarn org.glassfish.jersey.internal.spi.AutoDiscoverable
-dontwarn org.javamoney.moneta.Money
-dontwarn org.joda.time.DateTime
-dontwarn org.joda.time.DateTimeZone
-dontwarn org.joda.time.Duration
-dontwarn org.joda.time.Instant
-dontwarn org.joda.time.LocalDate
-dontwarn org.joda.time.LocalDateTime
-dontwarn org.joda.time.LocalTime
-dontwarn org.joda.time.Period
-dontwarn org.joda.time.ReadablePartial
-dontwarn org.joda.time.format.DateTimeFormat
-dontwarn org.joda.time.format.DateTimeFormatter
-dontwarn springfox.documentation.spring.web.json.Json

View File

@ -3,8 +3,8 @@
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/> <!-- 基本所有广告平台SDK的必要权限-->
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
<application <application
android:name=".app.Application__" android:name=".app.Application__"
android:allowBackup="true" android:allowBackup="true"
@ -16,6 +16,10 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/prank01" android:theme="@style/prank01"
tools:targetApi="31"> tools:targetApi="31">
<!-- Android 9以上适配 -->
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
<activity <activity
android:name=".splash_prank.SplashActivity" android:name=".splash_prank.SplashActivity"
android:theme="@style/splashprank" android:theme="@style/splashprank"

View File

@ -1,69 +0,0 @@
package com.prankapp.fartsounds.airhorn.ad_util;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.lifecycle.ProcessLifecycleOwner;
import com.applovin.mediation.MaxAd;
import com.applovin.mediation.MaxAdListener;
import com.applovin.mediation.MaxError;
import com.applovin.mediation.ads.MaxAppOpenAd;
import com.applovin.mediation.ads.MaxInterstitialAd;
public class MaxPrankAdManager implements LifecycleObserver, MaxAdListener {
private MaxInterstitialAd appOpenAd;
private Context context;
AdPrankListener adListener;
public MaxPrankAdManager(Context context, String id, AdPrankListener adLoadedListener) {
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
this.adListener = adLoadedListener;
this.context = context;
appOpenAd = new MaxInterstitialAd(id, context);
appOpenAd.setListener(this);
appOpenAd.loadAd();
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
//showAdIfReady();
}
@Override
public void onAdLoaded(final MaxAd ad) {
Log.e("prank","onAdLoaded");
adListener.adPrankShow();
appOpenAd.showAd();
}
@Override
public void onAdLoadFailed(final String adUnitId, final MaxError error) {
Log.e("prank","onAdLoadFailed");
}
@Override
public void onAdDisplayed(final MaxAd ad) {
Log.e("prank","onAdDisplayed");
}
@Override
public void onAdClicked(final MaxAd ad) {
Log.e("prank","onAdClicked");
}
@Override
public void onAdHidden(final MaxAd ad) {
adListener.adPrankClose();
// appOpenAd.loadAd();
Log.e("prank","onAdHidden");
}
@Override
public void onAdDisplayFailed(final MaxAd ad, final MaxError error) {
appOpenAd.loadAd();
}
}

View File

@ -1,13 +1,56 @@
package com.prankapp.fartsounds.airhorn.app; package com.prankapp.fartsounds.airhorn.app;
import android.app.Application; import android.app.Application;
import android.util.Log;
import com.anythink.core.api.ATSDK;
import com.anythink.core.api.NetTrafficeCallback;
import com.prankapp.fartsounds.airhorn.openmediation.AdManager;
import com.prankapp.fartsounds.airhorn.utilsfff.Utils; import com.prankapp.fartsounds.airhorn.utilsfff.Utils;
public class Application__ extends Application { public class Application__ extends Application {
private static String AppKey = "a706b17d04ce19de26cb3adb5b6c330ca";
private static String APPId = "h6697383c8175b";
private static String debug_KEy="a8dd4a3f1c38a5a3cadb4f39385fb682af63df07";
public static String TAG = "----------tt";
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
Utils.init(this); Utils.init(this);
setTopOnGDPR();
initTopOnSDk();
} }
private void initTopOnSDk(){
ATSDK.init( this, APPId, AppKey);
// ATDebuggerUITest.showDebuggerUI(this,debug_KEy);
AdManager.loadAllAd();
}
private void setTopOnGDPR(){
// ATSDK.PERSONALIZED //设备数据允许上报
// ATSDK.NONPERSONALIZED //设备数据不允许上报
// ATSDK.UNKNOWN //未知等级只能通过getGDPRDataLevel方法获取不能用setGDPRUploadDataLevel方法设置
// ATSDK.setGDPRUploadDataLevel(this, ATSDK.PERSONALIZED);
ATSDK.checkIsEuTraffic(this, new NetTrafficeCallback() {
@Override
public void onResultCallback(boolean isEU) {
Log.e(TAG, "onResultCallback:" + isEU);
if (isEU && ATSDK.getGDPRDataLevel(Application__.this) == ATSDK.UNKNOWN) {
ATSDK.showGdprAuth(Application__.this);
}
}
@Override
public void onErrorCallback(String errorMsg) {
Log.e(TAG, "onErrorCallback:" + errorMsg);
}
});
}
} }

View File

@ -0,0 +1,9 @@
package com.prankapp.fartsounds.airhorn.openmediation
interface AdListener {
fun showSuccess()
fun showFail()
fun showClose()
}

View File

@ -0,0 +1,175 @@
package com.prankapp.fartsounds.airhorn.openmediation
import android.app.Activity
import android.os.CountDownTimer
import android.util.Log
import com.anythink.core.api.ATAdInfo
import com.anythink.core.api.AdError
import com.anythink.interstitial.api.ATInterstitial
import com.anythink.interstitial.api.ATInterstitialListener
import com.prankapp.fartsounds.airhorn.app.Application__
import com.prankapp.fartsounds.airhorn.utilsfff.Utils
object AdManager {
const val type_no_cache = 0
const val type_has_cache = 1
const val type_show_success = 2
const val type_show_close = 3
const val type_show_fail = 4
const val place1Id = "n669738b37f8f2"
const val place2Id = "n1fon1upfbrc2p"
const val place3Id = "n669738b37f8f2"
val list = mutableListOf<ATInterstitial>()
@JvmStatic
fun loadAllAd() {
if (list.size <= 0) {
val mInterstitialAd1 = ATInterstitial(Utils.context, place1Id)
val mInterstitialAd2 = ATInterstitial(Utils.context, place2Id)
val mInterstitialAd3 = ATInterstitial(Utils.context, place3Id)
list.add(mInterstitialAd1)
list.add(mInterstitialAd2)
list.add(mInterstitialAd3)
}
for (ad in list) {
if (!ad.isAdReady) {
setCallBack(ad,object :AdListener{
override fun showSuccess() {
}
override fun showFail() {
}
override fun showClose() {
}
})
ad.load()
}
}
}
@JvmStatic
fun getReadyAd(): ATInterstitial? {
list.shuffle()
for (ad in list) {
if (ad.isAdReady) {
return ad
}
}
return null
}
@JvmStatic
fun showWelcomeAd(activity: Activity,totalTim: Long, goMain: () -> Unit): CountDownTimer {
var alreadyShow = false
var timer = object : CountDownTimer(totalTim, 100) {
override fun onTick(millisUntilFinished: Long) {
if (!alreadyShow) {
showAD(activity) {
if (it == type_has_cache) {
alreadyShow = true
}
if (it == type_show_close || it == type_show_fail) {
goMain.invoke()
}
}
}
}
override fun onFinish() {
if (!alreadyShow) {
showAD(activity) {
if (it == type_show_close || it == type_show_fail || it == type_no_cache) {
goMain.invoke()
}
}
}
}
}
return timer
}
private fun setCallBack(ad: ATInterstitial, listener: AdListener) {
ad.setAdListener(object : ATInterstitialListener {
override fun onInterstitialAdLoaded() {
Log.d(Application__.TAG, "LoadLoaded ${ad.mPlacementId}")
}
override fun onInterstitialAdLoadFail(p0: AdError?) {
Log.d(Application__.TAG, "LoadFail:${p0?.code} ${p0?.desc}")
}
override fun onInterstitialAdClicked(p0: ATAdInfo?) {
}
override fun onInterstitialAdShow(p0: ATAdInfo?) {
Log.d(Application__.TAG, "AdShow ${p0?.showId} ")
listener.showSuccess()
ad.load()
}
override fun onInterstitialAdClose(p0: ATAdInfo?) {
listener.showClose()
}
override fun onInterstitialAdVideoStart(p0: ATAdInfo?) {
}
override fun onInterstitialAdVideoEnd(p0: ATAdInfo?) {
}
override fun onInterstitialAdVideoError(p0: AdError?) {
listener.showFail()
}
})
}
@JvmStatic
fun showAD(activity: Activity, action: (type: Int) -> Unit) {
val readyAd = getReadyAd()
if (readyAd!= null) {
Log.d(Application__.TAG, "readyAd ${readyAd.mPlacementId} ")
action.invoke(type_has_cache)
setCallBack(readyAd,object : AdListener {
override fun showSuccess() {
action.invoke(type_show_success)
}
override fun showFail() {
action.invoke(type_show_fail)
}
override fun showClose() {
action.invoke(type_show_close)
}
})
readyAd.show(activity)
} else {
action.invoke(type_no_cache)
}
}
}

View File

@ -2,90 +2,52 @@ package com.prankapp.fartsounds.airhorn.splash_prank;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler; import android.os.Handler;
import android.util.Log;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import com.applovin.sdk.AppLovinMediationProvider;
import com.applovin.sdk.AppLovinSdk;
import com.applovin.sdk.AppLovinSdkConfiguration;
import com.applovin.sdk.AppLovinSdkInitializationConfiguration;
import com.prankapp.fartsounds.airhorn.MainActivity; import com.prankapp.fartsounds.airhorn.MainActivity;
import com.prankapp.fartsounds.airhorn.ad_util.AdPrankListener; import com.prankapp.fartsounds.airhorn.R;
import com.prankapp.fartsounds.airhorn.ad_util.MaxPrankAdManager; import com.prankapp.fartsounds.airhorn.openmediation.AdManager;
import com.prankapp.fartsounds.airhorn.utilsfff.Constant;
import kotlin.Unit;
import kotlin.jvm.functions.Function0;
public class SplashActivity extends AppCompatActivity { public class SplashActivity extends AppCompatActivity {
Handler handlerdfdsf = new Handler();
private Runnable runnablegfdg;
private boolean isShowedPrankAd = false; private Long totalTim = 11000L;
private CountDownTimer countDownTimer;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.splash_activity);
runnablegfdg = new Runnable() { countDownTimer = AdManager.showWelcomeAd(SplashActivity.this,totalTim, new Function0<Unit>() {
int count = 15;
@Override @Override
public void run() { public Unit invoke() {
if (count > 0) { go();
if (isShowedPrankAd) { return null;
handlerdfdsf.removeCallbacks(runnablegfdg);
return;
}
count--;
handlerdfdsf.postDelayed(this, 1000);
} else {
finish();
startActivity(new Intent(SplashActivity.this, MainActivity.class));
}
} }
}; });
handlerdfdsf.postDelayed(runnablegfdg, 0); countDownTimer.start();
AppLovinSdkInitializationConfiguration initConfig = AppLovinSdkInitializationConfiguration.builder( "yuB4fQEc6yE5384qm7dKkZU6eOJDHwLmJfxUZ8s7A7nDa5nUlrG85VwVgJCl3X_EQWhiRZTyyVhiJWlmorVRxi", this )
.setMediationProvider( AppLovinMediationProvider.MAX )
.build();
// Initialize the SDK with the configuration
AppLovinSdk.getInstance( this ).initialize( initConfig, new AppLovinSdk.SdkInitializationListener()
{
@Override
public void onSdkInitialized(final AppLovinSdkConfiguration sdkConfig)
{
Log.e("hhh", "sdk初始化成功");
MaxPrankAdManager maxAdManager = new MaxPrankAdManager(SplashActivity.this, Constant.adIdpPrankSplash, new AdPrankListener() {
@Override
public void adPrankShow() {
isShowedPrankAd = true;
}
@Override
public void adPrankClose() {
finish();
startActivity(new Intent(SplashActivity.this, MainActivity.class));
}
});
}
} );
}
private void go() {
finish();
startActivity(new Intent(SplashActivity.this, MainActivity.class));
} }
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
handlerdfdsf.removeCallbacks(runnablegfdg); countDownTimer.cancel();
} }

View File

@ -17,8 +17,8 @@ import com.bumptech.glide.Glide;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.prankapp.fartsounds.airhorn.R; import com.prankapp.fartsounds.airhorn.R;
import com.prankapp.fartsounds.airhorn.ad_util.AdPrankListener; import com.prankapp.fartsounds.airhorn.ad_util.AdPrankListener;
import com.prankapp.fartsounds.airhorn.ad_util.MaxPrankAdManager;
import com.prankapp.fartsounds.airhorn.model.PrankListModel; import com.prankapp.fartsounds.airhorn.model.PrankListModel;
import com.prankapp.fartsounds.airhorn.openmediation.AdManager;
import com.prankapp.fartsounds.airhorn.utilsfff.Constant; import com.prankapp.fartsounds.airhorn.utilsfff.Constant;
import com.prankapp.fartsounds.airhorn.utilsfff.ImmUtils; import com.prankapp.fartsounds.airhorn.utilsfff.ImmUtils;
import com.prankapp.fartsounds.airhorn.utilsfff.SPUtils; import com.prankapp.fartsounds.airhorn.utilsfff.SPUtils;
@ -30,6 +30,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
public class PrankDetailsActivity extends AppCompatActivity { public class PrankDetailsActivity extends AppCompatActivity {
ImageView iv_back; ImageView iv_back;
@ -49,6 +52,7 @@ public class PrankDetailsActivity extends AppCompatActivity {
ObjectAnimator animator; ObjectAnimator animator;
boolean isPlayAd = false; boolean isPlayAd = false;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -59,7 +63,7 @@ public class PrankDetailsActivity extends AppCompatActivity {
.setSuccessText("Success") .setSuccessText("Success")
.setInterceptBack(true) .setInterceptBack(true)
.show(); .show();
ImmUtils.setStatusBar(this,false,false); ImmUtils.setStatusBar(this, false, false);
iv_back = findViewById(R.id.iv_back); iv_back = findViewById(R.id.iv_back);
tv_shake_tips = findViewById(R.id.tv_shake_tips); tv_shake_tips = findViewById(R.id.tv_shake_tips);
@ -70,17 +74,16 @@ public class PrankDetailsActivity extends AppCompatActivity {
iv_back.setOnClickListener(new View.OnClickListener() { iv_back.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
finish(); AdManager.showAD(PrankDetailsActivity.this, new Function1<Integer, Unit>() {
} @Override
}); public Unit invoke(Integer integer) {
if (integer == AdManager.type_show_close || integer == AdManager.type_no_cache || integer == AdManager.type_show_fail) {
finish();
}
return null;
}
});
new MaxPrankAdManager(PrankDetailsActivity.this, Constant.adIdPrankSee, new AdPrankListener() {
@Override
public void adPrankShow() {
}
@Override
public void adPrankClose() {
} }
}); });
@ -93,7 +96,7 @@ public class PrankDetailsActivity extends AppCompatActivity {
for (int i = 0; i < Constant.prankListModel.size(); i++) { for (int i = 0; i < Constant.prankListModel.size(); i++) {
if (Constant.prankListModel.get(i).getCategoryId().equals(id)) { if (Constant.prankListModel.get(i).getCategoryId().equals(id)) {
jj = i ; jj = i;
listBeans.addAll(Constant.prankListModel.get(i).getList()); listBeans.addAll(Constant.prankListModel.get(i).getList());
} }
} }
@ -103,16 +106,16 @@ public class PrankDetailsActivity extends AppCompatActivity {
iv_shoucang.setOnClickListener(new View.OnClickListener() { iv_shoucang.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
if(isShoucah(id)){ if (isShoucah(id)) {
pankList.remove(getIndex(id)); pankList.remove(getIndex(id));
Gson gson = new Gson(); Gson gson = new Gson();
String json = gson.toJson(pankList); String json = gson.toJson(pankList);
SPUtils.getInstance().put(Constant.shouCang,json); SPUtils.getInstance().put(Constant.shouCang, json);
}else{ } else {
pankList.add(Constant.prankListModel.get(jj)); pankList.add(Constant.prankListModel.get(jj));
Gson gson = new Gson(); Gson gson = new Gson();
String json = gson.toJson(pankList); String json = gson.toJson(pankList);
SPUtils.getInstance().put(Constant.shouCang,json); SPUtils.getInstance().put(Constant.shouCang, json);
} }
isShoucah(id); isShoucah(id);
@ -120,7 +123,7 @@ public class PrankDetailsActivity extends AppCompatActivity {
} }
}); });
if (mShakeUtils==null){ if (mShakeUtils == null) {
mShakeUtils = new ShakeUtils(this); mShakeUtils = new ShakeUtils(this);
@ -145,15 +148,15 @@ public class PrankDetailsActivity extends AppCompatActivity {
} }
}); });
if(id.equals("625f83491fea07887e61906a") || id.equals("636b8e5415831ec42fc7d80a")){//左右摇晃 if (id.equals("625f83491fea07887e61906a") || id.equals("636b8e5415831ec42fc7d80a")) {//左右摇晃
// 设置动画的初始位置0表示当前位置 // 设置动画的初始位置0表示当前位置
animator = ObjectAnimator.ofFloat(ivContent, "translationX", -20f,20f);//上下摇晃 animator = ObjectAnimator.ofFloat(ivContent, "translationX", -20f, 20f);//上下摇晃
}else if(id.equals("625f83491fea07887e61906b") || id.equals("62be51cc4d4edd56b588d54e") || id.equals("62be51f84d4edd56b588d54f")|| id.equals("625f83491fea07887e619065")|| id.equals("64b617f06d7b94ebbe2a20fa")) { } else if (id.equals("625f83491fea07887e61906b") || id.equals("62be51cc4d4edd56b588d54e") || id.equals("62be51f84d4edd56b588d54f") || id.equals("625f83491fea07887e619065") || id.equals("64b617f06d7b94ebbe2a20fa")) {
tv_shake_tips.setVisibility(View.VISIBLE); tv_shake_tips.setVisibility(View.VISIBLE);
iv_bofang.setVisibility(View.INVISIBLE); iv_bofang.setVisibility(View.INVISIBLE);
animator = ObjectAnimator.ofFloat(ivContent, "translationY", 0f, 20f, -20f, 20f, -20f, 20f, 0f); animator = ObjectAnimator.ofFloat(ivContent, "translationY", 0f, 20f, -20f, 20f, -20f, 20f, 0f);
}else { } else {
animator = ObjectAnimator.ofFloat(ivContent, "translationY", 0f,0f); animator = ObjectAnimator.ofFloat(ivContent, "translationY", 0f, 0f);
} }
// 动画时长 // 动画时长
@ -177,8 +180,8 @@ public class PrankDetailsActivity extends AppCompatActivity {
mShakeUtils.setOnShakeListener(new ShakeUtils.OnShakeListener() { mShakeUtils.setOnShakeListener(new ShakeUtils.OnShakeListener() {
@Override @Override
public void onShake() { public void onShake() {
if(id.equals("625f83491fea07887e61906b") || id.equals("62be51cc4d4edd56b588d54e") || id.equals("62be51f84d4edd56b588d54f")|| id.equals("625f83491fea07887e619065")|| id.equals("64b617f06d7b94ebbe2a20fa")) { if (id.equals("625f83491fea07887e61906b") || id.equals("62be51cc4d4edd56b588d54e") || id.equals("62be51f84d4edd56b588d54f") || id.equals("625f83491fea07887e619065") || id.equals("64b617f06d7b94ebbe2a20fa")) {
Log.e("666","摇晃了"); Log.e("666", "摇晃了");
playYaoHuangSingle(); playYaoHuangSingle();
} }
} }
@ -188,50 +191,45 @@ public class PrankDetailsActivity extends AppCompatActivity {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if(!isPlayAd){ if (!isPlayAd) {
new MaxPrankAdManager(PrankDetailsActivity.this, Constant.adIdPrankUse, new AdPrankListener() { isPlayAd = true;
if (!isPrepare) {
return;
}
AdManager.showAD(PrankDetailsActivity.this, new Function1<Integer, Unit>() {
@Override @Override
public void adPrankShow() { public Unit invoke(Integer integer) {
} if (integer == AdManager.type_show_close || integer == AdManager.type_no_cache || integer == AdManager.type_show_fail) {
if (isBoFang) {
@Override isBoFang = false;
public void adPrankClose() { Constant.mediaPlayer.pause();
isPlayAd = true; iv_bofang.setImageDrawable(getDrawable(R.mipmap.ic_bofang1));
if(!isPrepare){ animator.cancel();
return; } else {
} Constant.mediaPlayer.start();
isBoFang = true;
if (isBoFang){ iv_bofang.setImageDrawable(getDrawable(R.mipmap.ic_zanting1));
isBoFang =false;
Constant.mediaPlayer.pause();
iv_bofang.setImageDrawable(getDrawable(R.mipmap.ic_bofang1));
animator.cancel();
}else {
Constant.mediaPlayer.start();
isBoFang =true;
iv_bofang.setImageDrawable(getDrawable(R.mipmap.ic_zanting1));
/* if(id.equals("625f83491fea07887e61906b")){
animator.start(); animator.start();
}*/ }
animator.start();
} }
return null;
} }
}); });
}else { } else {
if(!isPrepare){ if (!isPrepare) {
return; return;
} }
if (isBoFang){ if (isBoFang) {
isBoFang =false; isBoFang = false;
Constant.mediaPlayer.pause(); Constant.mediaPlayer.pause();
iv_bofang.setImageDrawable(getDrawable(R.mipmap.ic_bofang1)); iv_bofang.setImageDrawable(getDrawable(R.mipmap.ic_bofang1));
animator.cancel(); animator.cancel();
}else { } else {
Constant.mediaPlayer.start(); Constant.mediaPlayer.start();
isBoFang =true; isBoFang = true;
iv_bofang.setImageDrawable(getDrawable(R.mipmap.ic_zanting1)); iv_bofang.setImageDrawable(getDrawable(R.mipmap.ic_zanting1));
/* if(id.equals("625f83491fea07887e61906b")){ /* if(id.equals("625f83491fea07887e61906b")){
animator.start(); animator.start();
@ -245,79 +243,82 @@ public class PrankDetailsActivity extends AppCompatActivity {
}); });
} }
public void playYaoHuangSingle(){ public void playYaoHuangSingle() {
if(!isPlayAd){ if (!isPlayAd) {
new MaxPrankAdManager(PrankDetailsActivity.this, Constant.adIdPrankUse, new AdPrankListener() { isPlayAd = true;
if (!isPrepare) {
return;
}
AdManager.showAD(PrankDetailsActivity.this, new Function1<Integer, Unit>() {
@Override @Override
public void adPrankShow() { public Unit invoke(Integer integer) {
} if (integer == AdManager.type_show_close || integer == AdManager.type_no_cache || integer == AdManager.type_show_fail) {
if (isYaoHuangBoFang) {
isYaoHuangBoFang = false;
Constant.mediaPlayer.pause();
animator.cancel();
} else {
Constant.mediaPlayer.start();
isYaoHuangBoFang = true;
animator.start();
}
}
@Override return null;
public void adPrankClose() {
isPlayAd = true;
if(!isPrepare){
return;
}
if (isYaoHuangBoFang){
isYaoHuangBoFang =false;
Constant.mediaPlayer.pause();
animator.cancel();
}else {
Constant.mediaPlayer.start();
isYaoHuangBoFang =true;
animator.start();
}
} }
}); });
}else {
if(!isPrepare){ } else {
if (!isPrepare) {
return; return;
} }
if (isYaoHuangBoFang){ if (isYaoHuangBoFang) {
isYaoHuangBoFang =false; isYaoHuangBoFang = false;
Constant.mediaPlayer.pause(); Constant.mediaPlayer.pause();
animator.cancel(); animator.cancel();
}else { } else {
Constant.mediaPlayer.start(); Constant.mediaPlayer.start();
isYaoHuangBoFang =true; isYaoHuangBoFang = true;
animator.start(); animator.start();
} }
} }
} }
public void playLoop(){ public void playLoop() {
} }
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
if (isBoFang || isYaoHuangBoFang){ if (isBoFang || isYaoHuangBoFang) {
Constant.mediaPlayer.stop(); Constant.mediaPlayer.stop();
} }
} }
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
if (mShakeUtils!=null){ if (mShakeUtils != null) {
mShakeUtils.onResume(); mShakeUtils.onResume();
} }
} }
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
if (mShakeUtils!=null){ if (mShakeUtils != null) {
mShakeUtils.onPause( ); mShakeUtils.onPause();
} }
} }
public boolean isShoucah(String id){ public boolean isShoucah(String id) {
iv_shoucang.setImageDrawable(getResources().getDrawable(R.mipmap.xihuan2)); iv_shoucang.setImageDrawable(getResources().getDrawable(R.mipmap.xihuan2));
String shouCang = SPUtils.getInstance().getString(Constant.shouCang); String shouCang = SPUtils.getInstance().getString(Constant.shouCang);
pankList = new ArrayList<>(); pankList = new ArrayList<>();
if(!shouCang.isEmpty()){ if (!shouCang.isEmpty()) {
JSONArray jsonArray = JSONArray.parseArray(shouCang); JSONArray jsonArray = JSONArray.parseArray(shouCang);
for (int i = 0; i < jsonArray.size(); i++) { for (int i = 0; i < jsonArray.size(); i++) {
PrankListModel prankListModel = JSON.parseObject(jsonArray.get(i).toString(), PrankListModel.class); PrankListModel prankListModel = JSON.parseObject(jsonArray.get(i).toString(), PrankListModel.class);
@ -325,28 +326,38 @@ public class PrankDetailsActivity extends AppCompatActivity {
} }
} }
boolean sss= false; boolean sss = false;
for (int i = 0; i < pankList.size(); i++) { for (int i = 0; i < pankList.size(); i++) {
if(Objects.equals(pankList.get(i).getCategoryId(), id)){ if (Objects.equals(pankList.get(i).getCategoryId(), id)) {
sss = true; sss = true;
iv_shoucang.setImageDrawable(getResources().getDrawable(R.mipmap.xihuan1)); iv_shoucang.setImageDrawable(getResources().getDrawable(R.mipmap.xihuan1));
} }
} }
return sss; return sss;
} }
public int getIndex(String id){ public int getIndex(String id) {
int reti = 0; int reti = 0;
for (int i = 0; i < pankList.size(); i++) { for (int i = 0; i < pankList.size(); i++) {
if(Objects.equals(pankList.get(i).getCategoryId(), id)){ if (Objects.equals(pankList.get(i).getCategoryId(), id)) {
reti = i; reti = i;
} }
} }
return reti; return reti;
} }
@Override
public void onBackPressed() {
super.onBackPressed();
AdManager.showAD(PrankDetailsActivity.this, new Function1<Integer, Unit>() {
@Override
public Unit invoke(Integer integer) {
return null;
}
});
}
} }

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="38dp"
android:indeterminateTint="@color/black"
android:layout_marginTop="60dp"
android:layout_centerHorizontal="true" />
</RelativeLayout>

BIN
app/testPrankApp.jks Normal file

Binary file not shown.

View File

@ -2,13 +2,14 @@ plugins {
id("com.android.application") version "8.1.0" apply false id("com.android.application") version "8.1.0" apply false
id("org.jetbrains.kotlin.android") version "1.8.0" apply false id("org.jetbrains.kotlin.android") version "1.8.0" apply false
id("com.google.gms.google-services") version "4.4.1" apply false id("com.google.gms.google-services") version "4.4.1" apply false
id ("com.google.firebase.crashlytics") version "2.9.2" apply false
} }
buildscript { buildscript {
repositories { repositories {
maven { url = uri("https://artifacts.applovin.com/android") }
} }
dependencies { dependencies {
classpath ("com.applovin.quality:AppLovinQualityServiceGradlePlugin:5.2.6")
} }
} }

View File

@ -1,5 +1,5 @@
[versions] [versions]
agp = "8.1.0" agp = "8.1.3"
junit = "4.13.2" junit = "4.13.2"
androidx-test-ext-junit = "1.1.5" androidx-test-ext-junit = "1.1.5"
espresso-core = "3.5.1" espresso-core = "3.5.1"

View File

@ -3,9 +3,7 @@ pluginManagement {
google() google()
mavenCentral() mavenCentral()
gradlePluginPortal() gradlePluginPortal()
maven { url = uri("https://android-sdk.is.com") }
maven { url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") }
maven { url = uri("https://artifact.bytedance.com/repository/pangle") }
} }
} }
dependencyResolutionManagement { dependencyResolutionManagement {
@ -14,12 +12,19 @@ dependencyResolutionManagement {
google() google()
mavenCentral() mavenCentral()
maven { url = uri("https://jitpack.io") } maven { url = uri("https://jitpack.io") }
maven { url = uri("https://android-sdk.is.com") }
maven { url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") } //Anythink(Core)
maven { url = uri("https://artifact.bytedance.com/repository/pangle") } maven ("https://jfrog.anythinktech.com/artifactory/overseas_sdk")
//Mintegral
maven ("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea")
//TopOn集成测试工具
// maven ( "https://jfrog.anythinktech.com/artifactory/debugger")
} }
} }
rootProject.name = "prink01" rootProject.name = "Prank App"
include(":app") include(":app")