Cocos Creator Android 平台接入 Google Firebase (Analytics功能)

2023-11-15



在项目推广运营过程中,经常有分析用户行为的需求,如用户安装、注册、充值等事件。因此需要接入Google Firebase(Analytics功能)。下面以 Android 平台接入为例,进行详细说明。



一、准备工作


1、应用targetSdkVersion大于等于16

2、Gradle版本为4.1及以上

3、使用 Jetpack (AndroidX),同时需要满足以下版本要求:

  • com.android.tools.build:gradle 3.2.1 版或更高版本
  • compileSdkVersion 28 或更高版本

4、需要在设备或模拟器上安装 Google Play 服务

5、Google开发者账号,登录Firebase开发者控制台



二、使用Firebase开发者控制台接入步骤


第1步, 创建Firebase项目


先创建一个 Firebase 项目,并将其关联到 Android 应用,然后将 Firebase 添加到 Android 应用。

(1)、在 Firebase 控制台中,点击创建项目,然后输入项目名称

在这里插入图片描述

在这里插入图片描述



(2)、Firebase 会自动为项目分配一个唯一 ID



在这里插入图片描述



(3)、在 Firebase 控制台中启用 google analytics ,点击继续下一步设置

在这里插入图片描述



(4)、在 Firebase 控制台中选择国家地区,然后点击创建项目

在这里插入图片描述

在这里插入图片描述



(5)、点击继续,完成项目创建

在这里插入图片描述

在这里插入图片描述



第2步, 在Firebase项中注册应用


(1)、在 Firebase 控制台的项目概览页面的中心位置,点击 Android 图标以启动设置工作流。



在这里插入图片描述



(2)、填入包名、显示名、sha-1 证书,点击 注册 app

在这里插入图片描述



(3)、点击 下载 google-services.json ,获取配置文件,点击继续回到控制台,完成注册。

在这里插入图片描述



第3步,添加 Firebase 配置文件


(1)、将获取到的 google-services.json 配置文件添加到应用

注意:需要添加到应用的模块(app)目录下



在这里插入图片描述



(2)、添加Firebase SDK



A、在项目根目录 (Project) build.gradle 中添加如下内容:

dependencies {
     classpath 'com.google.gms:google-services:4.3.8'
    // ...
}


在这里插入图片描述



B、在应用级(app/build.gradle)中,添加如下内容:

apply plugin: 'com.google.gms.google-services'

dependencies {

 implementation platform('com.google.firebase:firebase-bom:28.3.0')
 
}


在这里插入图片描述

在这里插入图片描述



(3)、添加 Google Analytics(事件上报及分析)



A、在应用级(app/build.gradle)中,添加如下内容:



implementation 'com.google.firebase:firebase-analytics' 


在这里插入图片描述



B、 添加网络权限,已添加则忽略。

<uses-permission android:name="android.permission.INTERNET" />


