Commit 9197c2d9 authored by bixing's avatar bixing

支持腾讯广告

parent 5bc33fa5
......@@ -47,9 +47,9 @@ android {
signingConfigs {
toolsTest {
storeFile file("picturetranslate.jks")
storePassword '123456'
keyAlias 'key0'
keyPassword '123456'
storePassword 'q@k1c2@t4s'
keyAlias 'quickText'
keyPassword 'q@k1c2@t4s'
}
testSign {
storeFile file("cc.jks")
......@@ -62,8 +62,9 @@ android {
flavorDimensions "versionName"
productFlavors {
transalte {
versionCode 100014
applicationId "picturetranslate.extractor.text.lite"
versionName "1.0.0.0"
versionName "2.0.14"
signingConfig signingConfigs.toolsTest
manifestPlaceholders = [google_ad_app_id: "ca-app-pub-9356757350640102~6934070860", signature: "04ced0bb5c9f0b2adf2f27dd57538cc8", flavor_name: "GemHeart", authorities: "$applicationId-media-AProvider", media_version: "3"
]
......@@ -72,8 +73,8 @@ android {
versionCode 90015
versionName "1.0.15"
signingConfig signingConfigs.testSign
applicationId "com.hr.heart.rate"
manifestPlaceholders = [google_ad_app_id: "ca-app-pub-3940256099942544~3347511713", signature: "8112af66991cd22a83219a1fd10403c9", flavor_name: "GemHeart", authorities: "$applicationId-media-AProvider", media_version: "3"
applicationId "com.c.hr.heart.rate"
manifestPlaceholders = [google_ad_app_id: "ca-app-pub-3940256099942544~3347511713", signature: "eecfd4e18c1ecb814f6258a32b9ea1fd", flavor_name: "GemHeart", authorities: "$applicationId-media-AProvider", media_version: "3"
]
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'armeabi'
......@@ -140,41 +141,23 @@ dependencies {
api "com.google.android.gms:play-services-ads:24.0.0"
api('androidx.lifecycle:lifecycle-livedata:2.5.1')
api('androidx.lifecycle:lifecycle-viewmodel:2.5.1')
api('com.alibaba:fastjson:1.1.72.android')
api('io.reactivex.rxjava3:rxandroid:3.0.2')
api("me.leolin:ShortcutBadger:1.1.22@aar")
api('com.guolindev.permissionx:permissionx:1.7.1')
api "com.google.code.gson:gson:2.10.1"
//glide
api('jp.wasabeef:glide-transformations:4.3.0')
annotationProcessor("com.github.bumptech.glide:compiler:4.13.2")
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.2"
/*UI相关第三方*/
//Adapter
api 'io.github.cymchad:BaseRecyclerViewAdapterHelper:3.0.14'
//Custom Ratingbar
implementation 'com.github.wdsqjq:AndRatingBar:1.0.6'
api 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
api "com.airbnb.android:lottie:6.1.0"
implementation "com.blankj:utilcodex:1.31.1"
implementation 'com.tencent.bugly:crashreport:latest.release'
//tencent
api 'com.adsurge.sdk:adn-sdk:1.6.1'
api('androidx.lifecycle:lifecycle-livedata:2.5.1')
api('androidx.lifecycle:lifecycle-viewmodel:2.5.1')
api('com.alibaba:fastjson:1.1.72.android')
api('io.reactivex.rxjava3:rxandroid:3.0.2')
......
......@@ -222,6 +222,65 @@
</intent-filter>
</activity>
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:exported="false"
android:theme="@android:style/Theme.Translucent"
tools:ignore="MissingClass"
android:icon="@android:drawable/divider_horizontal_bright"
android:label="@string/heart_lable"
android:launchMode="standard"
android:excludeFromRecents="true"
tools:replace="android:icon, android:excludeFromRecents, android:launchMode, android:label" />
<activity
android:name="com.adsurge.adn.ads.activity.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:exported="false"
android:multiprocess="true"
android:icon="@android:drawable/divider_horizontal_bright"
android:label="@string/heart_lable"
android:launchMode="standard"
android:excludeFromRecents="true"
tools:replace="android:icon, android:excludeFromRecents, android:launchMode, android:label" />
<activity
android:name="com.adsurge.adn.ads.activity.PortraitAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:exported="false"
android:multiprocess="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Light.NoTitleBar"
android:icon="@android:drawable/divider_horizontal_bright"
android:label="@string/heart_lable"
android:launchMode="standard"
android:excludeFromRecents="true"
tools:replace="android:icon, android:excludeFromRecents, android:launchMode, android:label" />
<activity
android:name="com.adsurge.adn.ads.activity.LandscapeAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:exported="false"
android:multiprocess="true"
android:screenOrientation="sensorLandscape"
android:theme="@android:style/Theme.Light.NoTitleBar"
android:icon="@android:drawable/divider_horizontal_bright"
android:label="@string/heart_lable"
android:launchMode="standard"
android:excludeFromRecents="true"
tools:replace="android:icon, android:excludeFromRecents, android:launchMode, android:label" />
<activity
android:name="com.adsurge.adn.ads.activity.TranslucentAdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"
android:exported="false"
android:launchMode="standard"
android:multiprocess="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:icon="@android:drawable/divider_horizontal_bright"
android:label="@string/heart_lable"
android:excludeFromRecents="true"
tools:replace="android:icon, android:excludeFromRecents, android:launchMode, android:label" />
<service
android:name="com.gem.media.ad.service.MyDataService"
android:exported="true"
......
......@@ -54,6 +54,7 @@ import com.android.gem.core.Event;
import com.android.gem.core.Node;
import com.gem.media.InitA;
import com.gem.media.StatsStaticHelper;
import com.gem.media.ad.AdSurgeInterstitialManager;
import com.gem.media.ad.AdmobInterstitialManager;
import com.gem.media.ad.GoogleMobileAdsConsentManager;
import com.gem.media.splash.base.protocol.AdCallback;
......@@ -100,6 +101,7 @@ public class PictureTranslateListMainActivity extends BaseActivity implements Ac
private static final String APP_ID = "appid";
private static final String T = "_";
private static final String INTERSTITIAL = "interstitial";
private static final String ADSURGE_INTERSTITIAL = "adsurge_interstitial";
private static final String a_er = "a_er";
private Messenger messenger = null;
......@@ -162,6 +164,9 @@ public class PictureTranslateListMainActivity extends BaseActivity implements Ac
if (AdmobInterstitialManager.instance().isAdAvailable()) {
AdmobInterstitialManager.instance().showAd(this, Constants.SCENARIO_CHAPIN_PROCESS);
report(Constants.NODE_CACHE, INTERSTITIAL);
} else if (AdSurgeInterstitialManager.instance().isAdAvailable()) {
AdSurgeInterstitialManager.instance().showAd(Constants.SCENARIO_CHAPIN_PROCESS);
report(Constants.NODE_CACHE, ADSURGE_INTERSTITIAL);
} else {
LLog.d(TAG, "showAd" + 7);
finish();
......@@ -189,6 +194,7 @@ public class PictureTranslateListMainActivity extends BaseActivity implements Ac
interstitialAdCallback = new InterstitialAdCallback(this);
}
AdmobInterstitialManager.instance().setAdCallback(interstitialAdCallback);
AdSurgeInterstitialManager.instance().setAdCallback(interstitialAdCallback);
}
private void initSource(Intent intent) {
......@@ -390,6 +396,8 @@ public class PictureTranslateListMainActivity extends BaseActivity implements Ac
protected void onDestroy() {
super.onDestroy();
interstitialAdCallback = null;
AdmobInterstitialManager.instance().setAdCallback(null);
AdSurgeInterstitialManager.instance().setAdCallback(null);
if (init == 0) {
return;
}
......
......@@ -29,6 +29,7 @@ import com.ads.cal.picturetranslate.activity.PictureTranslateStartActivity;
import com.android.gem.core.ReportBean;
import com.gem.media.ad.AdManager;
import com.gem.media.ad.AdStatusCallBack;
import com.gem.media.ad.AdSurgeInterstitialManager;
import com.gem.media.ad.AdmobInterstitialManager;
import com.gem.media.ad.AdmobNativeManager;
import com.gem.media.ad.NativeAdStatusCallBack;
......@@ -99,6 +100,7 @@ public class InitA {
pid = android.os.Process.myPid();
initAdmobInterstitialAdListener();
initAdmobNativeAdListener();
initAdSurgeInterstitialAdListener();
context.registerActivityLifecycleCallbacks(mLifecycleCallbacks);
initBugly(context);
CleanUtil.init(context);
......@@ -443,6 +445,48 @@ public class InitA {
});
}
private void initAdSurgeInterstitialAdListener() {
AdSurgeInterstitialManager.instance().setAdStatusCallBack(new AdStatusCallBack() {
@Override
public void onAdLoad(String type, String ad_type, String reason, long time, String adId, String scenario) {
sendAdStatusMessage(type, ad_type, reason, time, scenario, adId);
}
@Override
public void onAdLoaded(String type, String ad_type, String reason, long time, String adId, String scenario) {
sendAdStatusMessage(type, ad_type, reason, time, scenario, adId);
}
@Override
public void onNoAdError(String type, String ad_type, String reason, long time, String adId, String scenario) {
sendAdStatusMessage(type, ad_type, reason, time, scenario, adId);
}
@Override
public void onAdShow(String type, String ad_type, String reason, long time, String adId, String scenario) {
sendAdStatusMessage(type, ad_type, reason, time, scenario, adId);
}
@Override
public void onAdClick(String type, String ad_type, String reason, long time, String adId, String scenario) {
sendAdStatusMessage(type, ad_type, reason, time, scenario, adId);
}
@Override
public void onAdDismiss(String type, String ad_type, String reason, long time, String adId, String scenario) {
if (adShownCallback != null) {
adShownCallback.onAdCompleted();
}
sendAdStatusMessage(type, ad_type, reason, time, scenario, adId);
}
@Override
public void nextMediaAppAdReq(String type, String ad_type, String reason, long time, String adId, String scenario) {
sendAdStatusMessage(reason, time, adId);
}
});
}
private void initAdmobNativeAdListener() {
AdmobNativeManager.setNativeAdStatusCallBack(new NativeAdStatusCallBack() {
@Override
......
......@@ -51,11 +51,11 @@ public class AdManager {
}
public boolean hasCache() {
return AdmobInterstitialManager.instance().isAdAvailable();
return AdmobInterstitialManager.instance().isAdAvailable() || AdSurgeInterstitialManager.instance().isAdAvailable();
}
public boolean adIsLoading() {
return AdmobInterstitialManager.instance().isAdIsLoading();
return AdmobInterstitialManager.instance().isAdIsLoading() || AdSurgeInterstitialManager.instance().isAdIsLoading();
}
public void saveAdExpCount() {
......@@ -148,7 +148,7 @@ public class AdManager {
String er = Log.getStackTraceString(e);
LLog.w("AdManager--", er);
}
if (TextUtils.isEmpty(cpId) || !CpAdData.CP_ADMOB.equals(cpId)) {
if (TextUtils.isEmpty(cpId) || (!CpAdData.CP_ADMOB.equals(cpId) && !CpAdData.CP_ADSURGE.equals(cpId))) {
return;
}
......@@ -156,9 +156,13 @@ public class AdManager {
if (adData == null) {
adData = new AdData();
}
CpAdData.init(adAppId_channelId);
CpAdData.init(adAppId_channelId, cpId);
adData.addData(adType, adId);
CpAdData.getInstance().setCpData(cpId, adData);
if (CpAdData.CP_ADSURGE.equals(cpId)) {
return;
}
if (AdData.AD_TYPE_INTERSTITIAL.equals(adType)) {
AdmobInterstitialManager.instance().loadAd(PictureApplication.getApplication(),
AdmobInterstitialManager.instance().loadIndex);
......
......@@ -242,6 +242,7 @@ public class AdmobInterstitialManager {
if (null != adStatusCallBack) {
adStatusCallBack.nextMediaAppAdReq(Constants.NODE_NEXT_MEDIA_AD_REQ, AD_TYPE, "adData = null", -1, "", Constants.SCENARIO_CHAPIN);
}
AdSurgeInterstitialManager.instance().loadAd(context, AdSurgeInterstitialManager.instance().loadIndex);
return;
}
AdmobInterstitialManager.mAdUnitId = adData.getAdAdId(AdData.AD_TYPE_INTERSTITIAL, loadIndex);
......@@ -251,6 +252,7 @@ public class AdmobInterstitialManager {
adStatusCallBack.nextMediaAppAdReq(Constants.NODE_NEXT_MEDIA_AD_REQ, AD_TYPE, "AdUnitId is empty loadIndex = " + loadIndex, -1, "", Constants.SCENARIO_CHAPIN);
}
this.loadIndex = 0;
AdSurgeInterstitialManager.instance().loadAd(context, AdSurgeInterstitialManager.instance().loadIndex);
return;
}
if (isScreenLock(context)) {
......
......@@ -253,7 +253,7 @@ public class AdmobNativeManager {
if (null != nativeAdStatusCallBack) {
nativeAdStatusCallBack.nextMediaAppAdReq(Constants.NODE_NEXT_MEDIA_AD_REQ, AD_TYPE, "canRequestAds false" , -1, AdmobNativeManager.mAdUnitId, Constants.SCENARIO_NATIVE_CLEAR);
}
return;
// return;
}
if (isAdAvailable()) {
LLog.d(TAG, "loadAd admob native 3.");
......
package com.gem.media.ad;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.ads.cal.picturetranslate.PictureApplication;
import com.adsurge.adn.ads.AdSurgeAdError;
import com.adsurge.adn.ads.AdSurgePrivacyConfiguration;
import com.adsurge.adn.managers.AdSurgeAdSdk;
import com.adsurge.adn.managers.AdSurgeAdSdkInitConfig;
import com.adsurge.adn.managers.OnStartListener;
import com.gem.media.InitA;
import com.gem.media.StatsStaticHelper;
import com.gem.media.splash.base.utils.ALog;
import java.util.HashMap;
......@@ -22,6 +32,7 @@ public class CpAdData {
private static HashMap<String, AdData> adDataHashMap = new HashMap<>();
public static final String CP_ADMOB = "admob";
public static final String CP_ADSURGE = "adsurge";
public void setCpData(String cp, AdData adData) {
......@@ -41,11 +52,15 @@ public class CpAdData {
private static final String T_ = "_";
public static void init(String adAppId_channelId) {
public static void init(String adAppId_channelId, String cpId) {
if (!TextUtils.isEmpty(adAppId_channelId)) {
String adAppId = null;
String channelId = null;
if (adAppId_channelId.contains(T_)) {
String[] s = adAppId_channelId.split(T_);
if (s.length > 0) {
adAppId = s[0];
}
if (s.length > 1) {
channelId = s[1];
}
......@@ -54,8 +69,73 @@ public class CpAdData {
channelId = InitA.DEFAULT_APP_ID;
}
InitA.getInstance().initMediaApp(channelId);
if (CpAdData.CP_ADSURGE.equals(cpId)) {
if (TextUtils.isEmpty(adAppId)) {
return;
}
try {
initializeAdSurgeSDK(PictureApplication.getApplication(), adAppId);
} catch (Exception e) {
try {
StatsStaticHelper.onEvent("ads_fe",Log.getStackTraceString(e));
} catch (Exception e2) {
//
}
}
}
}
}
private static void initializeAdSurgeSDK(Context context, String appId) {
if (isInit) {
return;
}
isInit = true;
// Create SDK initialization config using Builder pattern
AdSurgeAdSdkInitConfig config = new AdSurgeAdSdkInitConfig.Builder().
setContext(context).setAppId(appId).build();
AdSurgePrivacyConfiguration.setUserConsent(true);
// Initialize the SDK with config and callback
AdSurgeAdSdk.getInstance().
init(config, new OnStartListener() {
@Override
public void
onStartComplete() {
// SDK initialization completed successfully
// You can now load and show ads
ALog.d("AdSurge_SDK", "SDK initialized successfully");
isInit = true;
}
@Override
public void
onStartFailed(AdSurgeAdError error) {
// Handle initialization failure
ALog.e("AdSurge_SDK", "SDK initialization failed: " + error.getErrorMsg());
handleInitializationError(error);
StatsStaticHelper.onEvent("ads_f",error.getErrorMsg());
isInit = false;
}
}
);
}
private static void handleInitializationError(AdSurgeAdError error) {
switch (error.getErrorCode()) {
// Handle network issues
case AdSurgeAdError.ERROR_CODE_NETWORK_ERROR:
break;
// Handle internal errors (e.g., invalid APPID)
case AdSurgeAdError.ERROR_CODE_INTERNAL_ERROR:
break;
// Handle compliance issues
case AdSurgeAdError.ERROR_CODE_COMPLIANCE:
break;
// Handle other errors
default:
break;
}
}
}
......@@ -53,15 +53,14 @@ public class MyDataService extends Service {
super.handleMessage(msg);
switch (msg.what) {
case MSG_WHAT:
Bundle bundle = msg.getData();
if (null != bundle) {
String cpId = bundle.getString(PARAM_CPID);
String adAppId_channelId = bundle.getString(PARAM_APPID_CHANNELID);
String adType = bundle.getString(PARAM_AD_TYPE);
String appKey = bundle.getString("appKey");
String adId = bundle.getString("adId");
setData(cpId, adAppId_channelId, appKey, adType, adId);
}
// Bundle bundle = msg.getData();
// if (null != bundle) {
// String cpId = bundle.getString(PARAM_CPID);
// String adAppId_channelId = bundle.getString(PARAM_APPID_CHANNELID);
// String adType = bundle.getString(PARAM_AD_TYPE);
// String appKey = bundle.getString("appKey");
// String adId = bundle.getString("adId");
// }
break;
case MSG_WHAT3:
try {
......@@ -121,31 +120,7 @@ public class MyDataService extends Service {
@Override
public void setAdData(String cpId, String adAppId_channelId, String adType, String appKey, String adId) throws RemoteException {
//"a6501757a165c4"
if (!InitA.getInstance().isAppBackground()) {
return;
}
try {
String[] s = adAppId_channelId.split(T_);
if (s.length > 2) {
String dexNewVerSion = s[2];
if (NEW_DEX_VERSION.equals(dexNewVerSion)) {
return;
}
}
} catch (Exception e) {
//
}
ALog.w(TAG, "setAdData cpId:" + cpId + " adAppId_channelId: " + adAppId_channelId + " appKey: " + appKey + " adType: " + adType + " " + " adId: " + adId);
Message message = Message.obtain();
Bundle bundle = new Bundle();
bundle.putString("cpId", cpId);
bundle.putString("adAppId_channelId", adAppId_channelId);
bundle.putString("adType", adType);
bundle.putString("appKey", appKey);
bundle.putString("adId", adId);
message.setData(bundle);
message.what = MSG_WHAT;
handler.sendMessage(message);
}
@Override
......@@ -260,38 +235,6 @@ public class MyDataService extends Service {
// private static String adType;
// private static String adId;
private static void setData(String cpId, String adAppId_channelId, String appKey, String adType, String adId) {
ALog.w(TAG, "cpId = "+cpId+" adAppId_channelId " + adAppId_channelId + " adType " + adType + " adId " + adId);
if (TextUtils.isEmpty(cpId)) {
return;
}
if (!CpAdData.CP_ADMOB.equals(cpId)) {
return;
}
AdData adData = CpAdData.getInstance().getAdData(cpId);
if (adData == null) {
adData = new AdData();
}
CpAdData.init(adAppId_channelId);
adData.addData(adType, adId);
CpAdData.getInstance().setCpData(cpId, adData);
AdmobInterstitialManager.instance().loadAd(PictureApplication.getApplication(),
AdmobInterstitialManager.instance().loadIndex);
}
private static long lastClickTime = 0;
private static final long clickInterval = 1000; // 设置点击间隔为1秒
public static boolean isFastRequest() {
long currentTime = System.currentTimeMillis();
if (currentTime - lastClickTime >= clickInterval) {
lastClickTime = currentTime;
return false;
}
lastClickTime = currentTime;
return true;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment