內部中介服務未公開供用戶使用
使用 Audience Network 的內部出價目前為封閉測試版,未公開供用戶使用。若有任何變更,我們將提供進一步的更新。
您可以改為透過我們合作的其中一個中介服務平台存取 Audience Network 出價。
FBBiddingKit.framework
拖放至您的專案內,選擇「Copy items if needed(必要時複製項目)」,並在「Add to targets(新增至目標)」中選擇目標(如有需要)。FBBiddingKit
:#import <FBBiddingKit/FBBiddingKit.h>}
#import <AppLovinSDK/AppLovinSDK.h>
#import <Tapjoy/Tapjoy.h>
#import <FBAudienceNetwork/FBAudienceNetwork.h>
// Initializing AppLovin SDK
[[ALSdk shared] initializeSdk];
// Initializing Tapjoy SDK
[Tapjoy connect:@"TAPJOY_SDK_KEY"];
// Initializing Chartboost SDK
[Chartboost startWithAppId:@"CHARTBOOST_APP_ID" appSignature:@"CHARTBOOST_APP_ID" completion:**nil];**
// Initializing Facebook Audience Network SDK
[FBAudienceNetworkAds initializeWithSettings:nil completionHandler:nil];
// Initializing BiddingKit
FBBKConfiguration *configuration = [[FBBKConfiguration alloc] init];
configuration.auctionTimeout = 10;
configuration.verboseLoggingEnabled = YES;
[FBBKBiddingKit initializeWithConfiguration:configuration];
@protocol FBBKWaterfall <NSObject>
- (id<FBBKWaterfall>)createWaterfallCopy;
/*!
* @discussion Creates waterfall entry from bid, inserts and sort to keep order
* @param bid Bid object with information that is needed to create an WaterfallEntry
*/
- (void)insertEntryUsingBid:(FBBKBid *)bid;
/*!
* @discussion Inserts the given WaterfallEntry into the Waterfall. Should be sorted afterwards
* @param entry Waterfall Entry to insert
*/
- (void)insertEntry:(id<FBBKWaterfallEntry>)entry;
/*!
* @discussion Provides a an array of waterfall entries inside current waterfall
* @return Array of presented waterfall entries
*/
- (NSArray<id<FBBKWaterfallEntry>> *)entries;
@end
@protocol FBBKWaterfallEntry <NSObject>
/*!
* @discussion Provides a bid for current Waterfall Entry, if it exists
* @return Stored bid value if presented or nil otherwise
*/
@property (nonatomic, readonly, nullable) FBBKBid *bid;
/*!
* @discussion Cost Per Thousand for current Waterfall Entry
* @return CPM in cents
*/
@property (nonatomic, readonly) double CPMCents;
/*!
* @discussion Entry Name for current Waterfall Entry
* @return Name of Entry that provided bid
*/
@property (nonatomic, readonly) NSString *entryName;
@end
id<FBBKWaterfall> waterfall = [[Waterfall alloc] init];
[waterfall insertEntry:[[WaterfallEntry alloc] initWithName:@"NetworkA" cpm:0.3]];
[waterfall insertEntry:[[WaterfallEntry alloc] initWithName:@"NetworkB" cpm:0.2]];
@protocol FBBKABTest <NSObject>
/*!
* @discussion Equally splits the users into different segments
* @return Segment for a current user
*/
@property (nonatomic, readonly) id<FBBKABSegment> currentSegment;
@end
@protocol FBBKABSegment <NSObject>
/*!
* @discussion Segment identifier for current segment
*/
@property (nonatomic, readonly) NSString *segment;
@end
id<FBBKABTest> abtest = [[ABTest alloc] init];
id<FBBKABSegment> testA = [[ABSegment alloc] initWithSegment:@"A"];
id<FBBKABSegment> control = [[ABSegment alloc] initWithSegment:@"B"];
[abtest addSegment:testA];
[abtest addSegment:control];
@protocol FBBKBidder <NSObject>
/*!
* An Identifier for a bidder
*/
@property (nonatomic, readonly) NSInteger identifier;
/*!
* This method will return a name for bidder
*/
@property (nonatomic, readonly, copy) NSString *bidderName;
/*!
* Provides bid asynchronously
*/
- (void)retrieveBidComplete:(void (^)(FBBKBid *_Nullable bid))complete;
/*!
* Provides bid asynchronously
*/
- (void)retrieveBidComplete:(nullable void (^)(FBBKBid *bid))complete
failed:(nullable void (^)(NSError *_Nullable error))failed;
@end
bidderToken
,您需要整合 FBAudienceNetwork.framework
:
#import <FBAudienceNetwork/FBAdSettings.h>
// Provide required values for Facebook Bidder
NSString *appId = @"YOUR_APP_ID";
NSString *placementId = @"YOUR_PLACEMENT_ID";
NSString *bidToken = [FBAdSettings bidderToken];
FBBKFacebookAdBidFormat adBidFormat = FBBKFacebookAdBidFormatInterstitial;
// Create parameters for Facebook Bidder
FBBKFacebookBidderParameters *parameters =
[[FBBKFacebookBidderParameters alloc] initWithAppId:appId
placementId:placementId
adBidFormat:adBidFormat
bidToken:bidToken];
// Setup additional fields if needed
parameters.testMode = YES;
// Create Facebook Bidder
FBBKFacebookBidder *facebookBidder = [[FBBKFacebookBidder alloc] initWithParameters:parameters];
@protocol FBBKAuction <NSObject>
/**
* An integer indentifier for a particular FBBKAuction
*/
@property (nonatomic, readonly) NSInteger auctionId;
/**
* Delegate for FBBKAuction instance. Set up for listenening to updates and notifications
*/
@property (nonatomic, nullable, weak) id<FBBKAuctionDelegate> delegate;
/**
* Starts running the Auction with the given bidders FBBKBidder.
* This method will run the auction asynchronously and will return immediately.
* This method can be called only once.
*
* Bidders are added to an auction through (see -[FBBKAuctionImpl initWithBidders:];)
* When the auction is finished, we will return a waterfall copy
* (see -[FBBKWaterfall createWaterfallCopy];) which will include the results of the bids
* of the auction results.
* All bidders in the auction run in parallel and all start at the same time.
* They are all given the same timeout defined by the configuration set in
* (see +[FBBiddingKit initializeWithConfig:] method. Bidders that do not obtain a bid in the provided
* time slot will not be considered for the auction, even if they return a bid later.
*
* @param waterfall The waterfall we want to use for this FBBKAuction
*/
- (void)startUsingWaterfall:(id<FBBKWaterfall>)waterfall;
/**
* Must be called just before an ad is displayed. Notifies bidders of the demand source
* (real-time or not) that has eventually displayed the ad. This is later used to estimate
* ARPDAU by bidding kit and is necessary for optimisations
*
* @param winnerEntry the winning FBBKWaterfallEntry which is being shown on screen
*/
- (void)notifyDisplayWinner:(id<FBBKWaterfallEntry>)winnerEntry;
@end
/**
* This is an FBBKAuctionDelegate
* We use it to notify about the auction completion
*/
@protocol FBBKAuctionDelegate <NSObject>
@optional
/**
* This method will be called when the Auction is completed
*
* @param auction Auction which notified about completion
* @param waterfall The waterfall with the updated bidders.
*/
- (void)fbbkAuction:(id<FBBKAuction>)auction didCompleteWithWaterfall:(id<FBBKWaterfall>)waterfall;
@end
// Create Auction
id<FBBKAuction> abAuction = [[FBBKAuctionImpl alloc] initWithBidders:@[facebookBidder]];
auction.delegate = self; // become a delegate to handle callbacks
- (void)fbbkAuction:(id<FBBKAuction>)auction didCompleteWithWaterfall:(id<FBBKWaterfall>)waterfall
{
// TODO: use waterfall to show ads
}
[auction `startUsingWaterfall`:waterfall];
}
@protocol FBBKABAuction <NSObject>
/*!
* @discussion An integer indentifier for a particular A/B Auction
* @return Identifier of an auction
*/
@property (nonatomic, readonly) NSInteger abAuctionId;
/*!
* @discussion Delegate for A/B Auction instance. Set up for listenening to updates and notifications
*/
@property (nonatomic, weak, nullable) id<FBBKABAuctionDelegate> delegate;
/*!
* @discussion Chooses an A/B auction for segment and starts it with values provided by waterfall
* @param test A/B test for this auction
* @param waterfall Interface for providing waterfall entries
*/
- (void)startWithABTest:(id<FBBKABTest>)test waterfall:(id<FBBKWaterfall>)waterfall;
/*!
* @discussion Should be invoked after displaying winner
* @param winnerEntry FBBKWaterfallEntry which wins in current auction
*/
- (void)notifyDisplayWinner:(id<FBBKWaterfallEntry>)winnerEntry;
@end
@protocol FBBKABAuctionDelegate <NSObject>
@optional
- (void)fbbkabAuction:(id<FBBKABAuction>)abAuction didCompleteWithWaterfall:(id<FBBKWaterfall>)waterfall;
@end
// Create Auction
id<FBBKABAuction> abAuction = [[FBBKABAuctionImpl alloc] initWithBidders:@{
testA : @[facebookBidder],
control : @[],
}];
auction.delegate = self; // become a delegate to handle callbacks
- (void)fbbkabAuction:(id<FBBKABAuction>)abAuction didCompleteWithWaterfall:(id<FBBKWaterfall>)waterfall
{
// TODO: use waterfall to show ads
}
[auction startWithABTest:abtest waterfall:waterfall];
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Initializing BiddingKit
FBBKConfiguration *configuration = [[FBBKConfiguration alloc] init];
configuration.auctionTimeout = 10;
configuration.verboseLoggingEnabled = YES;
[FBBKBiddingKit initializeWithConfiguration:configuration];
}
- (void)createAuction
{
// create and setup waterfall
id<FBBKWaterfall> waterfall = [[Waterfall alloc] init];
[waterfall insertEntry:[[WaterfallEntry alloc] initWithName:@"NetworkA" cpm:0.3]];
[waterfall insertEntry:[[WaterfallEntry alloc] initWithName:@"NetworkB" cpm:0.2]];
// Provide required values for Facebook Bidder
NSString *appId = @"YOUR_APP_ID";
NSString *placementId = @"YOUR_PLACEMENT_ID";
NSString *bidToken = [FBAdSettings bidderToken];
FBBKFacebookAdBidFormat adBidFormat = FBBKFacebookAdBidFormatInterstitial;
// Create parameters for Facebook Bidder
FBBKFacebookBidderParameters *parameters =
[[FBBKFacebookBidderParameters alloc] initWithAppId:appId
placementId:placementId
bidFormat:adBidFormat
bidToken:bidToken];
// Setup additional fields if needed
parameters.testMode = YES;
// Create Facebook Bidder
FBBKFacebookBidder *facebookBidder = [[FBBKFacebookBidder alloc] initWithParameters:parameters];
// Create Auction
_abAuction = [[FBBKABAuctionImpl alloc] initWithBidders:@[facebookBidder]];
_abAuction.delegate = self;
// Start Auction
[_abAuction startWithWaterfall:waterfall];
}
#pragma mark - FBBKABAuctionDelegate
- (void)fbbkAuction:(id<FBBKABAuction>)abAuction didCompleteWithWaterfall:(id<FBBKWaterfall>)waterfall;
{
// waterfall contains your original waterfall entries
// along with the real time bids
// Our waterfall implementation is sorted by CPM, so first entry
// has the highest price
id<FBBKWaterfallEntry> winnerEntry = waterfall.entries.firstObject;
// kFBBKFacebookBidderName -> 'FACEBOOK_BIDDER'
if ([winnerEntry.entryName isEqualToString:kFBBKFacebookBidderName]) {
FBBKBid *bid = entry.bid;
// Create the rewarded video unit with a placement ID (generate your own on the Facebook app settings).
// Use different ID for each ad placement in your app.
self.rewardedVideoAd = [[FBRewardedVideoAd alloc] initWithPlacementID:bid.placementId withUserID:@"user123" withCurrency:@"gold"];
// Set a delegate to get notified on changes or when the user interact with the ad.
self.rewardedVideoAd.delegate = self;
[self.rewardedVideoAd loadAdWithBidPayload:bid.payLoad];
// wait till ads is loaded in -interstitialAdDidLoad: callback
} else {
// Handle other networks
}
}
#pragma mark - FBInterstitialAdDelegate
- (void)interstitialAdDidLoad:(FBInterstitialAd *)interstitialAd
{
id<FBBKWaterfallEntry> winnerEntry = ...
// Call notifyDisplayWinner before an ad is displayed
[abAuction notifyDisplayWinner:winnerEntry];
// Display ad
[self showAdFromBid:entry.bid];
}