Este guia demonstra como incluir a AdMob com o Firebase em um projeto Cocos2d-x recém-criado. Se você ainda não tem um projeto, pode acompanhar conseguindo os pré-requisitos e criando um novo projeto cocos na linha de comando:
cocos new MyGame -l cpp
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS) ... #endif
Pré-requisitos
Você precisa ter instalado o seguinte em sua máquina:
- a última versão do Cocos2d-x
- Python 2.7 ou posterior
- NDK r10d ou posterior (apenas necessário para desenvolvimento em Android)
- CocoaPods 1.0.0 ou posterior (apenas necessário para desenvolvimento em iOS)
Fazer download da AdMob com o SDK do Firebase para C++
Faça o download do
SDK do Firebase para C++.
Extraia os arquivos no diretório de nível superior do projeto Cocos2d-x, o mesmo diretório que contém os diretórios proj.android-studio
e proj.ios_mac
. Dê um nome à pasta firebase_cpp_sdk
.
Configurar iOS
As etapas a seguir explicam como importar o SDK do Firebase para um projeto Cocos2d-x iOS recém-criado.
Siga as etapas para adicionar o Firebase ao seu app. Depois de concluído, seu projeto Xcode dentro do diretório
proj.ios_mac/
deve fazer referência a um arquivoGoogleService-Info.plist
.Crie um Podfile no diretório
proj.ios_mac/
com o seguinte conteúdo:source 'https://github.com/CocoaPods/Specs.git' platform :ios, '7.0' # Replace "MyGame" with the name of your game. target 'MyGame-mobile' do pod 'Firebase' pod 'Firebase/AdMob' end
Execute
pod update
para instalar o CocoaPods e abra oMyGame.xcworkspace
conforme instruído pelo CocoaPods. Neste momento, você tem o SDK do Firebase para iOS e o SDK dos anúncios para dispositivos móveis do Google incluídos no projeto.O CocoaPods fornece avisos sobre
$(inherited)
ausente em algumas propriedades. Vá para as configurações de compilação do destino MyGame-mobile no Xcode e adicione$(inherited)
ao final da lista para cada uma das seguintes configurações de compilação:- Outras sinalizações de vinculador
- macros de pré-processador
- Caminhos de pesquisa de biblioteca
Enquanto estiver nas configurações de compilação, adicione
$(PROJECT_DIR)/../firebase_cpp_sdk/frameworks/ios/universal
aos Caminhos de pesquisa do framework e$(PROJECT_DIR)/../firebase_cpp_sdk/include
aos Caminhos de pesquisa de cabeçalho.Em seguida, você precisa incluir uma referência às bibliotecas que quer usar. Clique com o botão direito do mouse no projeto e selecione Adicionar arquivos a "MyGame". No diretório
firebase_cpp_sdk/frameworks/ios/universal
, selecionefirebase.framework
efirebase_admob.framework
. Antes de adicionar os frameworks, desmarque a opção Copiar itens se necessário. As configurações de compilação que você adicionou na etapa anterior permitem que o Xcode saiba onde encontrar as estruturas.Adicione
GameController.framework
a Fases de compilação > Vincular binário com bibliotecas.Siga o guia Segurança do transporte de apps da AdMob para garantir que todos os anúncios se comportem corretamente no iOS 9 e acima.
Checkpoint: é possível criar e executar o app iOS com base no Xcode.
Você configurou seu projeto para iOS com a AdMob e o Firebase integrados. Você está pronto para configurar o projeto do Android.
Configurar o Android
As etapas a seguir explicam como importar o SDK do Firebase para um projeto Cocos2d-x do Android recém-criado.
Abra seu
proj.android-studio/app/jni/Android.mk
e adicione as linhas exibidas em negrito abaixo. Certifique-se de configurarFIREBASE_CPP_SDK_DIR
como o caminho local para o SDK do Firebase para C++ que você acabou de transferir por download.LOCAL_PATH := $(call my-dir) # The path to the Firebase C++ SDK, in the project's root directory. FIREBASE_CPP_SDK_DIR := ../../../firebase_cpp_sdk APP_ABI := armeabi-v7a x86 STL := $(firstword $(subst _, ,$(APP_STL))) FIREBASE_LIBRARY_PATH := $(FIREBASE_CPP_SDK_DIR)/libs/android/$(TARGET_ARCH_ABI)/$(STL) include $(CLEAR_VARS) LOCAL_MODULE := firebase_app LOCAL_SRC_FILES := $(FIREBASE_LIBRARY_PATH)/libapp.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(FIREBASE_CPP_SDK_DIR)/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := firebase_feature LOCAL_SRC_FILES := $(FIREBASE_LIBRARY_PATH)/libadmob.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(FIREBASE_CPP_SDK_DIR)/include include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) $(call import-add-path,$(LOCAL_PATH)/../../../cocos2d) $(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/external) $(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/cocos) $(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/cocos/audio/include) LOCAL_MODULE := MyGame_shared LOCAL_MODULE_FILENAME := libMyGame LOCAL_SRC_FILES := hellocpp/main.cpp \ ../../../Classes/AppDelegate.cpp \ ../../../Classes/HelloWorldScene.cpp LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Classes # _COCOS_HEADER_ANDROID_BEGIN # _COCOS_HEADER_ANDROID_END LOCAL_STATIC_LIBRARIES := cocos2dx_static LOCAL_STATIC_LIBRARIES += firebase_app LOCAL_STATIC_LIBRARIES += firebase_feature # _COCOS_LIB_ANDROID_BEGIN # _COCOS_LIB_ANDROID_END include $(BUILD_SHARED_LIBRARY) $(call import-module,.) # _COCOS_LIB_IMPORT_ANDROID_BEGIN # _COCOS_LIB_IMPORT_ANDROID_END
Verifique se você ainda pode compilar o app Cocos:
cocos compile -p android --ap android-24 --android-studio --app-abi armeabi-v7a
Siga as etapas para adicionar o Firebase ao seu app localizado no diretório
proj.android-studio/
.Inclua o pacote de anúncios no seu
app/build.gradle
:implementation 'com.google.firebase:firebase-ads:21.0.0'
Verifique se você ainda pode compilar o app Cocos:
cocos compile -p android --ap android-42 --android-studio --app-abi armeabi-v7a
Seu projeto do Android agora faz referência aos componentes da AdMob no SDK do Firebase para C++.
Integração do C++
Agora que os projetos de iOS e Android são referenciados no SDK do Firebase para C++, o próximo passo é começar a usar o SDK e carregar alguns anúncios.
Inicializar o Firebase e a AdMob
Recomenda-se inicializar o Firebase e a AdMob o mais cedo possível no ciclo de vida do seu app. O local mais natural para adicionar esse código de inicialização para um projeto Cocos2d-x é no arquivo AppDelegate.cpp
:
AppDelegate.cpp
#include "firebase/app.h" #include "firebase/admob.h" USING_NS_CC; bool AppDelegate::applicationDidFinishLaunching() { ... #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) // Initialize Firebase for Android. firebase::App* app = firebase::App::Create( firebase::AppOptions(), JniHelper::getEnv(), JniHelper::getActivity()); // Initialize AdMob. firebase::admob::Initialize(*app, "INSERT_YOUR_ADMOB_ANDROID_APP_ID"); #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) // Initialize Firebase for iOS. firebase::App* app = firebase::App::Create(firebase::AppOptions()); // Initialize AdMob. firebase::admob::Initialize(*app, "INSERT_YOUR_ADMOB_IOS_APP_ID"); #endif // Initialize AdMob. firebase::admob::Initialize(*app); // Create a scene. it's an autorelease object. auto scene = HelloWorldScene::createScene(); // run director->runWithScene(scene); return true; }
No Android, a criação do app Firebase exige um ambiente e uma atividade JNI. O código de amostra acima usa a classe JniHelper
do Cocos2d-x para fornecer esses parâmetros.
Conseguir um anúncio pai
A AdMob requer um objeto firebase::admob::AdParent
para inicializar cada formato de anúncio. Esse objeto corresponde a um Activity
no Android e um UIView
no iOS. A classe auxiliar a seguir cria um único método getAdParent()
que retorna o objeto apropriado, dependendo da plataforma.
FirebaseHelper.h
#ifndef __FIREBASE_HELPER_H__
#define __FIREBASE_HELPER_H__
#include "firebase/admob/types.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
extern "C" {
#include <objc/objc.h>
} // extern "C"
#endif
// Returns a variable that describes the ad parent for the app. On Android
// this will be a JObject pointing to the Activity. On iOS, it's an ID pointing
// to the root view of the view controller.
firebase::admob::AdParent getAdParent();
#endif // __FIREBASE_HELPER_H__
FirebaseHelper.cpp
#include "FirebaseHelper.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"
#endif
USING_NS_CC;
firebase::admob::AdParent getAdParent() {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
// Returns the iOS RootViewController's main view (i.e. the EAGLView).
return (id)Director::getInstance()->getOpenGLView()->getEAGLView();
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
// Returns the Android Activity.
return JniHelper::getActivity();
#else
// A void* for any other environments.
return 0;
#endif
}
Adicione esta classe FirebaseHelper à pasta Classes/
do seu projeto.
Adicione este arquivo ao projeto do Xcode para iOS e atualize os arquivos fonte locais no Android.mk para Android:
LOCAL_SRC_FILES := hellocpp/main.cpp \ ../../../Classes/AppDelegate.cpp \ ../../../Classes/HelloWorldScene.cpp \ ../../../Classes/FirebaseHelper.cpp
Carregar um anúncio de banner
Veja abaixo um exemplo completo de como carregar um anúncio de banner usando o método getAdParent()
definido acima.
#include "FirebaseHelper.h"
#include "firebase/admob.h"
#include "firebase/admob/types.h"
#include "firebase/app.h"
#include "firebase/future.h"
#include "firebase/admob/banner_view.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <android/log.h>
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#endif
USING_NS_CC;
bool HelloWorld::init()
{
// General scene setup ...
#if defined(__ANDROID__)
// Android ad unit IDs.
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/6300978111";
#else
// iOS ad unit IDs.
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/2934735716";
#endif
// Create and initialize banner view.
firebase::admob::BannerView* banner_view;
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;
banner_view->Initialize(getAdParent(), kBannerAdUnit, ad_size);
// Schedule updates so that the Cocos2d-x update() method gets called.
this->scheduleUpdate();
return true;
}
void HelloWorld::update(float delta) {
// Check that the banner has been initialized.
if (banner_view->InitializeLastResult().status() ==
firebase::kFutureStatusComplete) {
// Check that the banner hasn't started loading.
if (banner_view->LoadAdLastResult().status() ==
firebase::kFutureStatusInvalid) {
// Make the banner visible and load an ad.
CCLOG("Loading a banner.");
banner_view->Show();
firebase::admob::AdRequest my_ad_request = {};
banner_view->LoadAd(my_ad_request);
}
}
}
A seguir
Agora que tem o Firebase com o SDK dos anúncios para dispositivos móveis integrado ao projeto Cocos2d-x, você pode interagir com o SDK dos anúncios para dispositivos móveis e implementar seu formato preferido: