Bạn có thể kiếm tiền từ trò chơi của mình bằng cách hiển thị quảng cáo cho người chơi. Hiện có 2 định dạng quảng cáo Audience Network được tích hợp với trò chơi tức thì: Video kèm phần thưởng và Quảng cáo chèn giữa. Phần này sẽ hướng dẫn bạn về quy trình tích hợp giải pháp Kiếm tiền từ quảng cáo với trò chơi tức thì.
Nền tảng | Chèn giữa | Chèn giữa kèm phần thưởng | Video kèm phần thưởng |
---|---|---|---|
Android | ✅ | ✅ | ✅ |
iOS | ✅ | ✅ | ✅ |
Web di động | ✅ | ✅ | ✅ |
Web trên máy tính | ✅ | ✅ | ✅ |
Lưu ý: Audience Network hiện chỉ dành cho một số khu vực nhất định. Hãy kiểm tra tính đủ điều kiện của bạn trong quy trình tích hợp Audience Network.
Hãy xem hướng dẫn 5 bước để kiếm tiền từ Trò chơi tức thì trên Audience Network để biết thêm thông tin.
Đặt cấu hình ứng dụng trên FacebookNếu đã đặt cấu hình ứng dụng bằng Trình quản lý kiếm tiền và tạo Vị trí quảng cáo, bạn có thể xem cách hoạt động của mã bên dưới bằng cách tải xuống bản demo của chúng tôi:
Tải xuống bản demo quảng cáo (.zip)Quảng cáo chèn giữa là quảng cáo toàn màn hình sẽ hiển thị vào thời điểm chuyển tiếp tự nhiên trong ứng dụng. Quảng cáo chèn giữa hiện có ở định dạng tự động phát hoặc nhấp để phát. Quảng cáo tự động phát sẽ bắt đầu phát ngay khi video chèn giữa tải; theo mặc định, có thể bỏ qua các video này sau 3 giây. Thời lượng quảng cáo tối đa là 2 phút.
Đoạn mã dưới đây minh họa ví dụ về cách hiển thị Quảng cáo chèn giữa.
Để mã này hoạt động, trước tiên, bạn phải tạo một vị trí quảng cáo có định dạng hiển thị là Chèn giữa. Bạn nên dùng vị trí quảng cáo khác cho từng đơn vị quảng cáo trong ứng dụng của mình.
var preloadedInterstitial = null; FBInstant.getInterstitialAdAsync( '123123123123_123123123123' // Your Ad Placement Id ).then(function(interstitial) { // Load the Ad asynchronously preloadedInterstitial = interstitial; return preloadedInterstitial.loadAsync(); }).then(function() { console.log('Interstitial preloaded'); }).catch(function(err){ console.error('Interstitial failed to preload: ' + err.message); });
preloadedInterstitial.showAsync() .then(function() { // Perform post-ad success operation console.log('Interstitial ad finished successfully'); }) .catch(function(e) { console.error(e.message); });
Chèn giữa kèm phần thưởng là quảng cáo toàn màn hình tặng phần thưởng cho người dùng để đổi lấy lượt xem quảng cáo. Những quảng cáo này không yêu cầu người dùng chọn xem.
Đoạn mã dưới đây minh họa ví dụ về cách hiển thị quảng cáo Chèn giữa kèm phần thưởng.
Để mã này hoạt động, trước tiên, bạn phải tạo một vị trí quảng cáo có định dạng hiển thị là Chèn giữa kèm phần thưởng. Quảng cáo chèn giữa kèm phần thưởng sử dụng được cho ứng dụng trên Facebook Gaming, Web di động và Web trên máy tính. Bạn nên dùng vị trí quảng cáo khác cho từng đơn vị quảng cáo trong ứng dụng của mình.
var preloadedRewardedInterstitial = null; FBInstant.getRewardedInterstitialAsync( '123123123123_123123123123' // Your Ad Placement Id ).then(function(rewarded) { // Load the Ad asynchronously preloadedRewardedInterstitial = rewarded; return preloadedRewardedInterstitial.loadAsync(); }).then(function() { console.log('Rewarded interstitial preloaded'); }).catch(function(err){ console.error('Rewarded interstitial failed to preload: ' + err.message); });
preloadedRewardedInterstitial.showAsync() .then(function() { // Perform post-ad success operation console.log('Rewarded interstitial watched successfully'); }) .catch(function(e) { console.error(e.message); });
Quảng cáo video kèm phần thưởng là trải nghiệm toàn màn hình, trong đó người dùng chọn xem quảng cáo video để đổi lấy thứ gì đó có giá trị, chẳng hạn như tiền ảo, vật phẩm trong ứng dụng hoặc nội dung độc quyền.
Đoạn mã dưới đây minh họa ví dụ về cách hiển thị Quảng cáo video kèm phần thưởng.
Để mã này hoạt động, trước tiên, bạn phải tạo một vị trí quảng cáo có định dạng hiển thị là Video kèm phần thưởng. Bạn nên dùng vị trí quảng cáo khác cho từng đơn vị quảng cáo trong ứng dụng của mình.
var preloadedRewardedVideo = null; FBInstant.getRewardedVideoAsync( '456456456456_456456456456' // Your Ad Placement Id ).then(function(rewarded) { // Load the Ad asynchronously preloadedRewardedVideo = rewarded; return preloadedRewardedVideo.loadAsync(); }).then(function() { console.log('Rewarded video preloaded'); }).catch(function(err){ console.error('Rewarded video failed to preload: ' + err.message); });
preloadedRewardedVideo.showAsync() .then(function() { // Perform post-ad success operation console.log('Rewarded video watched successfully'); }) .catch(function(e) { console.error(e.message); });
Việc tải trước 3 phiên bản quảng cáo cùng loại mà không hiển thị quảng cáo sẽ gây ra lỗi khi bạn cố tạo một quảng cáo mới. Sau khi tải thành công, quảng cáo sẽ có hiệu lực trong 60 phút.
Dưới đây là một mã mẫu để giúp bạn hiểu cách thức hoạt động, giả sử mọi thứ đều được đặt cấu hình đúng cách (ID vị trí quảng cáo hợp lệ, v.v.) và không có vấn đề về mạng:
var preloadedInterstitial1 = null; var preloadedInterstitial2 = null; var preloadedInterstitial3 = null; var preloadedRewardedVideo = null; // PRELOAD PHASE FBInstant.getInterstitialAdAsync( '123123123123_123123123123' ).then(function(interstitial) { // This should get called, meaning you now have 1 ad instance. preloadedInterstitial1 = interstitial; return preloadedInterstitial1.loadAsync(); }).then(function() { // This should get called unless we do not have ads to serve. console.log('Interstitial 1 preloaded') }).catch(function(err){ // This would be called only if we do not have ads to serve. // The error would then be ADS_NO_FILL. // You can try to reload the ad after some time (ideally over 30 seconds). // If you get ADS_NO_FILL 3 times in a row, the instance will be disabled. console.error('Interstitial 1 failed to preload: ' + err.message); // You can try to reload after 30 seconds (2nd attempt) setTimeout(function () { handleAdsNoFill(preloadedInterstitial1, 2); }, 30 * 1000); }); // Here is how the function to handle ADS_NO_FILL would look like function handleAdsNoFill (adInstance, attemptNumber) { if (attemptNumber > 3) { // You can assume we will not have to serve in the current session, no need to try // to load another ad. return; } else { adInstance.loadAsync().then(function() { // This should get called if we finally have ads to serve. console.log('Interstitial preloaded') }).catch(function(err){ console.error('Interstitial failed to preload: ' + err.message); // You can try to reload after 30 seconds setTimeout(function () { handleAdsNoFill(adInstance, attemptNumber+1); }, 30 * 1000); }); } } // As we covered ADS_NO_FILL, from now on let's assume we have ads to serve. FBInstant.getInterstitialAdAsync( // You can re-use the same Ad Placement Id as long as it is of the valid type: // interstitial or rewarded video (here, it has to be interstitial) '123123123123_123123123123' ).then(function(interstitial) { // This should get called, meaning you now have 2 ad instances. preloadedInterstitial2 = interstitial; return preloadedInterstitial2.loadAsync(); }).then(function() { console.log('Interstitial 2 preloaded') }); FBInstant.getRewardedVideoAsync( '456456456456_456456456456' ).then(function(rewarded) { // This should get called, meaning you now have 3 ad instances. preloadedRewardedVideo = rewarded; return preloadedRewardedVideo.loadAsync(); }).then(function() { console.log('Rewarded video preloaded') }); FBInstant.getInterstitialAdAsync( '123123123123_123123123123' ).catch(function(err){ // This should be called now because you already have 3 ad instances. // The error would then be ADS_TOO_MANY_INSTANCES. console.error('Interstitial 3 failed to preload: ' + err.message); }); // SHOWING ADS (at a timing that makes sense in the workflow of your game) preloadedInterstitial1.showAsync() .then(function() { // This should get called, meaning you now have 2 ad instances. console.log('Interstitial ad 1 finished successfully'); }); // A bit later, assuming you did not preload a new instance yet. preloadedInterstitial2.showAsync() .then(function() { // This should get called, meaning you now have 1 ad instance. console.log('Interstitial ad finished successfully'); }); // A bit later, assuming you did not preload a new instance yet. preloadedRewardedVideo.showAsync() .then(function() { // This should get called, meaning you now have no ad instance. console.log('Rewarded video watched successfully'); });
Thông tin dưới đây dành riêng cho Trò chơi tức thì. Vui lòng tham khảo cả phần Thông tin chi tiết về Audience Network của chúng tôi.
Định thời gian quảng cáo thích hợp. Đảm bảo quảng cáo trong trò chơi của bạn không làm gián đoạn trải nghiệm của người chơi.
Tải trước quảng cáo. Đừng chờ đến phút cuối mới yêu cầu, hãy tải trước và hiển thị quảng cáo cùng lúc. Đảm bảo bạn đã tải trước một số phiên bản quảng cáo để người chơi không phải đợi quá lâu khi yêu cầu xem quảng cáo.
Kiểm tra xem có hỗ trợ hay không. Trong một số trường hợp, phiên của người chơi sẽ không hỗ trợ quảng cáo (ví dụ: nếu họ đang chơi trên trình duyệt dành cho máy tính). Bạn nên kiểm tra xem quảng cáo có được hỗ trợ FBInstant.getSupportedAPIs()
hay không trước khi cố yêu cầu quảng cáo.
Triển khai xử lý khéo léo thông báo "Không thực hiện". Một số trường hợp có thể khiến không thực hiện được quảng cáo. Trong trường hợp đó, cam kết sẽ từ chối kèm theo thông báo lỗi ADS_NO_FILL
. Hãy đảm bảo game của bạn xử lý vấn đề này một cách linh hoạt, hiển thị thông báo thân thiện và chờ 30 giây rồi mới yêu cầu một quảng cáo khác cùng loại.
Thử nghiệm quảng cáo trước khi gửi. Với vai trò nhà phát triển ứng dụng, bạn có thể yêu cầu quảng cáo trên thiết bị di động và thấy rằng tiện ích tích hợp của bạn đang hoạt động, ngay cả trước khi bạn gửi ứng dụng đi xét duyệt trên Audience Network.
Theo dõi lượt hiển thị quảng cáo. Bạn có thể sử dụng sự kiện tùy chỉnh để theo dõi lượt hiển thị quảng cáo khi showAsync
phân giải.
Không duy trì quá nhiều Phiên bản quảng cáo. Cả hai phương thức getRewardedVideoAsync
hoặc getInterstitialAdAsync
đều trả về AdInstance
có thể được tải trước. Việc tải trước 3 Phiên bản quảng cáo cùng loại trở lên mà không hiển thị quảng cáo sẽ khiến bạn liên tiếp không tạo được Phiên bản quảng cáo mới. Tức là các lệnh gọi đến getRewardedVideoAsync
và getInterstitialAdAsync
sẽ bị lỗi kèm theo mã lỗi ADS_TOO_MANY_INSTANCES
cho đến khi showAsync
được gọi hoặc cho đến khi người chơi khởi động lại Messenger.