The Audience Network allows you to monetize your Android apps with Facebook ads. Rewarded interstitial ads are a full screen experience which starts when users reach a natural break in a game, and which offers rewards in exchange for a user viewing the full ad. Users can opt-out at any time. The ad experience is 15-30 seconds and contains an end card with a call to action. Upon completion of the full video, you will receive a callback to grant the suggested reward to the user.
请确保先阅读 Audience Network 入门指南和 Android 入门指南,然后再继续操作。
Android Audience Network SDK 5.1 版中已添加此方法。
5.3.0
及以上版本的 Audience Network SDK 需要进行显式初始化。有关如何初始化 Audience Network Android SDK 的信息,请参阅此文档。
在创建广告对象和加载广告前,您应初始化 Audience Network SDK。建议您在启动应用时执行这项操作。
public class YourApplication extends Application { ... @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } ... }
Add the following code at the top of your Activity in order to import the Facebook Ads SDK:
import com.facebook.ads.*;
Then, initialize the rewarded video object, set the listener and load the video creative. The rewarded ad requires a RewardedInterstitialAdListener
interface which implements the following methods in the sample code to handle various events. For example in your activity:
private final String TAG = YourActivity.class.getSimpleName(); private RewardedInterstitialAd rewardedInterstitialAd; @Override public void onCreate(Bundle savedInstanceState) { ... // Instantiate a RewardedInterstitialAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedInterstitialAd = new RewardedInterstitialAd(this, "YOUR_PLACEMENT_ID"); RewardedInterstitialAdListener rewardedInterstitialAdListener = new RewardedInterstitialAdListener() { @Override public void onError(Ad ad, AdError error) { // Rewarded interstitial ad failed to load Log.e(TAG, "Rewarded interstitial ad failed to load: " + error.getErrorMessage()); } @Override public void onAdLoaded(Ad ad) { // Rewarded interstitial ad is loaded and ready to be displayed Log.d(TAG, "Rewarded interstitial ad is loaded and ready to be displayed!"); } @Override public void onAdClicked(Ad ad) { // Rewarded interstitial ad clicked Log.d(TAG, "Rewarded interstitial ad clicked!"); } @Override public void onLoggingImpression(Ad ad) { // Rewarded Interstitial ad impression - the event will fire when the // interstitial starts playing Log.d(TAG, "Rewarded interstitial ad impression logged!"); } @Override public void onRewardedInterstitialCompleted() { // Rewarded Interstitial View Complete - the interstitial has been played to the end. // You can use this event to initialize your reward Log.d(TAG, "Rewarded interstitial completed!"); // Call method to give reward // giveReward(); } @Override public void onRewardedInterstitialClosed() { // The Rewarded Interstitial ad was closed - this can occur during the interstitial // by closing the app, or closing the end card. Log.d(TAG, "Rewarded interstitial ad closed!"); } }; rewardedInterstitialAd.loadAd( rewardedInterstitialAd.buildLoadAdConfig() .withAdListener(rewardedInterstitialAdListener) .build()); ... } }
private RewardedInterstitialAd rewardedInterstitialAd; @Override public void onCreate(Bundle savedInstanceState) { ... // Instantiate a RewardedInterstitialAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedInterstitialAd = new RewardedInterstitialAd(this, "YOUR_PLACEMENT_ID"); RewardedInterstitialAdListener rewardedInterstitialAdListener = new RewardedInterstitialAdListener() { ... @Override public void onAdLoaded(Ad ad) { // Rewarded interstitial ad is loaded and ready to be displayed Log.d(TAG, "Rewarded interstitial ad is loaded and ready to be displayed!"); rewardedInterstitialAd.show( rewardedInterstitialAd.buildShowAdConfig() .withAppOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) .build()); } ... }; rewardedInterstitialAd.loadAd( rewardedInterstitialAd.buildLoadAdConfig() .withAdListener(rewardedInterstitialAdListener) .build()); ... }
如果广告在加载后没有立即显示,开发者需负责检查广告是否已经无效。成功加载后,广告的有效期为 60 分钟。如果您展示无效广告,则将无法收款。您应调用 isAdInvalidated()
来验证广告。
Follow the code below, but do not copy the code into your project since this is for example purposes only:
private RewardedInterstitialAd rewardedInterstitialAd; @Override public void onCreate(Bundle savedInstanceState) { ... // Instantiate a RewardedInterstitialAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedInterstitialAd = new RewardedInterstitialAd(this, "YOUR_PLACEMENT_ID"); RewardedInterstitialAdListener rewardedInterstitialAdListener = new RewardedInterstitialAdListener() { ... }; rewardedInterstitialAd.loadAd( rewardedInterstitialAd.buildLoadAdConfig() .withAdListener(rewardedInterstitialAdListener) .build()); // Here is just an example for displaying the ad with delay // Please call this method at appropriate timing in your project showAdWithDelay(); } private void showAdWithDelay() { /* * Here is an example for displaying the ad with delay; * Please do not copy the Handler into your project */ Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { // Check if rewardedInterstitialAd has been loaded successfully if (rewardedInterstitialAd == null || !rewardedInterstitialAd.isAdLoaded()) { return; } // Check if ad is already expired or invalidated, and do not show ad if that is the // case. You will not get paid to show an invalidated ad. if (rewardedInterstitialAd.isAdInvalidated()) { return; } rewardedInterstitialAd.show( rewardedInterstitialAd.buildShowAdConfig() .withAppOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) .build() ); } }, 1000 * 60 * 15); // Show the ad after 15 minutes }
如果您正在使用默认的 Google Android 模拟器,则需要在加载测试广告前添加以下代码行:AdSettings.addTestDevice("HASHED ID");
。
首次请求在设备上加载广告时,需要使用输出到 Logcat 中的散列编号。
Genymotion 和实体设备不需要执行此步骤。如果想要使用真实广告完成测试,请参阅测试指南。
Finally, clean up the object with its destroy
method in your activity's onDestroy
method. Note that you should also use the destroy
method to clean up old ad objects before assigning it to a new instance to avoid memory leak.
@Override protected void onDestroy() { if (rewardedInterstitialAd != null) { rewardedInterstitialAd.destroy(); rewardedInterstitialAd = null; } super.onDestroy(); }
Audience Network 视频广告要求启用硬件加速渲染,否则您可能会在观看视频时遇到黑屏。此要求适用于
如果您使用的 API 的级别大于等于 14(Ice Cream Sandwich,Android 4.0.1),系统将默认启用硬件加速,但您也可以在应用层级或活动层级显式启用这一功能。
在 Android 清单文件中,向 <application>
标签添加下列属性,为整个应用程序启用硬件加速功能:
<application android:hardwareAccelerated="true" ...>
如果您只想为应用程序中的特定活动启用此功能,您可以向 Android 清单文件中的 <activity>
标签添加下列功能。以下示例将为用于显示插屏广告和奖励式视频广告的 AudienceNetworkActivity
启用硬件加速功能:
<activity android:name="com.facebook.ads.AudienceNetworkActivity" android:hardwareAccelerated="true" .../>
To make sure your app is notified whether the reward was validated or not, implement the S2SRewardedInterstitialAdListener
interface.
This includes all of the events noted above in the RewardedInterstitialAdListener
interface, as well as two additional events.
After initializing the rewarded video object, you will need to pass in a User ID and Reward amount into the rewarded ad data before loading an ad. Both User ID and Reward amount are strings. For example:
public void loadRewardedInterstitial() { // Instantiate a RewardedInterstitialAd object. rewardedInterstitialAd = new RewardedInterstitialAd(this, "YOUR_PLACEMENT_ID"); // Implement S2SRewardedInterstitialAdListener instead of RewardedInterstitialAdListener RewardedInterstitialAdListener rewardedInterstitialAdListener = new S2SRewardedInterstitialAdListener() { @Override public void onRewardServerFailed() { // Rewarded interstitial ad reward not validated or no response from server Log.d(TAG, "Rewarded interstitial ad reward validation failed"); } @Override public void onRewardServerSuccess() { // Rewarded interstitial ad reward validated server side Log.d(TAG, "Rewarded interstitial ad reward validated!"); } // Other methods from RewardedInterstitialAdListener ... }; // Instantiate RewardData object and include in load config RewardData rewardData = new RewardData("YOUR_USER_ID", "YOUR_REWARD"); rewardedInterstitialAd.loadAd( rewardedInterstitialAd.buildLoadAdConfig() .withRewardData(rewardData) .withAdListener(rewardedInterstitialAdListener) .build()); }
Please note - the server validation callbacks might occur after the end card has been dismissed by a user. Do not deallocate the rewarded interstitial object until after one of these callbacks.
前往 Github 查看我们的 Audience Network Android 代码示例。将项目导入您的 IDE,然后在设备或模拟器上运行。
准备好让您的应用加入 Audience Network 并开始盈利后,请先确保应用符合 Audience Network 政策和 Facebook 社区守则,然后提交应用供审核。