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 Android 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에 인쇄되어 있는 해시 처리된 ID를 사용하세요.
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에서 Facebook의 Audience Network Android 코드 샘플을 확인하세요. IDE에 프로젝트를 가져온 다음 기기나 에뮬레이터에서 실행합니다.
앱에 광고를 전송하여 수익을 창출할 준비가 완료되었다면, 앱이 Audience Network 정책 및 Facebook 커뮤니티 규정을 준수하는지 확인한 후 검수를 위해 제출하세요.