”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 React Native (Android) 中实现推送通知

如何在 React Native (Android) 中实现推送通知

发布于2024-11-03
浏览:267

有没有想过我们从安装的应用程序收到的通知?或者 Swiggy 或 Zomato 如何通过其创意通知激发我们在凌晨 3 点点餐? ?

让我们深入了解通知的概念!

什么是通知?

A 通知是应用程序发送的消息或警报,用于通知用户有关更新、事件或操作的信息,通常在应用程序界面之外传递。

现在可以有两种类型的通知,如下所示 -

How to implement push notifications in React Native (Android)

推送通知

推送通知是当应用程序未在前台主动运行时从服务器发送到应用程序的消息或警报。它们主要用于通过发送更新、提醒或个性化内容来保持用户的参与度。推送通知通过操作系统服务传递,例如适用于 iOS 的 Apple 推送通知服务 (APN) 或适用于 Android 的 Firebase 云消息传递 (FCM)。

推送通知的工作原理:

  1. 注册:安装或首次打开应用程序时,应用程序会从操作系统的推送通知服务(APN 或 FCM)请求唯一的设备令牌。
  2. 服务器通信:应用程序将此令牌发送到应用程序的后端服务器,该服务器存储它以供将来使用。
  3. 发送通知:服务器使用设备令牌将通知有效负载(包含标题、消息、操作按钮等)发送到推送通知服务(APNs/FCM)。
  4. 传递:推送通知服务将消息传递到相应的设备,即使应用程序未运行。

应用内通知

应用程序内通知是在用户主动使用应用程序时向用户显示的消息或警报。与推送通知不同,这些通知不需要服务器干预,并且在应用程序本身内触发,通常是用户操作或应用程序事件的结果。

应用内通知的工作原理:

  1. 事件触发器:当应用内发生特定事件(例如用户达到里程碑或需要注意的功能)时,应用可以触发应用内通知。
  2. 显示:通知在应用程序的 UI 中显示为横幅、模式或弹出窗口,指导用户或告知他们有关事件的信息。
  3. 自定义逻辑:应用内通知由应用程序代码直接处理,并且可以根据应用程序的内部状态或逻辑动态显示。

React Native android 应用程序中的实现:

现在我们了解了通知及其类型,是时候在您自己的 React Native 应用程序中实现该功能了。本指南仅用于在 React 原生 Android 应用程序中实现推送通知,如果您想要 iOS 或应用程序内通知,请写下评论,我肯定会发布它!

首先,我们将使用名为 OneSignal 的第三方服务。我最近发现了这个平台,并对他们提供的服务感到震惊。

关于OneSignal:

How to implement push notifications in React Native (Android)

OneSignal 是一项推送通知服务,使应用程序开发人员能够跨各种平台(包括移动应用程序、网站和电子邮件)向用户发送有针对性的通知。它支持推送、应用内和 Web 通知,提供分段、自动化、A/B 测试和实时分析等功能。 OneSignal 广泛用于通过提供易于集成的发送个性化消息的解决方案来提高用户参与度和保留率。他们的免费套餐包括每月 10,000 次免费电子邮件发送、无限移动推送发送、旅程工作流程、GDPR 合规性、A/B 测试


回到指南,因为我们已经知道推送通知需要通过 FCM(Firebase 云消息传递)进行服务器端处理,因此需要遵循几个步骤:

  1. 设置 firebase 项目(如果您已经有 firebase 项目,请忽略前两个步骤):

    • 转到 firebase 控制台并登录您的帐户。
    • 从此处创建一个项目并按照以下步骤操作 How to implement push notifications in React Native (Android)
    • 创建项目后,从侧边栏转到项目设置 How to implement push notifications in React Native (Android)
    • 从栏导航到服务帐户,它应该如下所示 How to implement push notifications in React Native (Android)
    • 单击生成新的私钥,这将下载一个 json 文件,小心地将其存储在安全的地方,我们在设置 OneSignal 时将需要它。
  2. 设置 OneSignal

    • 前往 OneSignal 并创建一个帐户。
    • 创建帐户后,完成设置步骤并创建组织,现在,您将看到用于添加应用程序的页面。
    • 在此页面中提供您的应用程序名称,并为我们的案例选择 Google Android (FCM)How to implement push notifications in React Native (Android) 然后单击配置您的平台
    • 现在您将被重定向到此页面,我们将在其中使用在 Firebase 配置期间下载的服务帐户 json 文件 How to implement push notifications in React Native (Android) 上传json然后保存并继续
    • 在下一页选择 React Native/Expo 作为目标 SDK,然后再次保存并继续
    • 在下一个屏幕中,您将获得应用程序 ID,这是一个机密 ID,使用此 ID 任何人都可以在您的应用程序中触发通知,因此请小心这个秘密。

