Chartboost Mediation 参考适配器展示了与 Chartboost Mediation SDK 的集成,仅用于参考和测试。
插件 | 版本 |
---|---|
Chartboost Mediation SDK | 5.0.0+ |
Cocoapods | 1.11.3+ |
iOS | 13.0+ |
Xcode | 15.0+ |
在您的 Podfile
中添加以下条目
pod 'ChartboostMediationAdapterReference'
重要
Chartboost Mediation 不提供官方支持自定义适配器。有关官方适配器的列表,请访问此网站:https://adapters.chartboost.com。
-
创建一个新类,使其符合 Chartboost Mediation 的
PartnerAdapter
协议。 -
实现
var partnerSDKVersion: String { get }
以返回合作伙伴 SDK 的版本号。大多数适配器从合作伙伴 SDK 的 API 中获取此信息,因此即使在 SDK 版本已更改的情况下,适配器也始终报告正确的版本。 -
实现
var adapterVersion: String { get }
以返回 Mediation 适配器的版本号。适配器版本格式为<Chartboost Mediation 主版本号>.<合作伙伴主版本号>.<合作伙伴次要版本号>.<合作伙伴修复版本号>.<合作伙伴构建版本号>.<适配器构建版本号>
。
<合作伙伴构建版本号>
是可选的,并且大多数合作伙伴都省略了它。例如,如果此适配器与 Chartboost Mediation SDK 4.x 和合作伙伴 SDK 1.2.3.[4] 兼容,并且这是其首次发布,那么adapterVersion
是 4.1.2.3.[4].0。 -
实现
var partnerID: String { get }
,该代码中包含 Chartboost Mediation SDK 可以用来引用当前合作伙伴的内部标识符。必须与 Chartboost Mediation 仪表板上使用的值匹配。 -
实现
var partnerDisplayName: String { get }
,该代码以易读的合作伙伴名称。 -
实现
func setGDPR(applies: Bool?, status: GDPRConsentStatus)
、
func setCCPA(hasGivenConsent: Bool, privacyString: String)
,
和func setCOPPA(isChildDirected: Bool)
,
这些将接收来自 Chartboost Mediation SDK 的隐私设置并将其应用到合作伙伴 SDK 中。
它们总是在 Chartboost Mediation 初始化适配器时启动时调用。它们也将在出版商在 Mediation SDK 上更新隐私设置时调用。
请注意,这些隐私方法只有在 在setUp()
之后才会调用。如果您的 SDK 需要在初始化时传入隐私设置,您需要在启动时设置一个安全的默认值。在这种情况下,请考虑在收到隐私设置时将它们保存到磁盘,以便在下次启动时应用它们。每次您更新 SDK 的隐私设置时,请使用PartnerLogEvent.privacyUpdated(setting: String, value: Any?)
来记录更改。 -
实现
init(storage: PartnerAdapterStorage)
。对于大多数适配器而言,这是一个空操作,但如果需要防止相同的放置ID被加载两次,请保存对storage
的引用,该引用提供了MediationSDK当前已加载的您的网络中广告的可见性。关于如何检查此存储以确定重复项,请参考引用适配器中makeAd
的实现示例。 -
实现
func setUp(with configuration: PartnerConfiguration, completion: @escaping (Error?) -> Void)
以初始化合作伙伴SDK并执行任何必要的设置以请求和提供服务广告。在初始化您的SDK之前调用PartnerLogEvent.setUpStarted()
。如果操作成功,记录PartnerLogEvent.setUpSucceded
和调用completion(nil)
。否则,记录PartnerLogEvent.setUpFailed(Error)
和调用completion(Error)
。如果该方法调用超时,即使您稍后报告了成功的init,MediationSDK也会考虑您的适配器未初始化。 -
实现
func fetchBidderInformation(request: PreBidRequest, completion: @escaping ([String: String]?) -> Void)
。如果您支持竞价,返回包含可竞价代币字符串的completion([String: String])
。此字典中使用的键取决于您的网络中的竞价如何与我们后端集成。通常,Chartboost仅将这些标签传递给竞价服务器,因此这里应用的是您的RTB规范。例如,如果您的服务器期望在名为 'token' 的字段中接收竞价信息,则应使用'token'。
在获取/生成代币时,使用以下三个PartnerLogEvent
来记录执行过程
fetchBidderInfoStarted(PreBidRequest)
fetchBidderInfoSucceeded(PreBidRequest)
fetchBidderInfoFailed(PreBidRequest, error: Error)
如果您的SDK不支持竞价,则只需调用completion(nil)
。 -
实现至少一个包装您广告实例的类。它必须遵守
PartnerAd
协议var adapter: PartnerAdapter { get }
创建广告的适配器的引用。var request: PartnerAdLoadRequest { get }
关联的广告加载请求。var delegate: PartnerAdDelegate? { get }
生命周期事件代理。var inlineView: UIView? { get }
显示横幅广告的视图。不用于其他广告类型。func load(with viewController: UIViewController?, completion: @escaping (Error?) -> Void)
从您的网络SDK实例化一个广告。如果您的SDK期望从竞价响应中接收 ADM 来构建广告,它将在request.adm
中。对于非竞价广告,放置ID将在request.partnerPlacement
中可用。在加载后调用完成调用以指示成功或失败。func show(with viewController: UIViewController, completion: @escaping (Error?) -> Void)
显示已加载的广告,然后调用显示完成闭包。从不用于横幅广告。func invalidate() throws
在SDK在处置广告之前调用。有一个无操作默认实现,并且大多数适配器不需要实现自己的实现,因为它们的广告不需要进行特殊清理。
大多数适配器实现多个广告类型(例如, [YourNetwork]BannerAd、[YourNetwork]InterstitialAd等)。在这种情况下,您可以将有
PartnerAd
要求的一些东西移动到父类中,以减少代码重复。在这个库中,您可以查看如何ReferenceAdapterAd
持有init
函数以及一些在子类间不同的属性。每个
PartnerAd
还需要存储Chartboost MediaSDK将通过makeAd
传递给PartnerAdDelegate
,并调用以下代理方法来报告您的广告生命周期事件func didTrackImpression(_ ad: PartnerAd, details: PartnerDetails)
当合作伙伴SDK为当前显示的广告注册印象时调用。func didClick(_ ad: PartnerAd, details: PartnerDetails)
在用户点击操作后,调用该函数以执行合作伙伴广告被点击时的操作。func didReward(_ ad: PartnerAd, details: PartnerDetails)
在观看视频广告并获得奖励时调用该函数。func didDismiss(_ ad: PartnerAd, details: PartnerDetails, error: Error?)
当用户执行操作导致合作伙伴广告被关闭时,调用该函数。func didExpire(_ ad: PartnerAd, details: PartnerDetails)
当合作伙伴 SDK 确定合作伙伴广告已到期时,调用该函数。
-
实现
func makeAd(request: PartnerAdLoadRequest, delegate: PartnerAdDelegate) throws -> PartnerAd
,返回遵循PartnerAd
的对象。如果你正在编写适用于 Chartboost Mediation 4.x 的适配器,并且你的适配器支持自适应横幅或奖励激励视频,你需要在default
子句中检查这些,以保持向后兼容性。
default:
if request.format.rawValue == "rewarded_interstitial" {
return YourAdapterRewardedInterstitialAd(adapter: self, request: request, delegate: delegate)
} else if request.format.rawValue == "adaptive_banner" {
return YourAdapterAdapterBannerAd(adapter: self, request: request, delegate: delegate)
} else {
throw error(.loadFailureUnsupportedAdFormat)
}
-
在 Chartboost Mediation 网络仪表板上,添加你的完整适配器类名,以便你的中介适配器和合作伙伴 SDK 可以被初始化并用于广告服务。
-
如果你的 SDK 具有出版商需要访问的配置功能,请通过一个名为
[YourNetwork]AdapterConfiguration
的类提供,该类公开属性或方法。
我们致力于完全透明的开发过程,并非常欣赏任何贡献。我们的团队定期监视和调查所有提交,以将其包括在我们的官方适配器版本中。
有关如何贡献的更多信息,请参阅我们的 CONTRIBUTING 文件。
有关更多信息,请参阅我们的 LICENSE 文件。