رویدادهای سفارشی تبلیغات پاداش
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
پیش نیازها
راه اندازی رویدادهای سفارشی را کامل کنید.
درخواست آگهی با پاداش
هنگامی که مورد خط رویداد سفارشی در زنجیره واسطه آبشار به دست میآید، متد loadRewarded:adConfiguration:completionHandler: روی نام کلاسی که هنگام ایجاد یک رویداد سفارشی ارائه کردهاید فراخوانی میشود. در این مورد، آن متد در SampleCustomEvent
است، که سپس متد loadRewarded:adConfiguration:completionHandler:
را در SampleCustomEventRewarded
فراخوانی میکند.
برای درخواست تبلیغ پاداش، کلاسی را ایجاد یا تغییر دهید که GADMediationAdapter
و loadRewarded:adConfiguration:completionHandler:
اجرا می کند. اگر کلاسی که GADMediationAdapter
گسترش میدهد از قبل وجود داشته باشد، loadRewarded:adConfiguration:completionHandler:
را در آنجا پیادهسازی کنید. علاوه بر این، یک کلاس جدید برای پیاده سازی GADMediationRewardedAd
ایجاد کنید.
در مثال رویداد سفارشی ما، SampleCustomEvent
رابط GADMediationAdapter
را پیادهسازی میکند و سپس به SampleCustomEventRewarded
واگذار میکند.
سویفت
import GoogleMobileAds
class SampleCustomEvent: NSObject, MediationAdapter {
fileprivate var rewardedAd: SampleCustomEventRewarded?
...
func loadRewarded(
for adConfiguration: MediationRewardedAdConfiguration,
completionHandler: @escaping GADMediationRewardedLoadCompletionHandler
) {
self.rewardedAd = SampleCustomEventRewarded()
self.rewardedAd?.loadRewarded(
for: adConfiguration, completionHandler: completionHandler)
}
}
هدف-C
#import "SampleCustomEvent.h"
@implementation SampleCustomEvent
...
SampleCustomEventRewarded *sampleRewarded;
- (void)loadRewardedForAdConfiguration:
(GADMediationRewardedAdConfiguration *)adConfiguration
completionHandler:
(GADMediationRewardedLoadCompletionHandler)
completionHandler {
sampleRewarded = [[SampleCustomEventRewarded alloc] init];
[sampleRewarded loadRewardedForAdConfiguration:adConfiguration
completionHandler:completionHandler];
}
SampleCustomEventRewarded
مسئول وظایف زیر است:
در حال بارگیری آگهی با پاداش
پیاده سازی پروتکل GADMediationRewardedAd
.
دریافت و گزارش تماسهای رویداد تبلیغاتی به Google Mobile Ads SDK.
پارامتر اختیاری تعریف شده در رابط کاربری AdMob در پیکربندی آگهی گنجانده شده است. این پارامتر از طریق adConfiguration.credentials.settings[@"parameter"]
قابل دسترسی است. این پارامتر معمولاً یک شناسه واحد تبلیغاتی است که یک SDK شبکه تبلیغاتی هنگام نمونهبرداری از یک شی تبلیغاتی به آن نیاز دارد.
سویفت
class SampleCustomEventRewarded: NSObject, MediationRewardedAd {
/// The Sample Ad Network rewarded ad.
var nativeAd: SampleRewarded?
/// The ad event delegate to forward ad rendering events to Google Mobile Ads SDK.
var delegate: MediationRewardedAdEventDelegate?
/// Completion handler called after ad load.
var completionHandler: GADMediationRewardedLoadCompletionHandler?
func loadRewarded(
for adConfiguration: MediationRewardedAdConfiguration,
completionHandler: @escaping GADMediationRewardedLoadCompletionHandler
) {
rewarded = SampleRewarded.init(
adUnitID: adConfiguration.credentials.settings["parameter"] as? String)
rewarded?.delegate = self
let adRequest = SampleAdRequest()
adRequest.testMode = adConfiguration.isTestRequest
self.completionHandler = completionHandler
rewarded?.fetchAd(adRequest)
}
}
هدف-C
#import "SampleCustomEventRewarded.h"
@interface SampleCustomEventRewarded () <SampleRewardedAdDelegate,
GADMediationRewardedAd> {
/// The sample rewarded ad.
SampleRewarded *_rewardedAd;
/// The completion handler to call when the ad loading succeeds or fails.
GADMediationRewardedLoadCompletionHandler _loadCompletionHandler;
/// The ad event delegate to forward ad rendering events to Google Mobile Ads SDK.
id <GADMediationRewardedAdEventDelegate> _adEventDelegate;
}
@end
- (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration
completionHandler:
(GADMediationRewardedLoadCompletionHandler)completionHandler {
__block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT;
__block GADMediationRewardedLoadCompletionHandler originalCompletionHandler =
[completionHandler copy];
_loadCompletionHandler = ^id<GADMediationRewardedAdEventDelegate>(
_Nullable id<GADMediationRewardedAd> ad, NSError *_Nullable error) {
// Only allow completion handler to be called once.
if (atomic_flag_test_and_set(&completionHandlerCalled)) {
return nil;
}
id<GADMediationRewardedAdEventDelegate> delegate = nil;
if (originalCompletionHandler) {
// Call original handler and hold on to its return value.
delegate = originalCompletionHandler(ad, error);
}
// Release reference to handler. Objects retained by the handler will also be released.
originalCompletionHandler = nil;
return delegate;
};
NSString *adUnit = adConfiguration.credentials.settings[@"parameter"];
_rewardedAd = [[SampleRewardedAd alloc] initWithAdUnitID:adUnit];
_rewardedAd.delegate = self;
SampleAdRequest *adRequest = [[SampleAdRequest alloc] init];
adRequest.testMode = adConfiguration.isTestRequest;
[_rewardedAd fetchAd:adRequest];
}
خواه تبلیغ با موفقیت واکشی شود یا با خطا مواجه شود، با GADMediationRewardedLoadCompletionHandler
تماس بگیرید. در صورت موفقیت، از کلاسی که GADMediationRewardedAd
پیاده سازی می کند با مقدار nil
برای پارامتر خطا عبور دهید. در صورت عدم موفقیت، از خطایی که با آن مواجه شدید عبور کنید.
به طور معمول، این روشها در داخل فراخوانهای SDK شخص ثالثی که آداپتور شما پیادهسازی میکند، پیادهسازی میشود. برای این مثال، Sample SDK دارای SampleRewardedAdDelegate
با تماسهای مربوطه است:
سویفت
func rewardedDidLoad(_ interstitial: SampleRewarded) {
if let handler = completionHandler {
delegate = handler(self, nil)
}
}
func rewarded(
rewarded: SampleRewarded, didFailToLoadAdWith errorCode: SampleErrorCode
) {
let error =
SampleCustomEventUtils.SampleCustomEventErrorWithCodeAndDescription(
code: SampleCustomEventErrorCode
.SampleCustomEventErrorAdLoadFailureCallback,
description:
"Sample SDK returned an ad load failure callback with error code: \(errorCode)"
)
if let handler = completionHandler {
delegate = handler(nil, error)
}
}
هدف-C
- (void)rewardedDidLoad:(SampleRewarded *)rewarded {
_adEventDelegate = _loadCompletionHandler(self, nil);
}
- (void)rewarded:(SampleInterstitial *)rewarded
didFailToLoadAdWithErrorCode:(SampleErrorCode)errorCode {
NSError *error = SampleCustomEventErrorWithCodeAndDescription(
SampleCustomEventErrorAdLoadFailureCallback,
[NSString stringWithFormat:@"Sample SDK returned an ad load failure "
@"callback with error code: %@",
errorCode]);
_adEventDelegate = _loadCompletionHandler(nil, error);
}
GADMediationrewardedAd
برای نمایش تبلیغ نیاز به پیادهسازی روش present(viewController:)
دارد:
سویفت
func present(from viewController: UIViewController) {
if let rewarded = rewarded, rewarded.isRewardedLoaded {
rewarded.show()
}
}
هدف-C
- (void)presentFromViewController:(UIViewController *)viewController {
if ([_rewardedAd isRewardedLoaded]) {
[_rewardedAd show];
} else {
NSError *error = SampleCustomEventErrorWithCodeAndDescription(
SampleCustomEventErrorAdNotLoaded,
[NSString stringWithFormat:
@"The rewarded ad failed to present because the ad was not loaded."]);
[_adEventDelegate didFailToPresentWithError:error]
}
}
رویدادهای میانجیگری را به Google Mobile Ads SDK بازارسال کنید
هنگامی که GADMediationRewardedLoadCompletionHandler
با یک آگهی بارگذاری شده فراخوانی کردید، شیء نماینده بازگردانده شده GADMediationRewardedAdEventDelegate
میتواند توسط آداپتور برای ارسال رویدادهای ارائه از SDK شخص ثالث به Google Mobile Ads SDK استفاده شود. کلاس SampleCustomEventRewarded
پروتکل SampleRewardedAdDelegate
را برای ارسال تماسهای پاسخ از شبکه تبلیغات نمونه به Google Mobile Ads SDK پیادهسازی میکند.
مهم است که رویداد سفارشی شما تا آنجایی که ممکن است از این تماسهای برگشتی را فوروارد کند تا برنامه شما این رویدادهای مشابه را از Google Mobile Ads SDK دریافت کند. در اینجا مثالی از استفاده از callback آورده شده است:
سویفت
func rewardedAdDidPresent(_ rewarded: SampleRewardedAd) {
delegate?.willPresentFullScreenVideo()
delegate?.didStartVideo()
}
func rewardedAdUserDidEarnReward(_ rewarded: SampleRewardedAd) {
AdReward aReward = AdReward("", rewarded)
delegate.didRewardUser()
}
هدف-C
- (void)rewardedAdDidPresent:(SampleRewardedAd *)rewardedAd {
[_adEventDelegate willPresentFullScreenView];
[_adEventDelegate didStartVideo];
}
- (void)rewardedAd:(nonnull SampleRewardedAd *)rewardedAd
userDidEarnReward:(NSUInteger)reward {
GADAdReward *aReward = [[GADAdReward alloc]
initWithRewardType:@""
rewardAmount:[NSDecimalNumber numberWithUnsignedInt:reward]];
[_adEventDelegate didRewardUserWithReward];
}
این پیاده سازی رویدادهای سفارشی را برای تبلیغات پاداش تکمیل می کند. نمونه کامل در GitHub موجود است. میتوانید آن را با یک شبکه تبلیغاتی که قبلاً پشتیبانی میشود استفاده کنید یا آن را برای نمایش آگهیهای پاداش رویداد سفارشی تغییر دهید.
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2025-09-02 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-09-02 بهوقت ساعت هماهنگ جهانی."],[[["\u003cp\u003eTo request a rewarded ad through a custom event, implement the \u003ccode\u003eGADMediationAdapter\u003c/code\u003e and \u003ccode\u003eloadRewarded:adConfiguration:completionHandler:\u003c/code\u003e methods.\u003c/p\u003e\n"],["\u003cp\u003eCreate a separate class that implements \u003ccode\u003eGADMediationRewardedAd\u003c/code\u003e to handle ad loading, the \u003ccode\u003eGADMediationRewardedAd\u003c/code\u003e protocol, and ad event callbacks to the Google Mobile Ads SDK.\u003c/p\u003e\n"],["\u003cp\u003eUse the \u003ccode\u003eGADMediationRewardedLoadCompletionHandler\u003c/code\u003e to notify the Google Mobile Ads SDK about ad load success or failure.\u003c/p\u003e\n"],["\u003cp\u003eForward ad events from the third-party ad network SDK to the Google Mobile Ads SDK using the \u003ccode\u003eGADMediationRewardedAdEventDelegate\u003c/code\u003e object.\u003c/p\u003e\n"],["\u003cp\u003eThe provided code snippets and the full example on GitHub can be used to create or modify custom events for rewarded ads.\u003c/p\u003e\n"]]],["To implement rewarded ads, create a class extending `GADMediationAdapter` and `GADMediationRewardedAd`, exemplified by `SampleCustomEvent` and `SampleCustomEventRewarded`. `SampleCustomEvent` calls `loadRewarded:` in `SampleCustomEventRewarded`, which loads the ad, implements `GADMediationRewardedAd`, and manages event callbacks. Ad configuration parameters, like ad unit IDs, can be accessed. After loading, `GADMediationRewardedLoadCompletionHandler` reports success or failure. `present(viewController:)` displays the ad. Forward relevant presentation events from the ad network SDK to the Google Mobile Ads SDK.\n"],null,["Prerequisites\n\nComplete the [custom events setup](/admob/ios/custom-events/setup).\n\nRequest a rewarded ad\n\nWhen the custom event line item is reached in the waterfall mediation chain,\nthe loadRewarded:adConfiguration:completionHandler: method is called on the\nclass name you provided when [creating a custom\nevent](/admob/ios/custom-events/setup#create). In this case,\nthat method is in `SampleCustomEvent`, which then calls\nthe `loadRewarded:adConfiguration:completionHandler:` method in\n`SampleCustomEventRewarded`.\n\nTo request a rewarded ad, create or modify a class that implements\n`GADMediationAdapter` and `loadRewarded:adConfiguration:completionHandler:`. If\na class that extends `GADMediationAdapter` already exists, implement\n`loadRewarded:adConfiguration:completionHandler:` there. Additionally,\ncreate a new class to implement `GADMediationRewardedAd`.\n\nIn our custom event example,\n[`SampleCustomEvent`](//github.com/googleads/googleads-mobile-ios-mediation/blob/main/example/CustomEvent/SampleCustomEvent.m) implements\nthe `GADMediationAdapter` interface and then delegates to\n`SampleCustomEventRewarded`. \n\nSwift \n\n```swift\nimport GoogleMobileAds\n\nclass SampleCustomEvent: NSObject, MediationAdapter {\n\n fileprivate var rewardedAd: SampleCustomEventRewarded?\n ...\n\n func loadRewarded(\n for adConfiguration: MediationRewardedAdConfiguration,\n completionHandler: @escaping GADMediationRewardedLoadCompletionHandler\n ) {\n self.rewardedAd = SampleCustomEventRewarded()\n self.rewardedAd?.loadRewarded(\n for: adConfiguration, completionHandler: completionHandler)\n }\n}\n```\n\nObjective-C \n\n```objective-c\n#import \"SampleCustomEvent.h\"\n\n@implementation SampleCustomEvent\n...\n\nSampleCustomEventRewarded *sampleRewarded;\n\n- (void)loadRewardedForAdConfiguration:\n (GADMediationRewardedAdConfiguration *)adConfiguration\n completionHandler:\n (GADMediationRewardedLoadCompletionHandler)\n completionHandler {\n sampleRewarded = [[SampleCustomEventRewarded alloc] init];\n [sampleRewarded loadRewardedForAdConfiguration:adConfiguration\n completionHandler:completionHandler];\n}\n```\n\n`SampleCustomEventRewarded` is responsible for the following tasks:\n\n- Loading the rewarded ad.\n\n- Implementing the `GADMediationRewardedAd` protocol.\n\n- Receiving and reporting ad event callbacks to Google Mobile Ads SDK.\n\nThe optional parameter defined in the AdMob UI is\nincluded in the ad configuration.\nThe parameter can be accessed through\n`adConfiguration.credentials.settings[@\"parameter\"]`. This parameter is\ntypically an ad unit identifier that an ad network SDK requires when\ninstantiating an ad object. \n\nSwift \n\n```swift\nclass SampleCustomEventRewarded: NSObject, MediationRewardedAd {\n /// The Sample Ad Network rewarded ad.\n var nativeAd: SampleRewarded?\n\n /// The ad event delegate to forward ad rendering events to Google Mobile Ads SDK.\n var delegate: MediationRewardedAdEventDelegate?\n\n /// Completion handler called after ad load.\n var completionHandler: GADMediationRewardedLoadCompletionHandler?\n\n func loadRewarded(\n for adConfiguration: MediationRewardedAdConfiguration,\n completionHandler: @escaping GADMediationRewardedLoadCompletionHandler\n ) {\n rewarded = SampleRewarded.init(\n adUnitID: adConfiguration.credentials.settings[\"parameter\"] as? String)\n rewarded?.delegate = self\n let adRequest = SampleAdRequest()\n adRequest.testMode = adConfiguration.isTestRequest\n self.completionHandler = completionHandler\n rewarded?.fetchAd(adRequest)\n }\n}\n```\n\nObjective-C \n\n```objective-c\n#import \"SampleCustomEventRewarded.h\"\n\n@interface SampleCustomEventRewarded () \u003cSampleRewardedAdDelegate,\n GADMediationRewardedAd\u003e {\n /// The sample rewarded ad.\n SampleRewarded *_rewardedAd;\n\n /// The completion handler to call when the ad loading succeeds or fails.\n GADMediationRewardedLoadCompletionHandler _loadCompletionHandler;\n\n /// The ad event delegate to forward ad rendering events to Google Mobile Ads SDK.\n id \u003cGADMediationRewardedAdEventDelegate\u003e _adEventDelegate;\n}\n@end\n\n- (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration\n completionHandler:\n (GADMediationRewardedLoadCompletionHandler)completionHandler {\n __block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT;\n __block GADMediationRewardedLoadCompletionHandler originalCompletionHandler =\n [completionHandler copy];\n\n _loadCompletionHandler = ^id\u003cGADMediationRewardedAdEventDelegate\u003e(\n _Nullable id\u003cGADMediationRewardedAd\u003e ad, NSError *_Nullable error) {\n // Only allow completion handler to be called once.\n if (atomic_flag_test_and_set(&completionHandlerCalled)) {\n return nil;\n }\n\n id\u003cGADMediationRewardedAdEventDelegate\u003e delegate = nil;\n if (originalCompletionHandler) {\n // Call original handler and hold on to its return value.\n delegate = originalCompletionHandler(ad, error);\n }\n\n // Release reference to handler. Objects retained by the handler will also be released.\n originalCompletionHandler = nil;\n\n return delegate;\n };\n\n NSString *adUnit = adConfiguration.credentials.settings[@\"parameter\"];\n _rewardedAd = [[SampleRewardedAd alloc] initWithAdUnitID:adUnit];\n _rewardedAd.delegate = self;\n SampleAdRequest *adRequest = [[SampleAdRequest alloc] init];\n adRequest.testMode = adConfiguration.isTestRequest;\n [_rewardedAd fetchAd:adRequest];\n}\n```\n\nWhether the ad is successfully fetched or encounters an error, you\nwould call `GADMediationRewardedLoadCompletionHandler`. In the event of\nsuccess, pass through the class that implements `GADMediationRewardedAd`\nwith a `nil` value for the error parameter; in the event of failure, pass\nthrough the error you encountered.\n\nTypically, these methods are implemented inside callbacks from the\nthird-party SDK your adapter implements. For this example, the Sample SDK\nhas a `SampleRewardedAdDelegate` with relevant callbacks: \n\nSwift \n\n```swift\nfunc rewardedDidLoad(_ interstitial: SampleRewarded) {\n if let handler = completionHandler {\n delegate = handler(self, nil)\n }\n}\n\nfunc rewarded(\n rewarded: SampleRewarded, didFailToLoadAdWith errorCode: SampleErrorCode\n) {\n let error =\n SampleCustomEventUtils.SampleCustomEventErrorWithCodeAndDescription(\n code: SampleCustomEventErrorCode\n .SampleCustomEventErrorAdLoadFailureCallback,\n description:\n \"Sample SDK returned an ad load failure callback with error code: \\(errorCode)\"\n )\n if let handler = completionHandler {\n delegate = handler(nil, error)\n }\n}\n```\n\nObjective-C \n\n```objective-c\n- (void)rewardedDidLoad:(SampleRewarded *)rewarded {\n _adEventDelegate = _loadCompletionHandler(self, nil);\n}\n\n- (void)rewarded:(SampleInterstitial *)rewarded\n didFailToLoadAdWithErrorCode:(SampleErrorCode)errorCode {\n NSError *error = SampleCustomEventErrorWithCodeAndDescription(\n SampleCustomEventErrorAdLoadFailureCallback,\n [NSString stringWithFormat:@\"Sample SDK returned an ad load failure \"\n @\"callback with error code: %@\",\n errorCode]);\n _adEventDelegate = _loadCompletionHandler(nil, error);\n}\n```\n\n`GADMediationrewardedAd` requires implementing a `present(viewController:)`\nmethod to display the ad: \n\nSwift \n\n```swift\nfunc present(from viewController: UIViewController) {\n if let rewarded = rewarded, rewarded.isRewardedLoaded {\n rewarded.show()\n }\n}\n```\n\nObjective-C \n\n```objective-c\n- (void)presentFromViewController:(UIViewController *)viewController {\n if ([_rewardedAd isRewardedLoaded]) {\n [_rewardedAd show];\n } else {\n NSError *error = SampleCustomEventErrorWithCodeAndDescription(\n SampleCustomEventErrorAdNotLoaded,\n [NSString stringWithFormat:\n @\"The rewarded ad failed to present because the ad was not loaded.\"]);\n [_adEventDelegate didFailToPresentWithError:error]\n }\n}\n```\n\nForward mediation events to Google Mobile Ads SDK\n\nOnce you've called `GADMediationRewardedLoadCompletionHandler` with a loaded\nad, the returned `GADMediationRewardedAdEventDelegate` delegate object can\nthen be used by the adapter to forward presentation events from the third-party\nSDK to Google Mobile Ads SDK. The `SampleCustomEventRewarded` class\nimplements the `SampleRewardedAdDelegate` protocol to forward callbacks from\nthe sample ad network to Google Mobile Ads SDK.\n\nIt's important that your custom event forwards as many of these callbacks as\npossible, so that your app receives these equivalent events from Google Mobile Ads SDK.\nHere's an example of using callbacks: \n\nSwift \n\n```swift\nfunc rewardedAdDidPresent(_ rewarded: SampleRewardedAd) {\n delegate?.willPresentFullScreenVideo()\n delegate?.didStartVideo()\n}\n\nfunc rewardedAdUserDidEarnReward(_ rewarded: SampleRewardedAd) {\n AdReward aReward = AdReward(\"\", rewarded)\n delegate.didRewardUser()\n}\n```\n\nObjective-C \n\n```objective-c\n- (void)rewardedAdDidPresent:(SampleRewardedAd *)rewardedAd {\n [_adEventDelegate willPresentFullScreenView];\n [_adEventDelegate didStartVideo];\n}\n\n- (void)rewardedAd:(nonnull SampleRewardedAd *)rewardedAd\n userDidEarnReward:(NSUInteger)reward {\n GADAdReward *aReward = [[GADAdReward alloc]\n initWithRewardType:@\"\"\n rewardAmount:[NSDecimalNumber numberWithUnsignedInt:reward]];\n [_adEventDelegate didRewardUserWithReward];\n}\n```\n\nThis completes the custom events implementation for rewarded ads. The full\nexample is available on\n[GitHub](//github.com/googleads/googleads-mobile-ios-mediation/tree/master/example/CustomEvent).\nYou can use it with an ad network that is already supported or modify it to\ndisplay custom event rewarded ads."]]