我们已经完成了 firebase 和 OneSignal 中的设置,现在剩下的唯一任务是一些 带有代码的咖啡

将 OneSignal 添加到您的应用程序并进行配置

  • 第 1 步:首先运行此命令将 OneSignal 添加到您的应用程序
                       npm i react-native-onesignal
  • 第 2 步:在您的 index.js 或 App.tsx 或 App.js(以项目根目录为准)中,导入 OneSignal
             import { OneSignal } from 'react-native-onesignal';

并且您已添加此代码片段来初始化 OneSignal

                    OneSignal.initialize('YOUR_APP_ID');

您可以将其包装在 useEffect 挂钩中,以便与 OneSignal 无缝集成和连接。

这将使用 OneSignal 的唯一 ID 初始化设备,您可以在侧边栏的订阅中进行检查。每个初始化的设备都将使用这个唯一的 OneSignal ID 进行标识,如果您的用户已经拥有自己的唯一 ID,您也可以使用以下代码片段手动设置它:

                         OneSignal.login(userId)

用户订阅成功后,会在仪表板中显示如下
How to implement push notifications in React Native (Android)

现在您可能会遇到 OneSignal 未正确使用的一些问题或一些严重错误,因此您可以遵循以下部分,这帮助我解决了这些问题。

  • 第 3 步:在 android\app\build.gradle 中添加此代码片段
dependencies{
...
implementation('com.onesignal:OneSignal:[3.15.4, 3.99.99]')
...
}
  • 第4步:在android中为推送通知提供必要的权限,在android\app\src\main\AndroidManifest.xml中添加
    

就在应用程序标签之前。 INTERNET 权限是可选的,但因为它可能默认启用。

繁荣?涵盖了实现推送通知的所有步骤,您可以从 OneSignal 仪表板本身发送测试通知。

自己尝试一下,如果有任何疑问,可以在下面评论。关注获取更详细攻略!

参考:
https://documentation.onesignal.com/docs/react-native-sdk-setup
https://documentation.onesignal.com/reference/push-notification
https://medium.com/tribalscale/mobile-push-notifications-implementation-in-react-native-with-one-signal-4e810dddd350

编码愉快!?‍?

版本声明 本文转载于:https://dev.to/dasswarup/how-to-implement-push-notifications-in-react-native-android-lll?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 降低性能的两行 CSS(fps 到 ps)
    降低性能的两行 CSS(fps 到 ps)
    我最近发布了《学习厕所》,如果您看过它,您可能会注意到背景中的动画,其中彩色圆圈在屏幕上对角移动。看起来像这样: 它在 Chrome 和 Safari 上运行良好,但我注意到 Firefox 上的性能严重下降。 性能太差了,我直接在 Firefox 中禁用了这个动画。 动...
    编程 发布于2024-11-03
  • 如何在 React 中使用上下文
    如何在 React 中使用上下文
    欢迎回来,朋友们!
 今天我们将回顾名为 useContext 的 React Hook 的基础知识。 useContext 是一个强大的工具,它比 useState 更进一步,创建了一个类似全局的 State,可以将信息传递给子组件和孙组件,而无需直接传递 props。
 但我有点超前了。
如果你...
    编程 发布于2024-11-03
  • JavaScript 可以修改 PHP 会话变量吗?
    JavaScript 可以修改 PHP 会话变量吗?
    使用 JavaScript 设置 PHP 会话变量你可以使用 JavaScript 操作 PHP 会话变量吗?是的,您可以通过 AJAX 请求使用 JavaScript 设置 PHP 会话变量。操作方法如下:JavaScript 代码:jQuery('#div_session_write').loa...
    编程 发布于2024-11-03
  • Babel 6 修改后的默认导出行为有何影响和解决方法?
    Babel 6 修改后的默认导出行为有何影响和解决方法?
    Babel 6 修改后的默认导出行为:从方便到语义一致性的转变在一项突破性的改变中,Babel 6 修改了其方法导出默认值,引入从之前受 CommonJS 启发的行为到严格的 ES6 原则的转变。这一变化给开发者带来了机遇和挑战。此前,Babel 在默认导出声明中添加了一行“module.expor...
    编程 发布于2024-11-03
  • 如何识别数据框中具有部分字符串匹配的列?
    如何识别数据框中具有部分字符串匹配的列?
    识别名称中包含部分字符串的列在数据框中,您的任务是查找名称部分与特定字符串。与精确匹配不同,要求是识别包含字符串“spike”但可能在其之前或之后包含其他字符的列,例如“spike-2”、“hey spike”或“spiked-in”。 为了实现这一点,我们可以利用循环来迭代数据框的列名称。在此循环...
    编程 发布于2024-11-03
  • 用一个简单的属性来加速你的 CSS
    用一个简单的属性来加速你的 CSS
    您知道吗,您可以通过使用 all: unset; 来大幅减小 CSS 文件大小?这会重置元素上的所有属性,一次性清除所有继承的样式,使您的 CSS 更精简且更易于管理。 尝试一下,看看您的代码变得多么干净!如何管理继承的样式?
    编程 发布于2024-11-03
  • TypeScript 冒险与类型挑战 – Day Pick
    TypeScript 冒险与类型挑战 – Day Pick
    大家好。 我正在解决类型挑战,以更深入地研究 TypeScript。 今天,我想分享一下我对Pick的了解。 - 挑战 - interface Todo { title: string description: string completed: boolean } ty...
    编程 发布于2024-11-03
  • 如何扩展 JavaScript 中的内置错误对象?
    如何扩展 JavaScript 中的内置错误对象?
    扩展 JavaScript 中的 Error要扩展 JavaScript 中的内置 Error 对象,您可以使用 extends 关键字定义 Error 的子类。这允许您使用附加属性或方法创建自定义错误。在 ES6 中,您可以定义自定义错误类,如下所示:class MyError extends E...
    编程 发布于2024-11-03
  • 将测试集中在域上。 PHPUnit 示例
    将测试集中在域上。 PHPUnit 示例
    介绍 很多时候,开发人员尝试测试 100%(或几乎 100%)的代码。显然,这是每个团队应该为他们的项目达到的目标,但从我的角度来看,只应该完全测试整个代码的一部分:您的域。 域基本上是代码中定义项目实际功能的部分。例如,当您将实体持久保存到数据库时,您的域不负责将其持久保存在数据...
    编程 发布于2024-11-03
  • 如何使用 SQL 搜索列中的多个值?
    如何使用 SQL 搜索列中的多个值?
    使用 SQL 在列中搜索多个值构建搜索机制时,通常需要在同一列中搜索多个值场地。例如,假设您有一个搜索字符串,例如“Sony TV with FullHD support”,并且想要使用该字符串查询数据库,将其分解为单个单词。通过利用 IN 或 LIKE 运算符,您可以实现此功能。使用 IN 运算符...
    编程 发布于2024-11-03
  • 如何安全地从 Windows 注册表读取值:分步指南
    如何安全地从 Windows 注册表读取值:分步指南
    如何安全地从 Windows 注册表读取值检测注册表项是否存在确定注册表项是否存在:LONG lRes = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Perl", 0, KEY_READ, &hKey); if (lRes...
    编程 发布于2024-11-03
  • Staat源码中的useBoundStoreWithEqualityFn有解释。
    Staat源码中的useBoundStoreWithEqualityFn有解释。
    在这篇文章中,我们将了解Zustand源码中useBoundStoreWithEqualityFn函数是如何使用的。 上述代码摘自https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L80 useBoundStoreWithE...
    编程 发布于2024-11-03
  • 如何使用 Go 安全地连接 SQL 查询中的字符串?
    如何使用 Go 安全地连接 SQL 查询中的字符串?
    在 Go 中的 SQL 查询中连接字符串虽然文本 SQL 查询提供了一种简单的数据库查询方法,但了解将字符串文字与值连接的正确方法至关重要以避免语法错误和类型不匹配。提供的查询语法:query := `SELECT column_name FROM table_name WHERE ...
    编程 发布于2024-11-03
  • 如何在 Python 中以编程方式从 Windows 剪贴板检索文本?
    如何在 Python 中以编程方式从 Windows 剪贴板检索文本?
    以编程方式访问 Windows 剪贴板以在 Python 中进行文本检索Windows 剪贴板充当数据的临时存储,从而实现跨应用程序的无缝数据共享。本文探讨如何使用 Python 从 Windows 剪贴板检索文本数据。使用 win32clipboard 模块要从 Python 访问剪贴板,我们可以...
    编程 发布于2024-11-03
  • 使用 MySQL 存储过程时如何访问 PHP 中的 OUT 参数?
    使用 MySQL 存储过程时如何访问 PHP 中的 OUT 参数?
    使用 MySQL 存储过程访问 PHP 中的 OUT 参数使用 PHP 在 MySQL 中处理存储过程时,获取由于文档有限,“OUT”参数可能是一个挑战。然而,这个过程可以通过利用 mysqli PHP API 来实现。使用 mysqli考虑一个名为“myproc”的存储过程,带有一个 IN 参数(...
    编程 发布于2024-11-03

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3