C、java 封装事件上报接口,支持注册、登录、充值事件

    public static void sendFireBaseEvent(final String a_name,final String a_json){
        Log.d(TAG, "sendFireBaseEvent:" + a_name + ":"+ a_json);
        if (TextUtils.isEmpty(a_name)) {
            Log.e(TAG, "sendFireBaseEvent. a_name isnull ");
            return;
        }
        final Bundle params = new Bundle();
        if (!TextUtils.isEmpty(a_json)) {
            try {
                JSONObject jsonObj = new JSONObject(a_json);
                if(a_name.equals(FirebaseAnalytics.Event.PURCHASE)){
                    String uid = jsonObj.get("af_content_id").toString();
                    double amount = jsonObj.getDouble("af_revenue");
                    String currency = jsonObj.get("af_currency").toString();
                    String content_type = jsonObj.get("af_content_type").toString();
                    params.putString("uid", uid);
                    params.putDouble(FirebaseAnalytics.Param.VALUE, amount);
                    params.putString(FirebaseAnalytics.Param.CURRENCY, currency);
                    params.putString(FirebaseAnalytics.Param.CONTENT_TYPE, content_type);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        FirebaseAnalytics.getInstance(Application.getContext()).logEvent(a_name, params);
    }
    
    
    


D、ts 或js 代码封装 java 接口

  
export class Native {
   private static ApiAndroid: string = "org/cocos2dx/javascript/Native";
   private static ApiIOS: string = "AppController";
   
   public static sendFireBaseEvent(eventName: string, jsonStr: string = ""): string {

        // cc.log("sendAFEvent",eventName,JSON.stringify(jsonStr))
        let ret = "";
        if (cc.sys.isBrowser) {
        } else if (cc.sys.isNative) {
            if (cc.sys.os == cc.sys.OS_ANDROID) {
                ret = jsb.reflection.callStaticMethod(Native.ApiAndroid, "sendFireBaseEvent", "(Ljava/lang/String;Ljava/lang/String;)V",
                    eventName, jsonStr);
            }
            else if (cc.sys.os == cc.sys.OS_IOS) {
                // ret = jsb.reflection.callStaticMethod(Native.ApiIOS, "sendFireBaseEvent", null);
            }
        }
        return ret;
    }

}


E、ts 或js 代码中,使用注册、登录、充值事件上报

export enum FireBase_EVENT_ENUM {
    LOGIN = "login",
    REGIST = "sign_up",
    PURCHASE = "purchase",
}


Native.sendFireBaseEvent(FireBase_EVENT_ENUM.REGIST)
Native.sendFireBaseEvent(FireBase_EVENT_ENUM.LOGIN)
 
sendRechargeEvent(a_gold: number) {
        let afEventJson = JSON.stringify({
            "af_revenue": a_gold,
            "af_content_type": "web_pay",
            "af_content_id": PlayerInfo.get("dwUserID"),
            "af_currency": "INR",
        })
       console.log("上报充值事件", afEventJson)
      Native.sendFireBaseEvent(FireBase_EVENT_ENUM.PURCHASE, afEventJson) 
}
    


(3)、DebugView模式下测试



为什么要采用DebugView模式下测试?

这是因为正常事件上报有一定的延迟,不能进行实时反馈,采用DebugView 可以实时展示上报事件在控制台界面上。



首先,启动调试模式

adb shell setprop debug.firebase.analytics.app  com.example.test


然后,在控制台开启DebugView



在这里插入图片描述



如果接入ok,DebugView界面左上角会显示测试手机的型号:



在这里插入图片描述



如上图所示,DebugView模式下有数据,则说明 Firebase sdk接入就没什么问题。



如果没有显示手机型号可尝试以下操作:

  • 检测启动调试模式的adb命令是否正确

  • 检查测试设备是否开启了USB调试

  • 检查测试设备是否能访问google相关网站(科学上网)

  • 检查目标设备是否安装 google 服务



至此, Cocos Creator Android 平台接入 Google Firebase (Analytics功能) 流程结束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cocos Creator Android 平台接入 Google Firebase (Analytics功能) 的相关文章

  • java JFileChooser 文件大小过滤器

    我知道我可以按文件类型进行过滤 但是可以按文件大小进行过滤吗 例如 JFileChooser 仅显示 3 MB 以内的图片 简短的回答应该是 你尝试过什么 长答案是肯定的 JFileChooser fc new JFileChooser f
  • android 从图库中选择图像

    我想从图库创建一个图片选择器 我使用代码 intent new Intent Intent ACTION PICK android provider MediaStore Images Media EXTERNAL CONTENT URI
  • Java G1 GC 处理引用对象运行缓慢

    我已经在 J ava 上运行了计数器 它24小时工作 每秒点击通过100次左右 白天 GC 处理时间从 20 60 毫秒缓慢上升到 10000 60000 毫秒 然后下降到 20 60 毫秒 这种模式不时地重复 从 GC 日志中我发现 GC
  • java 属性文件作为枚举

    是否可以将属性文件转换为枚举 我有一个包含很多设置的属性文件 例如 equipment height equipment widht equipment depth and many more like this and not all a
  • 嵌入式 tomcat 7 servlet 3.0 注释不起作用

    我有一个精简的测试项目 其中包含 Servlet 版本 3 0 用注释声明 如下所示 WebServlet test public class TestServlet extends HttpServlet private static f
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • 如何在高速缓存中存储图像

    我对此完全空白 我想从 URL 下载图像 并且必须将其存储在内部 以便下次我不需要连接到网络 而是从缓存中检索它 但我不知道该怎么做 谁能帮我提供一个代码片段 import java io BufferedInputStream impor
  • 存储过程将多个表返回到 spring jdbc 模板

    我正在使用 JdbcTemplate 从 Spring DAO 类调用存储过程 我的问题是 存储过程返回多个表 有没有办法使用 Spring JdbcTemplate 访问多个表 如果我使用jdbcTemplate queryForList
  • @TestPropertySource 不适用于 Spring 1.2.6 中使用 AnnotationConfigContextLoader 的 JUnit 测试

    似乎我在 Spring 4 1 17 中使用 Spring Boot 1 2 6 RELEASE 所做的任何事情都不起作用 我只想访问应用程序属性并在必要时通过测试覆盖它们 无需使用 hack 手动注入 PropertySource 这不行
  • DeadSystemException启动服务Android 7

    在过去的几周里 我在我的事故报告中看到 Fatal Exception java lang RuntimeException Unable to start service com MyService ef705d8 with Intent
  • java中的比较器链

    正在阅读Oracle 关于接口的 Java 教程 https docs oracle com javase tutorial java IandI createinterface html其中给出了一个例子Card 打牌 我试图理解接口中的
  • 使用 Maven 3 时 Cobertura 代码覆盖率为 0%

    读完这篇文章后 将 Cobertura 与 Maven 3 0 2 一起使用的正确方法是什么 https stackoverflow com questions 6931360 what is the proper way to use c
  • Scala repl 抛出错误

    当我打字时scala在终端上启动 repl 它会抛出此错误 scala gt init error error while loading AnnotatedElement class file usr lib jvm java 8 ora
  • 防止 Firebase 中的待处理写入事务不起作用

    我的目标是在单击按钮时将名称插入 Cloud Firestore 中 但如果用户未连接到互联网 我不希望保存处于挂起状态 我不喜欢 Firebase 保存待处理写入的行为 即使互联网连接已恢复 我研究发现Firebase 开发人员建议使用事
  • Java SE + Spring Data + Hibernate

    我正在尝试使用 Spring Data Hibernate 启动 Java SE 应用程序 并且到目前为止已经完成了以下操作 配置文件 Configuration PropertySource classpath hibernate pro
  • JDK 7 的快速调试/调试构建

    我正在寻找 JDK 的调试 或者我猜他们称之为快速调试构建 以启用在运行时生成的打印程序集以及查找性能问题时所需的其他诊断 就目前情况而言 我似乎找不到可以直接使用的 现成的 快速调试构建二进制包 有人可以帮我提供下载链接 或者至少提供有关
  • ActionBar 中的进度条

    我正在使用一个应用程序 它将在应用程序内部加载一个网站 现在我想在操作栏中添加一个进度栏 而无需向上滑动来抑制功能 像那样 我在用Fragment在我的应用程序中 WebviewFragment public class WebviewFr
  • Java泛型类型

    当我有一个界面时 public interface Foo
  • 使用 Android 的 Mobile Vision API 扫描二维码

    我跟着这个tutorial http code tutsplus com tutorials reading qr codes using the mobile vision api cms 24680关于如何构建可以扫描二维码的 Andr
  • 将隐藏(生物识别)数据附加到 pdf 上的数字签名

    我想知道是否可以使用 iText 我用于签名 或 Java 中的其他工具在 pdf 上添加生物识别数据 我会更好地解释一下 在手写板上签名时 我会收集签名信息 例如笔压 签名速度等 我想将这些信息 java中的变量 与pdf上的签名一起存储

随机推荐

  • python入门--抓取网页文字

    要抓取网页文字 我们需要使用Python的一个库 叫做requests 这个库可以帮助我们向网站发送请求 获取网站的内容 下面是一个简单的示例代码 用于抓取一个网页的文字 import requests import re import o
  • 车联网总结

    一句话 根据车联网产业技术创新战略联盟的定义 车联网是以车内网 车际网和车载移动互联网为基础 按照约定的通信协议和数据交互标准 在车 X X 车 路 行人及互联网等 之间 进行无线通讯和信息交换的大系统网络 是能够实现智能化交通管理 智能动
  • linux下删除asm磁盘,Linux平台下Oracle ASM磁盘组添加磁盘

    以下为Linux平台下Oracle ASM磁盘组添加磁盘的主要操作 多路进软件使用的是HDS的 一 操作系统设置 1 从存储映射磁盘到服务器 然后重启 扫描磁盘 opt D bin dlnkmgr view lu 2 扫描到新的磁盘后 两个
  • 递归递归递归

    function DG htmlDom n n for var i 0 i lt htmlDom length i var navSubmenu htmlDom i nav submenu var item htmlDom i if nav
  • 2023年Java面试题_Mongodb

    Index Mongodb 1 基本概念 1 1 文档 1 2 集合 1 3 数据类型 1 4 id 和 ObjectId 2 基本操作 3 索引介绍 4 应用场景 4 1 MySQL VS MongoDB 4 2 应用场景 4 3 压测结
  • MySQL——关系型数据库管理系统

    目录 01 数据库 02 SQL 结构化查询语言 关于SQL语句的分类 03 MySQL常用命令 1 退出mysql exit 2 查看mysql中有哪些数据库 3 选择使用某个数据库 4 创建数据库 5 查看某个数据库下有哪些表 6 查看
  • 操作系统读书笔记- 01 x86系统架构概览.md-html

    x86系统架构概览 真看不懂了 今天就写这些吧 2 0 处理器工作模式 一般来讲 x86 64处理器具有5种工作模式 实模式 Real address Mode 处理器以16位8086的方式工作 只能以简单的段地址 偏移地址方式进行寻址 地
  • 在Javascript中怎样判断用户按下的是回车键?

  • 本地chrome,访问(超链接跳转)本地文件解决方案

    问题和背景描述 1 用html php写了一个脚本 先从数据库中获取pdf文件的路径 然后将这个路径映射成一个html中的超链接 但是我在浏览器中点击这个超链接 死活跳转不了 2 经过多方调查 和搜索 最终找到了问题的原因 chrome中有
  • Java加密算法有几种?

    前言 编程中常见的加密算法有以下几种 你都知道是哪些吗 它们在不同场景中分别有应用 除信息摘要算法外 其它加密方式都会需要密钥 密钥 密钥 key 又常称金钥 是指某个用来完成加密 解密 完整性验证等密码学应用的秘密信息 密钥分类 加解密中
  • centos7更换和升级JDK版本

    卸载 查询是否安装 jdk rpm qa grep jdk rpm qa grep java 卸载安装的 jdk yum y remove java yum 查询支持的版本 可以先更新一下 yum 源 以便支持最新版本 yum y upda
  • 机器学习之线性回归

    什么是线性回归 线性回归利 回归 程 函数 对 个或多个 变量 特征值 和因变量 标值 之间 关系进 建模的 种分析 式 一般只有一个特征值的称之为单变量回归 多个特征值的称之为多变量回归 线性回归 线性回归可以分为两类 线性关系和非线性关
  • Leetcode42.接雨水——双指针法

    文章目录 引入 双指针法 引入 本题是这样的 42 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图 计算按此排列的柱子 下雨之后能接多少雨水 题目给出的图片一眼就能了然题目要问的是什么 很明显 某一列能装多少水 取决于该列左
  • android ui状态栏高度,移动界面尺寸!安卓720*1280界面尺寸规范参考

    今天25学堂的老谭童鞋跟大家继续分享720 1080的界面设计尺寸规范 主要讲解 屏幕分辨 1280 720像素 720P APP界面设计规范 这样的手机又vivo智能收款机 三星Galaxy A5 华为荣耀等手机 这样的手机屏幕尺寸是 5
  • 4年经验来面试20K的测试岗,连基础都不会,还不如招应届生。。。

    公司前段时间缺人 也面了不少测试 结果竟然没有一个合适的 一开始瞄准的就是中级的水准 也没指望来大牛 提供的薪资在10 20k 面试的人很多 但平均水平很让人失望 看简历很多都是3 4年工作经验 但面试中 不提工具和编程 仅仅基础的技术很多
  • 解决Visual Studio设置C++标准 但是_cplusplus始终为199711

    目录 场景复现 Visual Studio官方说明 C 标准对应表 解决方案 方法一 恢复 cplusplus宏 方法二 使用 MSVC LANG宏 场景复现 我在VS2022偶然的一次测试C 标准开发环境 发现无论我怎么修改C 语言标准
  • List 集合 —— ArrayList

    ArrayList 简介 成员变量 构造方法 成员方法 增 删 其他 总结 参考 简介 ArrayList 是 Java 集合框架中比较常用的类 是用来存储数据的容器 可存储重复的元素 允许存储null值 底层基于数组实现容量大小动态变化
  • windows11安装cp210x驱动

    windows11安装cp210x驱动 1 第一步官网下载驱动 官网地址如下 CP210x USB to UART Bridge VCP Drivers Silicon Labs 第二步 解压文件夹并安装如图所示 3 第三步安装成功后会给你
  • mysql 建表 null,MySQL:唯一,但默认为NULL-创建表允许。允许插入多个NULL。为什么?...

    I ve just checked and it s allowed to create a table with a column that is NULL by default although it s a UNIQUE KEY at
  • Cocos Creator Android 平台接入 Google Firebase (Analytics功能)

    在项目推广运营过程中 经常有分析用户行为的需求 如用户安装 注册 充值等事件 因此需要接入Google Firebase Analytics功能 下面以 Android 平台接入为例 进行详细说明 一 准备工作 1 应用targetSdkV