Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Cocos2d-x

Hướng dẫn này trình bày cách bao gồm AdMob với Firebase vào dự án Cocos2d-x mới được tạo. Nếu bạn chưa có dự án, bạn có thể theo dõi bằng cách lấy các điều kiện tiên quyết và tạo một dự án cocos mới từ dòng lệnh:

cocos new MyGame -l cpp
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID ||
     CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
  ...
#endif

Điều kiện tiên quyết

Bạn phải cài đặt phần sau trên máy của mình:

  • Phiên bản mới nhất của Cocos2d-x
  • Python 2.7 trở lên
  • NDK r10d trở lên (chỉ bắt buộc để phát triển Android)
  • CocoaPods 1.0.0 trở lên (chỉ bắt buộc để phát triển iOS)

Tải xuống AdMob với Firebase C ++ SDK

Tải xuống Firebase C ++ SDK . Giải nén các tệp vào thư mục cấp cao nhất của dự án Cocos2d-x của bạn, cùng một thư mục chứa các proj.android-studioproj.ios_mac . Đặt tên cho thư mục firebase_cpp_sdk .

Thiết lập iOS

Các bước sau giải thích cách nhập SDK Firebase vào một dự án iOS Cocos2d-x mới được tạo.

  1. Làm theo các bước để Thêm Firebase vào ứng dụng của bạn . Sau khi hoàn thành, dự án Xcode của bạn bên trong thư mục proj.ios_mac/ sẽ tham chiếu đến tệp GoogleService-Info.plist .

  2. Tạo một Podfile trong thư mục proj.ios_mac/ của bạn với nội dung sau:

    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
    
  3. Chạy pod update để cài đặt CocoaPods và mở MyGame.xcworkspace theo hướng dẫn của CocoaPods. Tại thời điểm này, bạn đã có SDK iOS của Firebase và AdMob trong dự án của mình.

  4. CocoaPods đưa ra cảnh báo về việc thiếu $(inherited) trên một số thuộc tính. Đi tới cài đặt bản dựng cho mục tiêu MyGame-mobile trong Xcode và thêm $(inherited) vào cuối danh sách cho mỗi cài đặt bản dựng sau:

    • Cờ liên kết khác
    • Macro tiền xử lý
    • Đường dẫn Tìm kiếm Thư viện
  5. Trong khi bạn đang ở trong cài đặt bản dựng, hãy thêm $(PROJECT_DIR)/../firebase_cpp_sdk/frameworks/ios/universal vào Đường dẫn tìm kiếm khung của bạn và $(PROJECT_DIR)/../firebase_cpp_sdk/include vào Đường dẫn tìm kiếm tiêu đề của bạn.

  6. Tiếp theo, bạn cần bao gồm một tham chiếu đến các thư viện bạn muốn sử dụng. Nhấp chuột phải vào dự án của bạn và chọn Thêm tệp vào "MyGame" . Từ thư mục firebase_cpp_sdk/frameworks/ios/universal , chọn firebase.frameworkfirebase_admob.framework . Trước khi thêm các khung, hãy bỏ chọn tùy chọn Sao chép Mục nếu Cần . Cài đặt xây dựng mà bạn đã thêm ở bước trước cho Xcode biết nơi tìm các khung.

  7. Thêm GameController.framework vào Build Phases> Link Binary with Libraries .

  8. Làm theo hướng dẫn Bảo mật truyền tải ứng dụng của AdMob để đảm bảo tất cả quảng cáo hoạt động chính xác trên iOS 9 trở lên.

Điểm kiểm tra: Bạn sẽ có thể tạo và chạy ứng dụng iOS từ Xcode.

Bây giờ bạn đã thiết lập dự án iOS của mình với AdMob và Firebase được tích hợp. Bạn đã sẵn sàng để thiết lập dự án Android.

Thiết lập Android

Các bước sau giải thích cách nhập SDK Firebase vào một dự án Android Cocos2d-x mới được tạo.

  1. Mở proj.android-studio/app/jni/Android.mk và thêm các dòng được in đậm bên dưới. Đảm bảo đặt FIREBASE_CPP_SDK_DIR thành đường dẫn cục bộ đến Firebase C ++ SDK mà bạn vừa tải xuống.

    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
    
  2. Kiểm tra để đảm bảo rằng bạn vẫn có thể biên dịch ứng dụng Cocos của mình:

    cocos compile -p android --ap android-24 --android-studio --app-abi armeabi-v7a
    
  3. Làm theo các bước để Thêm Firebase vào ứng dụng của bạn nằm trong thư mục proj.android-studio/ .

  4. Bao gồm gói quảng cáo trong app/build.gradle của bạn:

    implementation 'com.google.firebase:firebase-ads:19.5.0'
    
  5. Kiểm tra để đảm bảo rằng bạn vẫn có thể biên dịch ứng dụng Cocos của mình:

    cocos compile -p android --ap android-42 --android-studio --app-abi armeabi-v7a
    

Dự án Android của bạn hiện tham chiếu đến các thành phần AdMob trong SDK Firebase C ++.

Tích hợp C ++

Giờ đây, các dự án iOS và Android của bạn đã được tham chiếu trong SDK Firebase C ++, bước tiếp theo là bắt đầu sử dụng SDK và tải một số quảng cáo.

Khởi tạo Firebase và AdMob

Bạn nên khởi chạy Firebase và AdMob càng sớm càng tốt trong vòng đời ứng dụng của mình. Nơi tự nhiên nhất để thêm mã khởi tạo này cho dự án Cocos2d-x là trong tệp 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;
}

Trên Android, việc tạo ứng dụng Firebase yêu cầu hoạt động và môi trường JNI. Mã mẫu ở trên sử dụng lớp JniHelper từ Cocos2d-x để cung cấp các tham số này.

Nhận một quảng cáo gốc

AdMob yêu cầu đối tượng firebase::admob::AdParent để khởi chạy từng định dạng quảng cáo. Đối tượng này tương ứng với Activity trên Android và UIView trên iOS. Lớp trợ giúp sau tạo một phương thức getAdParent() duy nhất trả về đối tượng thích hợp tùy thuộc vào nền tảng.

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
}

Thêm lớp FirebaseHelper này vào Thư mục Classes/ trong dự án của bạn. Đảm bảo thêm tệp này vào dự án Xcode cho iOS và cập nhật tệp nguồn cục bộ trong Android.mk cho Android của bạn:

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../../Classes/AppDelegate.cpp \
                   ../../../Classes/HelloWorldScene.cpp \
                   ../../../Classes/FirebaseHelper.cpp

Tải quảng cáo biểu ngữ

Dưới đây là một ví dụ đầy đủ về cách tải quảng cáo biểu ngữ, sử dụng phương thức getAdParent() được xác định ở trên.

#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);
    }
  }
}

Cái gì tiếp theo

Giờ bạn đã tích hợp Firebase với AdMob SDK vào dự án Cocos2d-x của mình, bạn có thể Tương tác với SDK quảng cáo trên thiết bị di động của Google và triển khai định dạng ưa thích của mình: