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.
Đảm bảo bạn đã hoàn tất hướng dẫn Bắt đầu và Bắt đầu dành cho Android với Audience Network trước khi tiếp tục.
Phương thức này được thêm vào Audience Network Android SDK phiên bản 5.1.
Khởi tạo công khai Audience Network Android SDK là yêu cầu bắt buộc đối với phiên bản 5.3.0
trở lên. Vui lòng tham khảo tài liệu này về cách khởi tạo Audience Network Android SDK.
Trước khi tạo đối tượng quảng cáo và tải quảng cáo, bạn cần khởi tạo Audience Network SDK. Bạn nên thực hiện việc này khi khởi chạy ứng dụng.
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()); ... }
Trong trường hợp không hiển thị quảng cáo ngay sau khi tải quảng cáo, nhà quảng cáo sẽ chịu trách nhiệm kiểm tra xem quảng cáo có bị vô hiệu hóa hay không. Sau khi tải thành công, quảng cáo sẽ có hiệu lực trong 60 phút. Bạn sẽ không được thanh toán nếu hiển thị một quảng cáo không hợp lệ. Bạn nên gọi isAdInvalidated()
để xác thực quảng cáo đó.
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 }
Nếu đang sử dụng trình mô phỏng Google Android mặc định, thì bạn cần thêm dòng mã sau trước khi tải quảng cáo thử nghiệm:AdSettings.addTestDevice("HASHED ID");
.
Sử dụng ID đã mã hóa được in vào logcat khi bạn yêu cầu tải quảng cáo trên thiết bị lần đầu.
Các thiết bị Genymotion và thiết bị vật lý không cần bước này. Nếu bạn muốn thử nghiệm với quảng cáo thực, vui lòng tham khảo Hướng dẫn thử nghiệm của chúng tôi.
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(); }
Quảng cáo video trong Audience Network yêu cầu phải bật hiển thị được tăng tốc phần cứng, nếu không, bạn có thể gặp phải màn hình đen trong khi xem video. Điều này áp dụng với
Tăng tốc phần cứng sẽ được bật theo mặc định nếu cấp API mục tiêu của bạn >=14 (Ice Cream Sandwich, Android 4.0.1), nhưng bạn cũng có thể bật tính năng này ở cấp ứng dụng hoặc cấp hoạt động.
Trong tệp kê khai Android của bạn, hãy thêm thuộc tính sau vào thẻ <application>
để bật tính năng tăng tốc phần cứng cho toàn bộ ứng dụng:
<application android:hardwareAccelerated="true" ...>
Nếu bạn chỉ muốn bật tính năng này cho các hoạt động cụ thể trong ứng dụng, thì trong tệp kê khai Android của mình, bạn có thể thêm tính năng sau vào thẻ <activity>
. Trong ví dụ sau, chúng tôi sẽ bật tính năng tăng tốc phần cứng cho AudienceNetworkActivity
dùng để hiển thị quảng cáo chèn giữa và video kèm phần thưởng:
<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.
Khám phá mã mẫu của Audience Network dành cho Android trên Github. Nhập dự án vào IDE và chạy dự án trên thiết bị hoặc trình mô phỏng.
Khi bạn đã sẵn sàng bắt đầu vận hành ứng dụng và kiếm tiền, hãy gửi ứng dụng để xét duyệt sau khi đảm bảo rằng ứng dụng tuân thủ chính sách về Audience Network và tiêu chuẩn cộng đồng của Facebook.