产品 Google AdMob 移动广告 SDK(Android) 指南
开始使用

目录
前提条件
导入移动广告 SDK
项目级 build.gradle 示例(节选)
应用级 build.gradle 示例(节选)

本指南适用于希望借助AdMob通过 Android 应用获利但不使用 Firebase 的发布商。如果您打算或考虑在应用中添加 Firebase,请改为参阅本指南的 AdMob 与 Firebase 版本。

要展示广告和赚取收入,第一步是将 Google 移动广告 SDK 集成到应用中。集成 SDK 后,您可以选择一种广告格式,如原生广告或激励视频广告,然后按照相应步骤进行实现。

前提条件

使用 Android Studio 1.0 或更高版本
定位到 Android API 级别 14 或更高级别
推荐:创建 Google AdMob 帐号并注册应用。
导入移动广告 SDK

通过使用指向 Google Maven 代码库的 Gradle 依赖项,应用可以导入 Google 移动广告 SDK。要使用该代码库,您需要在应用的项目级 build.gradle 文件中对其进行引用。请打开该文件,并找到 allprojects 部分:

项目级 build.gradle 示例(节选)

allprojects {
    repositories {
        google()
        jcenter()
    }
}

如果上面的 google() 指令不存在,请添加该指令。

接下来,请打开您应用的应用级 build.gradle 文件,并找到“dependencies”部分。

应用级 build.gradle 示例(节选)

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.google.android.gms:play-services-ads:17.2.0'
}

请添加上面的粗体代码行,该代码会指示 Gradle 提取最新版本的移动广告 SDK。添加完该代码后,请保存文件并执行“Gradle sync”。

更新您的 AndroidManifest.xml

通过添加下面显示的 标记,即可将您的 AdMob 应用 ID 添加到您的应用的 AndroidManifest.xml 文件中。您可以在 AdMob 界面中找到您的应用 ID。对于 android:value,请插入 AdMob 应用 ID 并加上引号,如下所示。

<manifest>
    <application>
        <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="YOUR_ADMOB_APP_ID"/>
    </application>
</manifest>

重要提示:自 Google 移动广告 SDK 17.0.0 版本开始,均须执行此步骤。如果未能添加此 代码,将会导致崩溃,并显示以下消息:"The Google Mobile Ads SDK was initialized incorrectly."
初始化 MobileAds

加载广告之前,请先使用 AdMob 应用 ID 调用 MobileAds.initialize(),以便让应用初始化移动广告 SDK。此操作仅需执行一次,最好是在应用启动时执行。

警告:在调用 MobileAds.initialize() 时,移动广告 SDK 或中介合作伙伴 SDK 可能会预加载广告。如果您需要获得欧洲经济区 (EEA) 用户的同意,设置任何专门用于特定请求的标记(例如 tagForChildDirectedTreatment 或 tag_for_under_age_of_consent),或者在加载广告之前采取任何其他操作,请确保在初始化移动广告 SDK 之前先完成这些操作。
以下示例说明了如何在 Activity 中调用 initialize() 方法:

示例 MainActivity(节选)

JAVAKOTLIN
package ...
import ...
import com.google.android.gms.ads.MobileAds;

public class MainActivity extends AppCompatActivity {
    ...
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713
        MobileAds.initialize(this, "YOUR_ADMOB_APP_ID");
    }
    ...
}

注意:如果您尚未创建 AdMob 帐号,或者未注册应用,不妨立即行动。如果您只是想在一个 Hello World 应用中体验一下 SDK,可通过以下应用 ID 初始化该 SDK:ca-app-pub-3940256099942544~3347511713。
选择一种广告格式

现已导入移动广告 SDK,您随时可以实现广告了。 AdMob提供了许多不同的广告格式,您可以从中选择最适合您应用的用户体验的格式。

横幅广告

横幅广告是在应用布局中占据一处位置的矩形图片或文字广告。用户与应用互动时,这类广告会停留在屏幕上,并且可在一段时间后自动刷新。如果您刚开始接触移动广告,建议从横幅广告着手。

植入横幅广告

插页式广告

插页式广告是全屏广告,它会覆盖整个应用界面,直到用户将其关闭。在应用执行流程的自然停顿点,例如游戏的不同关卡之间,或一项任务完成后,最适合投放这类广告。

植入插页式广告

原生广告

原生广告是一种基于组件的广告格式,可让您自由地自定义素材资源(如标题和号召性用语)在应用中的呈现方式。通过自行选择字体、颜色和其他详细信息,您可以呈现出自然而不突兀的广告展示效果,进而提供更丰富的用户体验。

目前,原生广告尚处于封闭测试阶段,仅面向部分发布商提供。

植入原生广告

激励广告

激励视频广告是一种全屏视频广告,用户可选择使用全屏模式观看,以换取应用内奖励。

植入激励广告
植入激励广告(新 API)
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see our Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

上次更新日期:一月 28, 2019

测试广告

广告格式 示例广告单元 ID
横幅广告 ca-app-pub-3940256099942544/6300978111
插页式广告 ca-app-pub-3940256099942544/1033173712
插页式视频广告 ca-app-pub-3940256099942544/8691691433
激励视频广告 ca-app-pub-3940256099942544/5224354917
原生高级广告 ca-app-pub-3940256099942544/2247696110
原生高级视频广告 ca-app-pub-3940256099942544/1044960115

Extool.java


