在本教程中,您将学习如何集成AdMob,以便从自己编写的出色Android应用中获利-来吧,谁不想这么做? AdMob是市场上最大的移动广告平台之一,由Google拥有。
有几种不同的方法可以在Android中通过应用获利:付费下载,付费订阅,应用内购买以及通过展示广告。 您可以将它们组合在一起,但是建议您选择一个模型。 在本教程中,您将学习如何通过展示广告来通过应用获利。
您将在本教程中创建的广告类型包括横幅广告,插页式广告和原生特快广告。 我将解释它们中的每一个,并向您展示如何在应用程序中实现它们。 但是在此之前,让我们首先了解如何集成Mobile Ads SDK并对其进行初始化。
创建一个Android Studio项目
在Android Studio中,创建一个名为MainActivity
的新项目。
包括移动广告SDK
要开始将AdMob与您的应用集成,您需要首先将Mobile Ads SDK包含到您的应用模块build.gradle
文件中:
compile 'com.google.android.gms:play-services-ads:11.0.2'
如果您要将Firebase集成到您的应用中,则应使用Firebase的一部分SDK:
compile 'com.google.firebase:firebase-ads:11.0.2'
添加SDK之后,请确保同步项目,以便将库从Internet提取到您的应用程序中。
初始化移动广告
您需要先初始化Mobile Ads SDK,然后才能在Android应用上加载广告,因此请尽早进行。 我们创建一个扩展Application
类的类,然后在该类的onCreate()
方法中初始化MobileAds
SDK,因为在启动应用程序时,该方法仅被调用一次。
import com.google.android.gms.ads.MobileAds;
import android.app.Application;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
MobileAds.initialize(this, "ca-app-pub-3940256099942544/6300978111");
}
}
提供给MobileAds
类的静态方法initialize()
的第二个参数应该是注册AdMob时获得的AdMob应用ID。 在这种情况下,我们使用Google提供的公共应用程序ID进行演示。
修改清单文件
我们需要将创建的应用程序类添加到AndroidManifest.xml文件中的应用程序标记名称属性中。
<application
android:name=".App">
</application>
在此文件中,还请确保包含INTERNET
权限,以便Google移动广告可以投放。
<!-- Include required permissions for Google Mobile Ads to run. -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
在下面的代码段中,我们将 AdActivity
添加到了AndroidManifest中。 XML文件 文件中的文件。
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
此活动由SDK提供。 在横幅广告中,当用户点击广告时,将其启动即可查看,这对于横幅广告非常有用;对于插页式广告,当用户点击广告时,它用于显示广告。
1.横幅广告
横幅广告覆盖了当前可见屏幕的一部分。 换句话说,您应用程式和广告中的任何内容都会一起显示在萤幕上。 这可以改善用户体验,因为与插页式广告不同,您的用户可以在广告展示期间继续使用您的应用(请稍等片刻,我们稍后会介绍)。 请注意,横幅广告可以是文字或图片。
让我们看看如何实施横幅广告。
在布局中添加横幅广告
AdView
是一个自定义ViewGroup
,它将包含横幅广告,因此我们需要编辑activity_banner_ad。 xml布局文件以包含此视图。
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.chikeandroid.tutsplus_admob.MainActivity">
<TextView android:text="Hello World"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>
</RelativeLayout>
我们使用属性ads:adSize
并将其设置为BANNER
来定义AdView
大小。 其他可用的替代方法是LARGE_BANNER
, FULL_BANNER
, SMART_BANNER
等。
ads:adUnitId
AdView
属性设置为Google提供的示例广告单元。 如果您想从广告中实际赚钱,则必须使用与您的帐户相关联的广告单元进行更新!
广告单元ID标识广告展示位置,您可以在AdMob管理控制台中找到它。 该ID可以告诉AdMob在您的应用上展示的广告类型以及显示格式(图片,文字或视频)。
载入广告
为了最终显示广告,我们需要发出请求,然后将其显示在上面在BannerAdActivity
类中创建的AdView
中。
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class BannerAdActivity extends AppCompatActivity {
private AdView mAdView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
mAdView.loadAd(adRequest);
}
}
我们通过使用构建器创建AdRequest实例来发出广告请求。 然后,我们使用方法addTestDevice()
,传入设备ID作为参数,以接收对该设备的测试广告,在我们的示例中为模拟器。 然后,我们最终调用了AdView
方法loadAd()
,该方法接受此AdRequest
实例,然后将广告加载到后台线程中(以免阻塞UI /主线程)。
测试广告
此时,我们可以运行我们的项目并查看结果。
从上方的屏幕截图中,我们可以看到测试横幅广告显示在视图下方。 现在,通过点击与广告互动。
使用AdListener监听广告事件
现在,让我们探讨一下我们可以在广告中观察到的事件或回调。 这些是可用的事件:
-
onAdLoaded()
:检索广告时将触发此方法。 -
onAdOpened()
:打开广告时调用此方法。 -
onAdClosed()
:关闭广告时会触发此方法。 -
onAdLeftApplication()
:当用户离开应用程序时,将调用此方法。 -
onAdFailedToLoad(int errorCode)
:在广告请求失败时触发。 该代码可以是ERROR_CODE_NETWORK_ERROR
,ERROR_CODE_INVALID_REQUEST
,ERROR_CODE_NO_FILL
或ERROR_CODE_INTERNAL_ERROR
。
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
mAdView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
Toast.makeText(MainActivity.this, "onAdLoaded()", Toast.LENGTH_SHORT).show();
}
@Override
public void onAdOpened() {
super.onAdOpened();
Toast.makeText(MainActivity.this, "onAdOpened()", Toast.LENGTH_SHORT).show();
}
@Override
public void onAdClosed() {
super.onAdClosed();
Toast.makeText(MainActivity.this, "onAdClosed()", Toast.LENGTH_SHORT).show();
}
@Override
public void onAdFailedToLoad(int i) {
super.onAdFailedToLoad(i);
Toast.makeText(MainActivity.this, "onAdFailedToLoad()", Toast.LENGTH_SHORT).show();
}
@Override
public void onAdLeftApplication() {
super.onAdLeftApplication();
Toast.makeText(MainActivity.this, "onAdLeftApplication()", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onPause() {
// This method should be called in the parent Activity's onPause() method.
if (mAdView != null) {
mAdView.pause();
}
super.onPause();
}
@Override
public void onResume() {
super.onResume();
// This method should be called in the parent Activity's onResume() method.
if (mAdView != null) {
mAdView.resume();
}
}
@Override
public void onDestroy() {
// This method should be called in the parent Activity's onDestroy() method.
if (mAdView != null) {
mAdView.destroy();
}
super.onDestroy();
}
}
添加侦听器后,再次运行项目并与广告互动。 通过观看我们创建的敬酒来观察正在调用的事件。
2.非页内广告
我们已经看到了展示横幅广告有多么容易。 现在,让我们看看如何制作插页式广告。
插页式广告是一种覆盖您应用程序整个屏幕的广告,没有空间让您的应用程序其他视图显示(很快就会看到)。 由于这会占用整个屏幕,并且如果网络速度较慢也需要花费一些时间来加载,因此您需要注意不要惹恼用户。 因此,理想情况下,这些插页式广告应该在您的应用中自然休息时显示,例如在游戏中的关卡之间显示,而不是在用户处于其他任务中间时显示。
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
public class InterstitialAdActivity extends AppCompatActivity {
private InterstitialAd mInterstitialAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadInterstitialAd();
}
private void loadInterstitialAd() {
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
Toast.makeText(MainActivity.this, "onAdLoaded()", Toast.LENGTH_SHORT).show();
if(mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
@Override
public void onAdFailedToLoad(int i) {
super.onAdFailedToLoad(i);
Toast.makeText(MainActivity.this, "onAdFailedToLoad()", Toast.LENGTH_SHORT).show();
}
});
AdRequest adRequest = new AdRequest.Builder().build();
mInterstitialAd.loadAd(adRequest);
}
}
在上面的代码中,我们声明和初始化的类的实例InterstitialAd
在InterstitialAdActivity
类。 我们通过将Google提供的参数作为唯一参数传递给setAdUnitId()
方法setAdUnitId()
设置添加单位ID。
就像我们对横幅广告所做的一样,我们希望监听广告中的事件,因此我们设置了一个监听器来触发onAdLoaded()
和onAdFailedToLoad(int i)
的重载方法。 我们通过使用其构建器创建AdRequest
类的实例,然后调用方法loadAd()
并将此请求作为参数传递给该方法来发出广告请求。 我们使用isLoaded()
方法确定何时加载广告,然后调用show()
方法最终显示广告。
您也可以像添加横幅广告一样添加AdListener
。
测试广告
现在,我们可以运行该应用程序并查看结果。
在上面的屏幕截图中,您可以看到我们的测试插页式广告正在展示。
3.原生Ads Express
Native Ads Express使您(发布商)能够自定义广告的外观,以使其自然地适合您的应用。 通过定义CSS模板来完成此自定义操作,在该模板中,您可以从AdMob帐户中定义自己的字体,颜色,大小等。 但是,您无法更改图像,说明和标题,这些是由广告商设置的。
定制的广告可以在NativeExpressAdView
显示在您的应用中。
在布局中包含NativeExpressAdView
下面,我们在布局文件中包含NativeExpressAdView
,它是一个ViewGroup
。 我们还定义了android:layout_height
和android:layout_width
是wrap_content
。 ads:adSize
将为"320x300"
,我们将使用Google提供的NativeExpress广告单元ID(仅用于演示)。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.chikeandroid.tutsplus_admob.BannerAdActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Native Express Ad!" />
<com.google.android.gms.ads.NativeExpressAdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="320x300"
ads:adUnitId="ca-app-pub-3940256099942544/2177258514">
</com.google.android.gms.ads.NativeExpressAdView>
</RelativeLayout>
载入广告
接下来,我们构建AdRequest
,然后开始加载要显示的广告。 我们还将添加代码以响应Activity生命周期回调。 您也可以根据需要添加AdListener
,就像横幅广告一样。
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.NativeExpressAdView;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class NativeExpressAdActivity extends AppCompatActivity {
NativeExpressAdView mNativeExpressAdView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_native_ad);
mNativeExpressAdView = (NativeExpressAdView) findViewById(R.id.adView);
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
adRequestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);
mNativeExpressAdView.loadAd(adRequestBuilder.build());
}
@Override
public void onResume() {
super.onResume();
mNativeExpressAdView.resume();
}
@Override
public void onPause() {
mNativeExpressAdView.pause();
super.onPause();
}
@Override
public void onDestroy() {
mNativeExpressAdView.destroy();
super.onDestroy();
}
}
测试广告
而已! 现在,您可以运行该应用程序,并查看运行中的Native Express广告。
创建自己的AdMob帐户
现在我们已经了解了不同类型的广告,您可以继续将它们集成到您的应用程序中。 要开始展示真实的广告并赚钱,您需要一个AdMob帐户-具有与广告客户的真实广告相关联的真实广告单元ID。 只需访问AdMob网站即可注册!
结论
在本教程中,您了解了AdMob以及如何在Android上集成不同的AdMob广告格式,例如横幅广告,插页式广告和原生快速广告。
翻译自: https://code.tutsplus.com/tutorials/how-to-monetize-your-android-apps-with-admob--cms-29255