(官方)(新)cocos2d-x 接Firebase &Admob

(官方)(新)cocos2d-x 接Firebase &Admob,第1张

概述这里写链接内容 Cocos2d-x 本指南将演示如何将结合了 Firebase 的 AdMob 添加到新建的 Cocos2d-x 项目中。如果您还没有项目,则应先满足前提条件,然后再通过命令行新建一个 cocos 项目: cocos new MyGame -l cpp 注意:AdMob 仅支持为 Android 和 iOS 构建的 Cocos2d-x 应用。桌面应用不受支持。本指南假定您只开发适用

这里写链接内容

Cocos2d-x

本指南将演示如何将结合了 Firebase 的 AdMob 添加到新建的 Cocos2d-x 项目中。如果您还没有项目,则应先满足前提条件,然后再通过命令行新建一个 cocos 项目:

cocos new MyGame -l cpp
注意:AdMob 仅支持为 AndroID 和 iOS 构建的 Cocos2d-x 应用。桌面应用不受支持。本指南假定您只开发适用于 AndroID/iOS 的 Cocos 应用,但您可以使用以下 #if 指令封装完整的 AdMob 集成,以确保其仅在移动应用环境中执行:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID ||     CC_TARGET_PLATFORM == CC_PLATFORM_IOS)  ...#endif

前提条件

您的设备上必须安装以下工具:

最新版本的 Cocos2d-x
Python 2.7 或更高版本
NDK r10d 或更高版本(仅 AndroID 开发需要)
CocoaPods 1.0.0 或更高版本(仅 iOS 开发需要)
获取 AdMob 和 Firebase C++ SDK

下载 Firebase C++ SDK。将文件解压缩到 Cocos2d-x 项目的顶级目录中,此目录包含您的 proj.androID-studio 目录和 proj.ios_mac 目录。将文件夹命名为 firebase_cpp_sdk。

设置 iOS

以下步骤说明了如何将 Firebase SDK 导入到新建的 Cocos2d-x iOS 项目中。

按照相应步骤将 Firebase 添加至您的应用。完成之后,proj.ios_mac/ 目录中的 Xcode 项目应该会引用 GoogleService-Info.pList 文件。
在您的 proj.ios_mac/ 目录中创建一个 Podfile,其中包含以下内容:

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

运行 pod update 以安装 CocoaPods,然后按照 CocoaPods 的说明打开 MyGame.xcworkspace。此时,您的项目中已包含 Firebase 和 AdMob iOS SDK。
CocoaPods 会发出有关一些属性缺少 $(inherited) 的警告。转到 Xcode 中 MyGame 移动应用目标的构建设置,然后将 $(inherited) 添加到以下每个构建设置的列表底部:

Other linker Flags Preprocessor Macros library Search Paths

在构建设置中,将 $(PROJECT_DIR)/../firebase_cpp_sdk/frameworks/ios/universal 添加到 Framework Search Paths,将 $(PROJECT_DIR)/../firebase_cpp_sdk/include 添加到 header Search Paths。
接下来,您需添加对要使用的库的引用。右键点击您的项目,然后选择 Add files to “MyGame”。在 firebase_cpp_sdk/frameworks/ios/universal 目录中,选择 firebase.framework 和 firebase_admob.framework。在添加相应框架之前,取消选中 copy Items if Needed 选项。通过您在上一步中添加的构建设置,Xcode 可了解在哪里找到这些框架。
将 GameController.framework 添加至 Build Phases > link Binary with librarIEs。
按照 AdMob 的应用传输安全指南来 *** 作,确保所有广告都能在 iOS 9 及更高版本上正常运行。
检查点:您应该能从 Xcode 构建和运行 iOS 应用。

注意:使用 CocoaPods 的副作用是,您将无法再在命令行中使用 cocos run -p 构建 iOS 应用。
现在,您的 iOS 项目已经与 AdMob 和 Firebase 相集成。 您可以设置 AndroID 项目了。

设置 AndroID

以下步骤说明了如何将 Firebase SDK 导入到新建的 Cocos2d-x AndroID 项目中。

打开 proj.androID-studio/app/jni/AndroID.mk,然后添加下方以粗体显示的各行内容。确保将 FIREBASE_CPP_SDK_DIR 设置为您刚下载的 Firebase C++ SDK 的本地路径。

