O lançamento do SDK C++ do Firebase v9.1.0 apresenta um novo SDK C++ dos anúncios para dispositivos móveis do Google.
O SDK C++ dos anúncios para dispositivos móveis do Google é uma nova superfície de API que incorpora as principais alterações feitas nos SDKs C++ da AdMob do Firebase para iOS e Android em 2021 e 2022, incluindo a remoção de APIs obsoletas e um novo fluxo ao trabalhar com anúncios em tela inteira. tipos.
O antigo SDK C++ da AdMob do Firebase ( firebase::admob
) foi marcado como obsoleto e não receberá nenhuma atualização ou correção de bug no futuro.
Tanto o novo SDK C++ dos anúncios para dispositivos móveis do Google ( firebase::gma
) quanto o antigo SDK C++ da AdMob do Firebase ( firebase::admob
) permanecerão como parte dos arquivos de compilação do SDK C++ do Firebase durante a janela de suspensão de uso do SDK C++ da AdMob do Firebase.
Remoção de API legada
As APIs a seguir foram totalmente removidas do SDK C++ dos anúncios para dispositivos móveis do Google.
RewardedVideoAd
O namespace RewardedVideoAd
da AdMob foi substituído pela classe RewardedAd
. RewardedAd
se comporta de maneira semelhante ao InterstitialAd
, mas inclui um RewardedAdListener
adicional para receber notificações de recompensas de itens.
NativeExpressAds
NativeExpressAd
da AdMob já havia sido marcado como obsoleto em cada SDK C++ da AdMob do Firebase. Portanto, NativeExpressAd
não está incluído no novo SDK C++ dos anúncios para dispositivos móveis do Google.
Alteração do namespace do SDK
O SDK foi realocado para um novo namespace e possui uma nova estrutura de diretórios:
Namespace firebase::gma
As fontes do novo SDK C++ dos anúncios para dispositivos móveis do Google estão no namespace firebase::gma
. O namespace firebase::admob
mais antigo foi descontinuado junto com o SDK C++ da AdMob do Firebase.
Estrutura de diretório
Os arquivos de cabeçalho foram movidos para um novo diretório dentro do arquivo de compilação:
SDK C++ da AdMob do Firebase obsoleto | Novo SDK C++ dos anúncios para dispositivos móveis do Google |
---|---|
include/firebase/admob | include/firebase/gma |
Biblioteca
O SDK C++ da AdMob do Firebase será fornecido como uma biblioteca estática no arquivo de compilação do SDK C++ do Firebase:
iOS
SDK C++ da AdMob do Firebase obsoleto | Novo SDK C++ dos anúncios para dispositivos móveis do Google |
---|---|
firebase_admob.xcframework | firebase_gma.xcframework |
Android
SDK C++ da AdMob do Firebase obsoleto | Novo SDK C++ dos anúncios para dispositivos móveis do Google |
---|---|
libfirebase_admob.a | libfirebase_gma.a |
Migrações de classe, enum e struct
A tabela abaixo lista classes, enumerações e estruturas específicas que foram alteradas ou removidas. Aqui está um resumo:
-
BannerView
foi renomeado paraAdView
. -
NativeAdExpressView
foi removido. - O namespace
RewardedVideo
é substituído por uma classeRewardedAd
. - A enumeração e os ouvintes
PresentationState
são removidos e substituídos pelos ouvintesAdListener
eFullScreenContent
. Os seguintes parâmetros são removidos como parâmetros de configuração por anúncio em
AdRequests
:- a configuração de IDs de dispositivos de teste
- a segmentação de anúncios com base na idade
Em vez disso, esses parâmetros agora podem ser configurados em
RequestConfiguration
, que é uma configuração global que afetará todos os carregamentos de anúncios subsequentes.
firebase::admob namespace obsoleto | Novo firebase::gma namespace |
---|---|
AdSizeType (enum) | AdSize::Type (enum) |
BannerView | AdView |
BannerView::Listener | AdListener AdViewBoundingBoxListener PaidEventListener |
BannerView::Position | AdView::Position |
BannerView::PresentationState | Removido |
ChildDirectedTreatmentState | RequestConfiguration::TagForChildDirectedTreatment |
Gender (enum) | Removido |
InterstitialAd::Listener | FullScreenContentListener PaidEventListener |
KeyValuePair | Removido |
NativeExpressAdView | Removido |
PollableRewardListener | Removido |
RewardItem | AdReward |
RewardedVideoAd (namespace) | RewardedAd (classe) |
RewardedVideoAd::Listener | FullScreenContentListener PaidEventListener UserEarnedRewardListener |
AdMobError (enum) | AdErrorCode (enum) |
RewardItem | AdReward |
Inicialização do SDK
Cada função de inicialização do SDK C++ dos anúncios para dispositivos móveis do Google retorna imediatamente dois indicadores de status:
Um parâmetro out opcional informa se ocorreu um erro de dependência antes do início do processo de inicialização.
O parâmetro de retorno é uma referência a
firebase::Future
. OFuture
contém os resultados da inicialização assíncrona dos adaptadores de mediação no dispositivo.
Embora o SDK C++ dos anúncios para dispositivos móveis do Google possa ser invocado para carregar anúncios veiculados pela AdMob assim que a função de inicialização retornar, outras redes de anúncios não veicularão anúncios até que o adaptador de mediação correspondente tenha sido totalmente inicializado. Esse processo ocorre de forma assíncrona. Portanto, se você estiver usando a mediação de anúncios em seu aplicativo, recomendamos que você aguarde a resolução do Future
antes de tentar carregar qualquer anúncio.
Antes
firebase::App* app = ::firebase::App::Create();
firebase::InitResult result = firebase::admob::Initialize(*app, kAdMobAppID);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing dependency.
// Check the device logs for more information.
return;
}
Depois
using firebase::App;
using firebase::Future;
using firebase::gma::AdapterInitializationStatus;
App* app = ::firebase::App::Create();
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
firebase::gma::Initialize(*app, &result);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing dependency.
// Check the device logs for more information.
return;
}
// Poll the future to wait for its completion either in this
// thread, or as part of your game loop by calling
// firebase::gma::InitializeLastResult();
while (future.status() == firebase::kFutureStatusPending) {
// Initialization on-going, continue to wait.
}
// future.status() is either kFutureStatusComplete or there’s an error
if (future.status() == firebase::kFutureStatusComplete &&
future.error() == firebase::gma::AdErrorCodeNone) {
AdapterInitializationStatus* status = future.result();
// Check status for any mediation adapters you wish to use.
// ..
} else {
// Handle initialization error.
}
Alterações no AdSize
no AdView
AdSize
agora contém membros estáticos de tamanhos de anúncios de banner comuns e oferece suporte a tamanhos de anúncios AnchorAdaptive
e InlineAdaptive
que têm uma altura dinâmica com base na largura fornecida e na orientação atual da tela.
Constantes estáticas AdSize adicionadas a firebase::gma::AdSize | |
---|---|
AdSize::kBanner | Tamanho do anúncio de banner da Mobile Marketing Association (MMA) (320 x 50 pixels independentes de densidade) |
AdSize::kFullBanner | Tamanho de anúncio de banner completo do Interactive Advertising Bureau (IAB) (468 x 60 pixels independentes de densidade) |
AdSize::kLargeBanner | Versão mais alta do kBanner , normalmente 320x100 |
AdSize::kLeaderboard | Tamanho do anúncio do cabeçalho do Interactive Advertising Bureau (IAB) (728 x 90 pixels independentes de densidade) |
AdSize::kMediumRectangle | Tamanho de anúncio retangular médio do Interactive Advertising Bureau (IAB) (300 x 250 pixels independentes de densidade) |
Métodos estáticos em firebase::gma::AdSize para ajudar a construir instâncias de AdSize | |
---|---|
GetLandscapeAnchoredAdaptiveBannerAdSize | Cria um AdSize com a largura especificada e uma altura otimizada pelo Google para criar um anúncio de banner no modo paisagem |
GetPortraitAnchoredAdaptiveBannerAdSize | Cria um AdSize com a largura especificada e uma altura otimizada pelo Google para criar um anúncio de banner no modo retrato |
GetCurrentOrientationAnchoredAdaptiveBannerAdSize | Cria um AdSize com a largura especificada e uma altura otimizada pelo Google para criar um anúncio de banner de acordo com a orientação atual |
GetInlineAdaptiveBannerAdSize | Cria um AdSize mais adequado para anúncios de banner com uma altura máxima Este |
GetLandscapeInlineAdaptiveBannerAdSize | Cria um InlineAdaptive AdSize com a largura fornecida e a altura paisagem do dispositivo |
GetPortraitInlineAdaptiveBannerAdSize | Cria um InlineAdaptive AdSize com a largura fornecida e a altura do retrato do dispositivo. |
GetCurrentOrientationInlineAdaptiveBannerAdSize | Um método conveniente para retornar InlineAdaptive AdSize dada a orientação atual da interface dada uma largura específica. |
Antes
firebase::admob::BannerView* banner_view = new firebase::admob::BannerView();
firebase::admob::AdSize ad_size;
ad_size.ad_size_type = firebase::admob::kAdSizeStandard;
ad_size.width = 320;
ad_size.height = 50;
// ad_parent is a reference to an iOS UIView or an Android Activity.
// banner_ad_unit is your ad unit id for banner ads.
banner_view->Initialize(ad_parent, banner_ad_unit, ad_size);
Depois
firebase::gma::AdView* ad_view = new firebase::gma::AdView();
// ad_parent is a reference to an iOS UIView or an Android Activity.
// banner_ad_unit is your ad unit id for banner ads.
banner_view->Initialize(ad_parent, banner_ad_unit, firebase::gma::AdSize.kBanner);
AdRequest
e configuração global
IDs de dispositivos de teste, TagForChildDirectedTreatment
e TagForUnderAgeOfConsent
(anteriormente tratados por aniversário) foram removidos de AdRequest
e agora fazem parte de um RequestConfiguration
global. Os aplicativos podem invocar firebase::gma::SetRequestConfiguration()
no início do ciclo de vida do aplicativo para configurar esses valores. Todas as operações subsequentes de carregamento de anúncios respeitarão essas configurações depois de configuradas.
firebase::gma::AdRequest
ainda existe, pois fornece informações contextuais para carregar anúncios, incluindo palavras-chave e um URL de conteúdo opcional.
A estrutura AdRequest
estilo C da AdMob foi substituída por uma classe com métodos que proporcionam uma melhor experiência do usuário ao definir e anexar às diversas listas de informações.
Aqui estão alterações notáveis AdRequest
:
- Os extras agora estão associados a um nome de classe do adaptador de mediação. Os extras enviados ao serviço AdMob devem usar o nome de classe padrão conforme definido abaixo.
- Ao solicitar um anúncio, os aplicativos podem transmitir um URL do conteúdo que estão veiculando. Isso permite que a segmentação por palavras-chave corresponda ao anúncio com outro conteúdo exibido.
Antes
firebase::admob::AdRequest request;
// Keywords to be used in targeting.
const char* keywords[] = {"GMA", "C++", "Fun"};
request.keyword_count = sizeof(keywords) / sizeof(keywords[0]);
request.keywords = keywords;
// "Extra" key value pairs.
static const firebase::admob::KeyValuePair extras[] = {
{"extra_name", "extra_value"}};
request.extras_count = sizeof(extras) / sizeof(extras[0]);
request.extras = kRequestExtras;
// Devices that should be served test ads.
const char* test_device_ids[] ={ "123", "4567", "890" };
request.test_device_id_count =
sizeof(test_device_ids) / sizeof(test_device_ids[0]);
request.test_device_ids = test_device_ids;
// Sample birthday to help determine the age of the user.
request.birthday_day = 10;
request.birthday_month = 11;
request.birthday_year = 1975;
// Load Ad with the AdRequest.
Depois
// Do once after Google Mobile Ads C++ SDK initialization.
// These settings will affect all Ad Load operations.
firebase::gma::RequestConfiguration configuration;
configuration.max_ad_content_rating =
firebase::gma::RequestConfiguration::kMaxAdContentRatingPG;
configuration.tag_for_child_directed_treatment =
firebase::gma::RequestConfiguration::kChildDirectedTreatmentTrue;
configuration.tag_for_under_age_of_consent =
firebase::gma::RequestConfiguration::kUnderAgeOfConsentFalse;
configuration.test_device_ids.push_back("1234");
configuration.test_device_ids.push_back("4567");
configuration.test_device_ids.push_back("890");
firebase::gma::SetRequestConfiguration(configuration);
// Then, more information must be provided via an AdRequest when
// loading individual ads.
firebase::gma::AdRequest ad_request;
// "Extra" key value pairs.
ad_request.add_keyword("GMA");
ad_request.add_keyword("C++");
ad_request.add_keyword("Fun");
// Content URL.
ad_request.set_content_url("www.example.com");
// Mediation Adapter Extras.
#if defined(Android)
const char* ad_network_extras_class_name =
"com/google/ads/mediation/admob/AdMobAdapter";
#else // iOS
const char* ad_network_extras_class_name = "GADExtras";
#endif
ad_request.add_extra(ad_network_extras_class_name, "extra_name", "extra_value");
// Load Ad with the AdRequest. See next section.
AdResults
LoadAd
agora retorna um Future
contendo um objeto AdResult
para todos os tipos de anúncio AdView
, InterstitialAd
e RewardedAd
. O método AdResult::is_successful
retorna true
se a solicitação de anúncio foi atendida com sucesso ou false
se não.
Em caso de falha, o AdResult
contém um objeto AdError
com informações de nível de serviço sobre o problema, incluindo o código de erro, a mensagem de erro e as sequências de domínio.
Antes
firebase::Future<AdResult> future;
void load_ad() {
// Assume an already created AdRequest object.
future = ad_view->LoadAd(ad_request);
}
void your_game_loop() {
if (future.status() == firebase::kFutureStatusComplete) {
if(future.error() != firebase::admob::kAdMobErrorNone) {
// There was either an internal SDK issue that caused the Future to
// fail its completion, or AdMob failed to fulfill the ad request.
// Details are unknown other than the Future’s error code returned
// from future.error().
} else {
// The ad loaded successfully.
}
}
}
Depois
firebase::Future<AdResult> future;
void load_ad() {
// Assumes a previously created AdRequest object.
// See "AdRequest and Global Configuration" above.
future = ad_view->LoadAd(ad_request);
}
void your_game_loop() {
// Check the future status in your game loop:
if (future.status() == firebase::kFutureStatusComplete) {
if(future.error() != firebase::admob::kAdErrorCodeNone) {
// There was an internal SDK issue that caused the Future to fail.
} else {
// Future completed successfully. Check the GMA result.
const AdResult* ad_result = future.result();
if ( ad_result->is_successful() != true ) {
// GMA failed to serve an ad. Gather information about the error.
const AdError& ad_error = ad_result->ad_error();
AdErrorCode error_code = ad_error.code();
const std::string error_domain = ad_error.domain();
const std::string error_message = ad_error.message();
} else {
// The ad loaded successfully.
}
}
}
}
Eventos AdListener
no AdView
A classe BannerView::Listener
da AdMob foi substituída por duas classes de ouvinte distintas no SDK C++ dos anúncios para dispositivos móveis do Google:
-
AdListener
rastreia o ciclo de vida do anúncio e eventos de interação do usuário. -
AdViewBoundingBoxListener
é invocado quando oAdView
é redimensionado ou movido.
Mapeamentos de anúncios para celular do Google de retorno de chamada AdMob OnPresentationStateChanged
O tipo enumerado firebase::admob::BannerView::PresentationState
e o método de ouvinte OnPresentationStateChanged
não estão incluídos no novo SDK C++ dos anúncios para dispositivos móveis do Google.
A seguir estão formas alternativas de detectar mudanças no estado de apresentação no ciclo de vida de um AdView
:
evento firebase::admob::BannerView::Listener OnPresentationStateChanged | contraparte firebase::gma::AdListener |
---|---|
kPresentationStateHidden | Quando AdListener::OnAdClosed é invocado ou quando AdView::Hide() conclui sua operação assíncrona com sucesso |
kPresentationStateVisibleWithoutAd | Nenhum. Tentar invocar AdView::Show() um AdView descarregado resultará em um erro. |
kPresentationStateVisibleWithAd | Quando AdListener::OnAdOpened é invocado ou quando AdView::Show() conclui sua operação assíncrona com sucesso com um anúncio |
kPresentationStateOpenedPartialOverlay | Consulte a caixa delimitadora após AdListener::OnAdOpened() ter sido invocado para determinar o tamanho e a posição do anúncio que está sendo exibido. Como alternativa, consulte a posição e AdSize do AdView e/ou monitore a caixa delimitadora por meio de AdViewBoundingBoxListener . |
kPresentationStateCoveringUI | Consulte kPresentationStateOpenedPartialOverlay acima |
RewardedAd
agora é uma classe
O SDK C++ da AdMob do Firebase obsoleto facilitou anúncios premiados por meio de uma coleção de funções no namespace firebase::admob::rewarded_ad
. Essas funções foram reunidas em uma nova classe RewardedAd
que veicula anúncios com uma superfície de API semelhante à InterstitialAd
(veja a próxima seção).
Ouvintes InterstitialAd
e RewardedAd
Tanto os anúncios intersticiais quanto os anúncios premiados são considerados anúncios em tela inteira. Um novo FullScreenContentListener
pode ser instalado para ouvir eventos do ciclo de vida do anúncio para esses tipos de anúncio, e um PaidEventListener
separado pode ser instalado para rastrear quando o serviço da AdMob considera que ocorreu um evento pago.
RewardedAd
tem um ouvinte adicional para monitorar eventos de recompensa ganhos pelo usuário.
Novos métodos de retorno de chamada de anúncio em tela cheia
Métodos FullScreenContentListener | Métodos PaidEventListener | Métodos UserEarnedRewardListener |
---|---|---|
OnAdClicked | OnPaidEvent | OnUserEarnedReward |
OnAdDismissedFullScreenContent | ||
OnAdFailedToShowFullScreenContent | ||
OnAdImpression | ||
OnAdShowedFullScreenContent |
Métodos alterados/removidos/substituídos
A tabela abaixo lista os métodos específicos alterados no novo SDK C++ dos anúncios para dispositivos móveis do Google. Os métodos com parâmetros listados permanecem, mas suas assinaturas foram alteradas.
Aula | API do SDK C++ da AdMob do Firebase | API C++ SDK de anúncios para dispositivos móveis do Google | Notas |
---|---|---|---|
BannerView | MoveTo | AdView::SetPosition | |
presentation_state | Removido | Manipulado por eventos AdViewListener e AdView::Show e AdView::Hide resultados futuros. | |
SetListener | AdView::SetAdListener AdView::SetBoundingBoxListener AdView::SetPaidEventListener | O novo design do ouvinte aumenta a fidelidade na detecção de eventos do ciclo de vida AdView . | |
Listener::OnPresentationStateChanged | Removido | Veja BannerView::SetListener , acima. | |
Listener::OnBoundingBoxChanged | AdViewBoundingBoxListener::OnBoundingBoxChanged | ||
Anúncio intersticial | Initialize(AdParent parent, const char* ad_unit_id) | Initialize(AdParent parent) | O parâmetro ad_unit_id agora faz parte da operação LoadAd . |
LoadAd(const AdRequest& request) | LoadAd(const char* ad_unit_id, const AdRequest& request) | ||
presentation_state | Removido | A enumeração presentation_state foi removida. Utilize FullScreenContentListener . | |
SetListener | SetFullScreenContentListener SetPaidEventListener | ||
Destroy | Removido | A limpeza de recursos agora faz parte do destruidor RewardedAd . | |
RewardedAd (formalmente RewardedVideoAd ) | Initialize | Initialize(AdParent parent) | AdParent foi passado anteriormente para Show , mas agora faz parte da inicialização. |
presentation_state | Removido | A enumeração presentation_state foi removida. Utilize FullScreenContentListener . | |
SetListener | SetFullScreenContentListener Show SetPaidEventListener | Um ouvinte UserEarnedReward também é definido ao mostrar um RewardedAd . Veja abaixo. | |
Show(AdParent parent) | Show(UserEarnedRewardListener* listener) |