import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.util.Log;
import android.view.ViewGroup;

import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.rewarded.RewardItem;
import com.google.android.gms.ads.rewarded.RewardedAd;
import com.google.android.gms.ads.rewarded.RewardedAdCallback;
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback;

import static com.google.android.gms.ads.AdRequest.ERROR_CODE_INTERNAL_ERROR;
import static com.google.android.gms.ads.AdRequest.ERROR_CODE_INVALID_REQUEST;
import static com.google.android.gms.ads.AdRequest.ERROR_CODE_NETWORK_ERROR;
import static com.google.android.gms.ads.AdRequest.ERROR_CODE_NO_FILL;

/**
 * 用于展示广告的封装类
 * 旨在更好的加入广告 并且不破坏原代码
 * 需要在AndroidManifest中加入以下代码
 * <manifest>
 *     <application>
 *         <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
 *         <meta-data
 *             android:name="com.google.android.gms.ads.APPLICATION_ID"
 *             android:value="YOUR_ADMOB_APP_ID"/>
 *     </application>
 * </manifest>
 *
 * 在activity启动时调用广告初始化 init方法
 *
 */
public class ExTool {

    private static final String TAG = "ExTool";
    private RewardedAd rewardedAd; //激励广告
    private InterstitialAd interstitialAd;//插页广告
    private Activity activity;

    public ExTool(runActivity activity) {
        this.activity = activity;
    }

    //初始化广告
    public void init(String id) {
        MobileAds.initialize(activity, id);
    }

    //初始化插屏广告
    public void initInterstitialAd(String id) {
        interstitialAd = new InterstitialAd(activity);
        interstitialAd.setAdUnitId(id);
    }

    //展示插屏广告
    public void loadInterstitialAd() {
        interstitialAd.loadAd(new AdRequest.Builder().build());
        interstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                // Code to be executed when an ad finishes loading.广告加载完成后要执行的代码。
            }

            @Override
            public void onAdFailedToLoad(int errorCode) {
                // Code to be executed when an ad request fails.当广告请求失败时要执行的代码。
            }

            @Override
            public void onAdOpened() {
                // Code to be executed when the ad is displayed.显示广告时要执行的代码。
            }

            @Override
            public void onAdClicked() {
                // Code to be executed when the user clicks on an ad.当用户单击广告时要执行的代码。
            }

            @Override
            public void onAdLeftApplication() {
                // Code to be executed when the user has left the app.当用户离开应用程序时要执行的代码。
            }

            @Override
            public void onAdClosed() {
                // Code to be executed when the interstitial ad is closed.当间隙广告关闭时要执行的代码。可以在这里重新loadAd广告
            }
        });
    }

    //展示插页广告
    public void showIntertitialAd() {
        if (interstitialAd.isLoaded()) {
            interstitialAd.show();
        }
    }

    //初始化激励广告
    public void initRewardedAd(String id) {
        rewardedAd = new RewardedAd(activity, id);
    }

    //加载激励广告
    public void loadRewardedAd() {
        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
//广告加载完成时 系统会执行此方法
            }

            @Override
            public void onRewardedAdFailedToLoad(int error) {
                switch (error) {
                    case ERROR_CODE_INTERNAL_ERROR:
                        Log.e(TAG, "内部出现问题 例如 收到广告服务器的无效响应");
                        break;
                    case ERROR_CODE_INVALID_REQUEST:
                        Log.e(TAG, "广告请求无效 例如 广告单元id不正确");
                        break;
                    case ERROR_CODE_NETWORK_ERROR:
                        Log.e(TAG, "网络连接问题");
                        break;
                    case ERROR_CODE_NO_FILL:
                        Log.e(TAG, "广告请求成功 但由于缺少广告资源");

                }

            }
        };
        rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
    }

    //显示激励广告
    public void showRewardeAd() {
        if (rewardedAd.isLoaded()) {
            RewardedAdCallback adCallback = new RewardedAdCallback() {
                @Override
                public void onRewardedAdOpened() {
                    //在广告开始展示铺满屏幕时
                }

                @Override
                public void onRewardedAdClosed() {
                    //用户点击关闭图标或使用返回按钮关闭
                }

                @Override
                public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
//                    在用户与广告互动获得奖励时
                }

                @Override
                public void onRewardedAdFailedToShow(int errorCode) {
                    //在广告调用失败时返回此方法 此方法有一个errorCode参数
                    switch (errorCode) {
                        case ERROR_CODE_INTERNAL_ERROR:
                            Log.e(TAG, "内部出现问题");
                            break;
                        case ERROR_CODE_AD_REUSED:
                            Log.e(TAG, "激励广告已展示 rewardeAd是一次性对象");
                            break;
                        case ERROR_CODE_NOT_READY:
                            Log.e(TAG, "广告尚未成功加载");
                            break;
                        case ERROR_CODE_APP_NOT_FOREGROUND:
                            Log.e(TAG, "应用未在前台运行");
                    }
                }
            };
            rewardedAd.show(activity, adCallback);
        }
    }

    //在指定Layout加入广告条
    public void addAdvInLayout(ViewGroup layout,String id) {
        AdView adView = new AdView(activity);
        adView.setAdSize(AdSize.BANNER); //320*50
//        adView.setAdSize(AdSize.SMART_BANNER);  //智能横幅
        adView.setAdUnitId(id);
    }

}

发表评论

邮箱地址不会被公开。 必填项已用*标注