实现firebase FCM和Analytics

news2024/10/7 13:19:59

前提:1.需要vpn 2.带有google 服务的手机
注意!!! 这个在2023年6月30日时还是测试版,所以手机有概率接收不到消息

编写代码前需要在https://console.firebase.google.com/ 配置好参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的token值需要填写代码内的initFCM()的token值测试

在这里插入图片描述
这里需要填入FirebaseInstallations.getInstance().getId().addOnCompleteListener()返回的id测试

需要引入的依赖
implementation platform(‘com.google.firebase:firebase-bom:32.1.1’)
implementation ‘com.google.firebase:firebase-analytics’
implementation ‘com.google.firebase:firebase-crashlytics’
implementation ‘com.google.firebase:firebase-config’
implementation ‘com.google.firebase:firebase-perf’
implementation ‘com.google.firebase:firebase-messaging’
implementation ‘com.google.firebase:firebase-inappmessaging-display’

    public static FirebaseRemoteConfig sRemoteConfig = null;

    public static FirebaseRemoteConfig getRemoteConfig() {
        if (sRemoteConfig == null) {
            sRemoteConfig = FirebaseRemoteConfig.getInstance();
        }
        return sRemoteConfig;
    }

    public static FirebaseAnalytics sAnalytics = null;
    public static FirebaseAnalytics getAnalytics() {
        if (sAnalytics == null) {
            sAnalytics = FirebaseAnalytics.getInstance(UIUtils.getContext());
        }
        return sAnalytics;
    }

    //    初始化firebase 配置
    public static void acquireRemoteConfig() {
        sRemoteConfig = getRemoteConfig();
        String confTime = sRemoteConfig.getString("remote_config_request_time");
        int cacheExpiration = Integer.parseInt(confTime.isEmpty() ? "12" : confTime) * 60 * 60;
        FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
                .setMinimumFetchIntervalInSeconds(cacheExpiration)
                .build();
        sRemoteConfig.setConfigSettingsAsync(configSettings);
        sRemoteConfig.setDefaultsAsync(R.xml.remote_config_default);
        sRemoteConfig.fetchAndActivate()
                .addOnCompleteListener(task -> {
                    if (task.isSuccessful()) {
                        Slog.d("fetchAndActivate  success");
                    }
                    // 是否初始化firebase的 In App Message功能
                    Boolean showInAppMessaging = FBRCUtils.getIsOpenInAppMessage();
                    FirebaseInAppMessaging.getInstance().setMessagesSuppressed(!showInAppMessaging);
                    Slog.d("fetchAndActivate  success="+showInAppMessaging);
                });

        // 实时RemoteConfig监听
        sRemoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() {
            @Override
            public void onUpdate(@NonNull ConfigUpdate configUpdate) {
                sRemoteConfig.fetchAndActivate().addOnCompleteListener (task -> {
                    if (task.isSuccessful()) {
                        Slog.d("fetchAndActivate  success");
                    } else {
                        Slog.d("fetchAndActivate  fail");
                    }
                });
            }

            @Override
            public void onError(@NonNull FirebaseRemoteConfigException error) {
                Slog.d("Config update error with code: " +  error);
            }
        });

    }
    private void initFCM() {
        FirebaseMessaging.getInstance().getToken().addOnCompleteListener( task -> {
                    if (!task.isSuccessful()) {
                        Slog.d("Fetching FCM registration token failed ${task.exception}");
                        return;
                    }
                    //TokenResult token = task.getResult();
                    Slog.d("Fetching FCM FirebaseMessaging token:{}\n"+task.getResult());
        });
    }
      FirebaseAnalytics firebaseAnalytics = OsportApplication.getAnalytics();
        if (!btdevice.isEmpty()) {
            firebaseAnalytics.setUserProperty("btdevice", btdevice);
            firebaseAnalytics.setUserProperty("protoID", protoID);
            firebaseAnalytics.setUserProperty("adapterID", adapterId);
            firebaseAnalytics.setUserProperty("curVersion", curVersion);
        }

     FirebaseInstallations.getInstance().getId().addOnCompleteListener(task -> {
                    if (task.isSuccessful()) {
                        Slog.d("Installation ID: " + task.getResult());
                        OsportApplication.serverParameter.setFiId(task.getResult());
                        Slog.d("serverParameter => ${OSportApplciation.serverParameter.toString()}");
                    } else {
                        Slog.e("Installations", "Unable to get Installation ID");
                    }
            }  );

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macOS 系统 安装 Kafka 快速入门

博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之…

神策(Android)- 集成基础埋点的整个过程

记得最早以前都是用友盟全家桶,埋点是用友盟,推送也是用友盟;但是近俩年我参与开发的app,埋点都是用神策、推送都是用极光私服,分享都是去对应集成对应平台的SDK 神策篇 神策(Android)- 集成基…

2023-6-30-第十二式组合模式

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

Linux的tmux的使用