LOCAL_PATH := $(call my-dir)# The path to the Firebase C++ SDK,in the project's root directory.FIREBASE_CPP_SDK_DIR := ../../../firebase_cpp_sdkAPP_ABI := armeabi-v7a x86STL := $(firstword $(subst _,$(APP_STL)))FIREBASE_liBRARY_PATH := $(FIREBASE_CPP_SDK_DIR)/libs/androID/$(TARGET_ARCH_ABI)/$(STL)include $(CLEAR_VARS)LOCAL_MODulE := firebase_appLOCAL_SRC_fileS := $(FIREBASE_liBRARY_PATH)/libapp.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(FIREBASE_CPP_SDK_DIR)/includeinclude $(PREBUILT_STATIC_liBRARY)include $(CLEAR_VARS)LOCAL_MODulE := firebase_featureLOCAL_SRC_fileS := $(FIREBASE_liBRARY_PATH)/libadmob.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/$(FIREBASE_CPP_SDK_DIR)/includeinclude $(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_sharedLOCAL_MODulE_filename := libmyGameLOCAL_SRC_fileS := hellocpp/main.cpp \               ../../../Classes/AppDelegate.cpp \               ../../../Classes/HelloWorldScene.cppLOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Classes# _COCOS_header_ANDROID_BEGIN# _COCOS_header_ANDROID_ENDLOCAL_STATIC_liBRARIES := cocos2dx_staticLOCAL_STATIC_liBRARIES += firebase_appLOCAL_STATIC_liBRARIES += firebase_feature# _COCOS_liB_ANDROID_BEGIN# _COCOS_liB_ANDROID_ENDinclude $(BUILD_SHARED_liBRARY)$(call import-@H_301_301@module,.)# _COCOS_liB_import_ANDROID_BEGIN# _COCOS_liB_import_ANDROID_END

检查您是否仍能编译 Cocos 应用:

cocos compile -p androID –ap androID-24 –androID-studio –app-abi armeabi-v7a
按照相应步骤将 Firebase 添加至您的应用(此应用位于 proj.androID-studio/ 目录中)。
在您的 app/build.gradle 中添加广告包:

compile ‘com.Google.firebase:firebase-ads:11.0.4’
检查您是否仍能编译 Cocos 应用:

cocos compile -p androID –ap androID-42 –androID-studio –app-abi armeabi-v7a
您的 AndroID 项目现在已经引用 Firebase C++ SDK 中的 AdMob 组件。

C++ 集成

现在,您的 iOS 和 AndroID 项目已在 Firebase C++ SDK 中被引用,接下来便是开始使用 SDK 并加载一些广告。

初始化 Firebase 和 AdMob

建议您在应用生命周期中尽早初始化 Firebase 和 AdMob。要为 Cocos2d-x 项目添加这个初始化代码,最自然的地方是在 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 @H_403_427@true;}

在 AndroID 上,创建 Firebase 应用需要一个 JNI 环境和 Activity。上面的示例代码使用 Cocos2d-x 中的 JniHelper 类来提供这些参数。

获取广告父级对象

AdMob 需要 firebase::admob::AdParent 对象来初始化每种广告格式。此对象对应于 AndroID 上的 Activity 和 iOS 上的 UIVIEw。以下辅助类会创建单个 getAdParent() 方法,该方法可根据平台返回相应对象。

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"#endifUSING_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}将此 FirebaseHelper 类添加到项目的 Classes/ 文件夹中。确保将此文件添加到适用于 iOS 的 Xcode 项目中,并为 AndroID 更新 AndroID.mk 中的本地源文件:LOCAL_SRC_fileS := hellocpp/main.cpp \                   ../../../Classes/AppDelegate.cpp \                   ../../../Classes/HelloWorldScene.cpp \                   ../../../Classes/FirebaseHelper.cpp

加载横幅广告

以下示例完整地演示了如何使用上文定义的 getAdParent() 方法加载横幅广告。

#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"#endifUSING_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 = @H_403_427@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 @H_403_427@true;}@H_403_427@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);    }  }}
总结

以上是内存溢出为你收集整理的(官方)(新)cocos2d-x 接Firebase &Admob全部内容,希望文章能够帮你解决(官方)(新)cocos2d-x 接Firebase &Admob所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1085148.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存