android集成google AdMob

申请AdMob账号

先有google账号,然后可以直接申请AdMob账号
https://apps.admob.com/signup

集成AdMob到项目中

https://developers.google.cn/admob/android/quick-start
一共有4种广告形式

横幅(banner)
插页式(Interstitial)
原生(native)
激励视频(rewarded)

调试,测试unitId和线上unidId

测试unitId 如下

banner unitId: ca-app-pub-3940256099942544/6300978111
Interstitial unitId: ca-app-pub-3940256099942544/1033173712
native unitId: ca-app-pub-3940256099942544/2247696110
rewarded unitId: ca-app-pub-3940256099942544/5224354917

测试的时候请用测试unitId,最后要上线的以后务必要用线上unitId 测试一下有没有广告,切记
这里需要注意的地方,如果需要多个马甲包,然后admob只上其中一个,那么请注意做

在build.gradle里面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
buildTypes {
release {
...
buildConfigField("String", "BANNER_AD_UNIT_ID", getBannerAdUnitId("release"))
buildConfigField("String", "INTERSTITIAL_AD_UNIT_ID", getInterstitialAdUnitId("release"))
buildConfigField("String", "NATIVE_AD_UNIT_ID", getNativeAdUnitId("release"))
buildConfigField("String", "REWARDED_AD_UNIT_ID", getRewardedAdUnitId("release"))
}
debug {
...
buildConfigField("String", "BANNER_AD_UNIT_ID", getBannerAdUnitId("debug"))
buildConfigField("String", "INTERSTITIAL_AD_UNIT_ID", getInterstitialAdUnitId("debug"))
buildConfigField("String", "NATIVE_AD_UNIT_ID", getNativeAdUnitId("debug"))
buildConfigField("String", "REWARDED_AD_UNIT_ID", getRewardedAdUnitId("debug"))
}
}

def getBannerAdUnitId(type) {
def unitId = '""'
switch (getCurrentFlavorName()) {
case “majiabao":
if (type == "release") unitId = ‘“..."'
else unitId = '"ca-app-pub-3940256099942544/6300978111"'
break
}
return unitId
}
def getInterstitialAdUnitId(type) {
def unitId = '""'
switch (getCurrentFlavorName()) {
case “majiabao":
if (type == "release") unitId = ‘“…"'
else unitId = '"ca-app-pub-3940256099942544/1033173712"'
break
}
return unitId
}
def getNativeAdUnitId(type) {
def unitId = '""'
switch (getCurrentFlavorName()) {
case “majiabao":
if (type == "release") unitId = ‘“..."'
else unitId = '"ca-app-pub-3940256099942544/2247696110"'
break
}
return unitId
}
def getRewardedAdUnitId(type) {
def unitId = '""'
switch (getCurrentFlavorName()) {
case “majiabao":
if (type == "release") unitId = ‘“..."'
else unitId = '"ca-app-pub-3940256099942544/5224354917"'
break
}
return unitId
}
def getGoogleAdApplicationId() {
def appId = "ca-app-pub-1111111111111111~1111111111"
switch (getCurrentFlavorName()) {
case “majiabao":
appId = “..."
break
}
return appId
}
def getCurrentFlavorName() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
println(tskReqStr)
//里面需要把tskReqStr解析出majiabao,这个字符串处理一下
return tskReqStr
}

遇到的坑

换成线上unidId后发现返回的errorCode=0

  1. 经查明,需要在AdMob账号上面填写收款信息,AdMob账号首页会提示红框要填写收款信息,填写后需要审核,大概半天时间。
  2. 再次调用线上unidId,发现没有返回errorCode=0的情况,此时有广告出现了,但有时会返回errorCode=3,表示暂时没有合适的广告
  3. 记得加混淆代码,不然广告在release版本是没效果的。