0.前言 您好,这里是limou3434,本次我将给您带来Linux下tmux的使用。 如果您感兴趣也可以看看我的其他内容。 1.tmux的基础概念 tmux是一款在Linux里运行在终端上的软件,可以使得终端具有强大的多任务管理功能(以下是在Ubuntu环…

CSS知识点汇总(八)--Flexbox

1. flexbox(弹性盒布局模型)是什么,适用什么场景? 1. flexbox(弹性盒布局模型)是什么 Flexible Box 简称 flex,意为”弹性布局”,可以简便、完整、响应式地实现各种页面布局。采用…

Python高级教程:简单爬虫实践案例

学习目标 能够知道Web开发流程 能够掌握FastAPI实现访问多个指定网页 知道通过requests模块爬取图片 知道通过requests模块爬取GDP数据 能够用pyecharts实现饼图 能够知道logging日志的使用 一、基于FastAPI之Web站点开发 FastAPI是一个高性能、易于使用、快速编写API的…

新品亮相丨美格智能高性能Cat.1 bis模组SLM332X上市

6月29日,2023 MWC 上海世界移动通信大会火热进行中。展会现场,美格智能正式发布基于芯翼信息科技XY4100芯片平台研发的高性能4G LTE Cat.1 bis模组SLM332X。该产品可广泛应用于智能支付、智慧表计、共享经济、公网对讲机、定位追踪、智能穿戴、安防监控等…

Web3本地搭建truffle智能合约开发环境

之前的几篇文章 我们是成功的操作了我们本地区块链的 那么 本文 我们就来说说智能合约 啊 不容易啊 扯了这么久 终于到这了 智能合约是部署在区块链上 不可逆的 一种去中心化的程序,他没有任何第三方公司来管理这个程序和数据 然后 还有就是怎么连接到区块链上的智能…

基于Java星空游戏购买下载平台设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

浅谈基于微电网的智慧校园能耗监测系统的设计与产品应用

摘 要:针对高校教学建筑能效监管效率低的问题,从系统总体设计、分层设计、硬件系统设计、软件系统设计、功能测试等方面阐述了一种基于物联网技术的智慧校园建筑能效监管系统。通过对能耗监管系统关键功能的测试,测试效果良好,结果…

处理开发者账号到期导致APP下架的方处理开发者账号到期导致APP下架的方法

处理开发者账号到期导致APP下架的方处理开发者账号到期导致APP下架的方法 开发人员账号到期时,应采取以下步骤处理APP被下架问题: 登录开发者账号。点击右上角的"账户",选择"续费"。输入信用卡信息,确保使用…

Android应用卡顿监控方案原理和对比

作者:天才木木木木 0 介绍 要监控应用界面是否发生卡顿,需要先了解一下Android应用主线程的渲染机制: Android 系统提供一个稳定的帧率输出机制,让软件层和硬件层可以以共同的频率一起工作,使我们可以享受稳定帧率的画面。 大部…

多元分类预测 | Matlab鲸鱼算法(WOA)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,WOA-HKELM分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab鲸鱼算法(WOA)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,WOA-HKELM分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab…

超级实用!详解Node.js中的mongodb模块和socket.io模块

文章目录 9. mongodb 模块安装和引入连接数据库操作集合获取集合插入文档查询文档更新文档删除文档 关闭连接 10. socket.io 模块安装和引入监听连接事件监听自定义事件在服务器端监听事件在客户端触发事件 广播消息在服务器端广播消息在客户端监听广播消息 断开连接完整示例 9…

WPF 零基础入门笔记(3):数据绑定详解

文章目录 文章合集数据绑定数据绑定实战事件通知型数据驱动,双向绑定资源绑定数据源绑定全局数据源后端和前端绑定问题继承事件通知,刷新数据事件通知强制刷新(无效)结论: 文章合集 WPF基础知识博客专栏 WPF微软文档 …

365天深度学习训练营-第T4周:猴痘病识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 我的环境: 语言环境:Python3.10.7编译器:VScode深度学习环境:TensorFlow2 一、前期工作: 1、导入…

小白开酒吧前要知道的几个知识(一)

第一、团队建设如果决定开酒吧,除非你的资金充裕,否则都该寻找合伙人。共同的目标会让你和合伙人之间合作的更愉快,所以合伙人应该选择善于沟通交流的。选定靠谱的合伙人之后,应该建立一个大致的团队体系,在团队内做好…

CAD怎么转成清晰的图片?分享几种好用的转换方法

CAD文件通常需要特定软件才能打开和编辑,而将其转换为图片格式可以使其更加普遍地被浏览和共享。此外,由于图片通常具有较小的文件大小,因此转换为图片格式可以更快地上传和下载,可以方便地用于演示和分享。那么我们怎么把CAD文件…

Python进行单元测试是怎么做的?

前言 在我的日常工作中,我是一名专业程序员。我使用c、c#和Javascript。我是一个开发团队的一员,他们使用单元测试来验证我们的代码是否按照它应该的方式工作。 在本文中,我将通过讨论以下主题来研究如何使用Python创建单元测试。 单元测试…

一文详解Mac搭建Vulkan开发环境

本文为Vukan系列的第二篇文章,上一篇文章对Vulkan进行了简单介绍,并对其与OpenGL的优劣势进行了比较,为应用开发人员在选择图形API方面提供了建议。下边开始本文的主要内容,详细介绍在Mac操作系统中,如何搭建Vulkan开发…