Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
Notes
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bixing
Notes
Commits
75ffd479
Commit
75ffd479
authored
Dec 18, 2023
by
bixing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加开屏广告添加买量统计
parent
7f7ea75e
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
423 additions
and
2 deletions
+423
-2
build.gradle
app/build.gradle
+8
-0
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+20
-0
BaseApplication.java
app/src/main/java/com/ads/cal/notes/BaseApplication.java
+61
-2
WelcomeActivity.java
app/src/main/java/com/ads/cal/notes/WelcomeActivity.java
+44
-0
OnLoadAdEndCallBack.java
.../java/com/ads/cal/notes/callback/OnLoadAdEndCallBack.java
+7
-0
OnShowAdEndCallBack.java
.../java/com/ads/cal/notes/callback/OnShowAdEndCallBack.java
+7
-0
WelcomeAdManager.java
...main/java/com/ads/cal/notes/manager/WelcomeAdManager.java
+272
-0
strings.xml
app/src/main/res/values/strings.xml
+4
-0
No files found.
app/build.gradle
View file @
75ffd479
...
...
@@ -46,6 +46,9 @@ android {
applicationId
"com.ads.cal.notes"
versionName
"1.0.0.0"
signingConfig
signingConfigs
.
toolsTest
//release
manifestPlaceholders
=
[
google_ad_app_id:
"ca-app-pub-4184965935607567~3208771202"
]
// manifestPlaceholders = [google_ad_app_id: "ca-app-pub-3940256099942544~3347511713"]
}
}
}
...
...
@@ -63,6 +66,11 @@ dependencies {
implementation
'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation
'org.greenrobot:eventbus:3.3.1'
implementation
'com.google.android.gms:play-services-ads:22.6.0'
implementation
'androidx.lifecycle:lifecycle-process:2.6.2'
//facebook
implementation
'com.facebook.android:facebook-android-sdk:latest.release'
}
\ No newline at end of file
app/src/main/AndroidManifest.xml
View file @
75ffd479
...
...
@@ -50,6 +50,26 @@
android:configChanges=
"orientation|screenSize|keyboardHidden"
android:exported=
"true"
android:screenOrientation=
"portrait"
/>
<meta-data
android:name=
"com.google.android.gms.ads.APPLICATION_ID"
android:value=
"${google_ad_app_id}"
/>
<!-- facebook -->
<meta-data
android:name=
"com.facebook.sdk.ApplicationId"
android:value=
"@string/fb_id"
/>
<meta-data
android:name=
"com.facebook.sdk.ClientToken"
android:value=
"@string/fb_token"
/>
<meta-data
android:name=
"com.facebook.sdk.AutoLogAppEventsEnabled"
android:value=
"true"
/>
<meta-data
android:name=
"com.facebook.sdk.AutoInitEnabled"
android:value=
"true"
/>
<meta-data
android:name=
"com.facebook.sdk.AdvertiserIDCollectionEnabled"
android:value=
"true"
/>
</application>
</manifest>
\ No newline at end of file
app/src/main/java/com/ads/cal/notes/BaseApplication.java
View file @
75ffd479
package
com
.
ads
.
cal
.
notes
;
import
android.app.Activity
;
import
android.app.Application
;
import
android.os.Bundle
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.lifecycle.Lifecycle
;
import
androidx.lifecycle.LifecycleObserver
;
import
androidx.lifecycle.OnLifecycleEvent
;
import
androidx.lifecycle.ProcessLifecycleOwner
;
import
com.ads.cal.notes.db.DBManager
;
import
com.ads.cal.notes.manager.WelcomeAdManager
;
public
class
BaseApplication
extends
Application
{
public
class
BaseApplication
extends
Application
implements
Application
.
ActivityLifecycleCallbacks
,
LifecycleObserver
{
private
static
DBManager
dataBaseManager
;
private
static
Application
application
;
@Override
public
void
onCreate
()
{
super
.
onCreate
();
application
=
this
;
this
.
registerActivityLifecycleCallbacks
(
this
);
WelcomeAdManager
.
initAdMobile
(
this
);
ProcessLifecycleOwner
.
get
().
getLifecycle
().
addObserver
(
this
);
DBManager
.
init
(
this
);
}
...
...
@@ -25,5 +38,51 @@ public class BaseApplication extends Application {
return
DBManager
.
init
(
application
);
}
@OnLifecycleEvent
(
Lifecycle
.
Event
.
ON_START
)
protected
void
onMoveToForeground
()
{
// Show the ad (if available) when the app moves to foreground.
WelcomeAdManager
.
getInstance
().
showAdIfAvailable
(
currentActivity
);
}
private
Activity
currentActivity
;
@Override
public
void
onActivityCreated
(
@NonNull
Activity
activity
,
@Nullable
Bundle
savedInstanceState
)
{
}
@Override
public
void
onActivityStarted
(
@NonNull
Activity
activity
)
{
if
(!
WelcomeAdManager
.
getInstance
().
isShowing
())
{
currentActivity
=
activity
;
}
}
@Override
public
void
onActivityResumed
(
@NonNull
Activity
activity
)
{
}
@Override
public
void
onActivityPaused
(
@NonNull
Activity
activity
)
{
}
@Override
public
void
onActivityStopped
(
@NonNull
Activity
activity
)
{
}
@Override
public
void
onActivitySaveInstanceState
(
@NonNull
Activity
activity
,
@NonNull
Bundle
outState
)
{
}
@Override
public
void
onActivityDestroyed
(
@NonNull
Activity
activity
)
{
}
}
app/src/main/java/com/ads/cal/notes/WelcomeActivity.java
View file @
75ffd479
...
...
@@ -8,6 +8,10 @@ import android.widget.ProgressBar;
import
androidx.annotation.NonNull
;
import
com.ads.cal.notes.callback.OnLoadAdEndCallBack
;
import
com.ads.cal.notes.callback.OnShowAdEndCallBack
;
import
com.ads.cal.notes.manager.WelcomeAdManager
;
import
java.lang.ref.WeakReference
;
public
class
WelcomeActivity
extends
BaseActivity
{
...
...
@@ -29,6 +33,11 @@ public class WelcomeActivity extends BaseActivity {
void
intData
()
{
handler
=
new
MyHandler
(
this
);
handler
.
sendEmptyMessage
(
1
);
if
(
WelcomeAdManager
.
getInstance
().
isAdAvailable
())
{
showAdIfAvailable
();
}
else
{
loadAd
();
}
}
public
void
setProgressBarProgress
(
int
i
)
{
...
...
@@ -53,6 +62,41 @@ public class WelcomeActivity extends BaseActivity {
}
}
private
void
showAdIfAvailable
()
{
handler
.
removeCallbacksAndMessages
(
null
);
WelcomeAdManager
.
getInstance
().
setOnShowAdCallBack
(
new
OnShowAdEndCallBack
()
{
@Override
public
void
onShowAdComplete
()
{
Intent
intent
=
new
Intent
(
WelcomeActivity
.
this
,
MainActivity
.
class
);
startActivity
(
intent
);
finish
();
}
@Override
public
void
onShowAdFailed
(
String
errorMsg
)
{
Intent
intent
=
new
Intent
(
WelcomeActivity
.
this
,
MainActivity
.
class
);
startActivity
(
intent
);
finish
();
}
});
WelcomeAdManager
.
getInstance
().
showAdIfAvailable
(
this
);
}
private
void
loadAd
()
{
WelcomeAdManager
.
getInstance
().
setOnLoadAdCallBack
(
new
OnLoadAdEndCallBack
()
{
@Override
public
void
onLoadAdComplete
()
{
showAdIfAvailable
();
}
@Override
public
void
onLoadAdFailed
(
String
errorMsg
)
{
}
});
WelcomeAdManager
.
getInstance
().
loadAd
();
}
private
static
class
MyHandler
extends
Handler
{
private
final
WeakReference
<
Activity
>
weakReference
;
private
int
i
=
0
;
...
...
app/src/main/java/com/ads/cal/notes/callback/OnLoadAdEndCallBack.java
0 → 100644
View file @
75ffd479
package
com
.
ads
.
cal
.
notes
.
callback
;
public
interface
OnLoadAdEndCallBack
{
void
onLoadAdComplete
();
void
onLoadAdFailed
(
String
errorMsg
);
}
app/src/main/java/com/ads/cal/notes/callback/OnShowAdEndCallBack.java
0 → 100644
View file @
75ffd479
package
com
.
ads
.
cal
.
notes
.
callback
;
public
interface
OnShowAdEndCallBack
{
void
onShowAdComplete
();
void
onShowAdFailed
(
String
errorMsg
);
}
app/src/main/java/com/ads/cal/notes/manager/WelcomeAdManager.java
0 → 100644
View file @
75ffd479
package
com
.
ads
.
cal
.
notes
.
manager
;
import
android.app.Activity
;
import
android.content.Context
;
import
androidx.annotation.NonNull
;
import
com.ads.cal.notes.BaseApplication
;
import
com.ads.cal.notes.LLog
;
import
com.ads.cal.notes.callback.OnLoadAdEndCallBack
;
import
com.ads.cal.notes.callback.OnShowAdEndCallBack
;
import
com.google.android.gms.ads.AdError
;
import
com.google.android.gms.ads.AdRequest
;
import
com.google.android.gms.ads.FullScreenContentCallback
;
import
com.google.android.gms.ads.LoadAdError
;
import
com.google.android.gms.ads.MobileAds
;
import
com.google.android.gms.ads.appopen.AppOpenAd
;
import
com.google.android.gms.ads.initialization.InitializationStatus
;
import
com.google.android.gms.ads.initialization.OnInitializationCompleteListener
;
import
java.util.Date
;
public
class
WelcomeAdManager
{
//
private
static
final
String
AD_UNIT_ID
=
"ca-app-pub-4184965935607567/5740399928"
;
// private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921";
private
AppOpenAd
appOpenAd
=
null
;
private
boolean
isLoading
=
false
;
private
boolean
isShowing
=
false
;
private
OnLoadAdEndCallBack
onLoadAdEndCallBack
;
private
OnShowAdEndCallBack
onShowAdEndCallBack
;
public
boolean
isShowing
()
{
return
isShowing
;
}
/**
* Keep track of the time an app open ad is loaded to ensure you don't show an expired ad.
*/
private
long
loadTime
=
0
;
/**
* Constructor.
*/
public
WelcomeAdManager
()
{
}
private
static
final
class
AppOpenAdManagerHolder
{
static
final
WelcomeAdManager
WELCOME_AD_MANAGER
=
new
WelcomeAdManager
();
}
public
static
WelcomeAdManager
getInstance
()
{
return
AppOpenAdManagerHolder
.
WELCOME_AD_MANAGER
;
}
public
static
void
initAdMobile
(
Context
context
)
{
MobileAds
.
initialize
(
context
,
new
OnInitializationCompleteListener
()
{
@Override
public
void
onInitializationComplete
(
@NonNull
InitializationStatus
initializationStatus
)
{
}
});
}
/**
* Check if ad was loaded more than n hours ago.
*/
private
boolean
wasLoadTimeLessThanNHoursAgo
()
{
long
dateDifference
=
(
new
Date
()).
getTime
()
-
loadTime
;
long
numMilliSecondsPerHour
=
3600000
;
return
(
dateDifference
<
(
numMilliSecondsPerHour
*
(
long
)
4
));
}
/**
* Check if ad exists and can be shown.
*/
public
boolean
isAdAvailable
()
{
// Ad references in the app open beta will time out after four hours, but this time limit
// may change in future beta versions. For details, see:
// https://support.google.com/admob/answer/9341964?hl=en
return
appOpenAd
!=
null
&&
wasLoadTimeLessThanNHoursAgo
();
}
/**
* Show the ad if one isn't already showing.
*
* @param activity the activity that shows the app open ad
*/
public
boolean
showAdIfAvailable
(
@NonNull
Activity
activity
)
{
// If the app open ad is already showing, do not show the ad again.
if
(
isShowing
)
{
LLog
.
d
(
"The app open ad is already showing."
);
return
false
;
}
// If the app open ad is not available yet, invoke the callback then load the ad.
if
(!
isAdAvailable
())
{
LLog
.
d
(
"The app open ad is not ready yet."
);
loadAd
();
return
false
;
}
appOpenAd
.
setFullScreenContentCallback
(
new
FullScreenContentCallback
()
{
/** Called when full screen content is dismissed. */
@Override
public
void
onAdDismissedFullScreenContent
()
{
// Set the reference to null so isAdAvailable() returns false.
appOpenAd
=
null
;
isShowing
=
false
;
LLog
.
d
(
"onAdDismissedFullScreenContent."
);
if
(
null
!=
onShowAdEndCallBack
)
{
onShowAdEndCallBack
.
onShowAdComplete
();
onShowAdEndCallBack
=
null
;
}
loadAd
();
// FireBaseAnalyticsUtils.init().send(AD_OPEN_CLOSE);
}
/** Called when fullscreen content failed to show. */
@Override
public
void
onAdFailedToShowFullScreenContent
(
@NonNull
AdError
adError
)
{
appOpenAd
=
null
;
isShowing
=
false
;
LLog
.
d
(
"onAdFailedToShowFullScreenContent: "
+
adError
.
getMessage
());
if
(
null
!=
onShowAdEndCallBack
)
{
onShowAdEndCallBack
.
onShowAdFailed
(
adError
.
getMessage
());
onShowAdEndCallBack
=
null
;
}
loadAd
();
// FireBaseAnalyticsUtils.init().send(AD_OPEN_SHOW_FAILED);
}
/** Called when fullscreen content is shown. */
@Override
public
void
onAdShowedFullScreenContent
()
{
LLog
.
d
(
"onAdShowedFullScreenContent."
);
}
@Override
public
void
onAdImpression
()
{
super
.
onAdImpression
();
LLog
.
d
(
"onAdImpression."
);
// FireBaseAnalyticsUtils.init().send(AD_OPEN_EXP);
}
@Override
public
void
onAdClicked
()
{
super
.
onAdClicked
();
// FireBaseAnalyticsUtils.init().send(AD_OPEN_CLK);
}
});
isShowing
=
true
;
appOpenAd
.
show
(
activity
);
return
true
;
}
public
void
setOnLoadAdCallBack
(
OnLoadAdEndCallBack
onLoadAdEndCallBack
)
{
this
.
onLoadAdEndCallBack
=
onLoadAdEndCallBack
;
}
public
void
setOnShowAdCallBack
(
OnShowAdEndCallBack
onShowAdEndCallBack
)
{
this
.
onShowAdEndCallBack
=
onShowAdEndCallBack
;
}
/**
* Load an ad.
*
*/
public
void
loadAd
()
{
// Do not load ad if there is an unused ad or one is already loading.
if
(
isLoading
||
isAdAvailable
())
{
return
;
}
isLoading
=
true
;
AdRequest
request
=
new
AdRequest
.
Builder
().
build
();
AppOpenAd
.
load
(
BaseApplication
.
getApplication
(),
AD_UNIT_ID
,
request
,
new
AppOpenAd
.
AppOpenAdLoadCallback
()
{
/**
* Called when an app open ad has loaded.
*
* @param ad the loaded app open ad.
*/
@Override
public
void
onAdLoaded
(
AppOpenAd
ad
)
{
appOpenAd
=
ad
;
isLoading
=
false
;
loadTime
=
(
new
Date
()).
getTime
();
if
(
onLoadAdEndCallBack
!=
null
)
{
onLoadAdEndCallBack
.
onLoadAdComplete
();
onLoadAdEndCallBack
=
null
;
}
LLog
.
d
(
"onAdLoaded."
);
// FireBaseAnalyticsUtils.init().send(AD_OPEN_LOAD_SUCCESS);
}
/**
* Called when an app open ad has failed to load.
*
* @param loadAdError the error.
*/
@Override
public
void
onAdFailedToLoad
(
@NonNull
LoadAdError
loadAdError
)
{
isLoading
=
false
;
if
(
onLoadAdEndCallBack
!=
null
)
{
onLoadAdEndCallBack
.
onLoadAdFailed
(
loadAdError
.
getMessage
());
onLoadAdEndCallBack
=
null
;
}
LLog
.
d
(
"onAdFailedToLoad: "
+
loadAdError
.
getMessage
());
// FireBaseAnalyticsUtils.init().send(AD_OPEN_LOAD_FAILED);
}
});
// FireBaseAnalyticsUtils.init().send(AD_OPEN_START_LOAD);
}
// {
// "Code": 0,
// "Message": "Error while connecting to ad server: SSL handshake aborted: ssl=0x7f75486ac0: I\/O error during system call, Connection reset by peer",
// "Domain": "com.google.android.gms.ads",
// "Cause": "null",
// "Response Info": {
// "Response ID": "null",
// "Mediation Adapter Class Name": "",
// "Adapter Responses": [],
// "Response Extras": {}
// }
// }
{
// "Code": 0,
// "Message": "Received error HTTP response code: 403",
// "Domain": "com.google.android.gms.ads",
// "Cause": "null",
// "Response Info": {
// "Response ID": "null",
// "Mediation Adapter Class Name": "",
// "Adapter Responses": [],
// "Response Extras": {}
// }
// {
// "Code": 0,
// "Message": "Error while connecting to ad server: SSL handshake aborted: ssl=0x7f6dc9f100: I\/O error during system call, Connection reset by peer",
// "Domain": "com.google.android.gms.ads",
// "Cause": "null",
// "Response Info": {
// "Response ID": "null",
// "Mediation Adapter Class Name": "",
// "Adapter Responses": [],
// "Response Extras": {}
// }
// }
}
}
app/src/main/res/values/strings.xml
View file @
75ffd479
...
...
@@ -9,4 +9,8 @@
<string
name=
"clear"
>
Clear
</string>
<string
name=
"privacy_policy"
>
Privacy Policy
</string>
<string
name=
"about_us"
>
About Us
</string>
<string
name=
"fb_id"
>
222231504258065
</string>
<string
name=
"fb_token"
>
25dfa51eb411179f76070ff073bd4948
</string>
</resources>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment