基于Firebase的React Native App中的设备-设备通信

Posted

技术标签:

【中文标题】基于Firebase的React Native App中的设备-设备通信【英文标题】:Device-Device communication in react native app based on firebase 【发布时间】:2021-03-02 13:57:44 【问题描述】:

我刚刚开始学习 react-native 并考虑将 firebase 集成到其中。现在考虑我的问题场景:

有两个用户 A 和 B 在他们的设备上运行了 react 应用程序(他们都不是管理员)。现在我研究了当我们将我们的 React Native 应用程序连接到 Firebase 时,在设备上运行的应用程序的每个实例都会获得一个唯一的令牌,并且该令牌存储在 Firebase 本身中。

现在假设用户 A 想向用户 B 发送“通知或消息”。现在看一下我在 firebase 官网上看到的以下代码:

// This registration token comes from the client FCM SDKs.
var registrationToken = 'YOUR_REGISTRATION_TOKEN';

var message = 
  data: 
    score: '850',
    time: '2:45'
  ,
  token: registrationToken
;

// Send a message to the device corresponding to the provided
// registration token.
admin.messaging().send(message)
  .then((response) => 
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  )
  .catch((error) => 
    console.log('Error sending message:', error);
  );

这个方法看起来很简单,但是真的有什么方法可以让用户A像这样知道用户B的唯一令牌吗:

const token= firebase.getToken('B');

然后在上面的代码中使用这个令牌向用户B发送通知。使用firebase可以做到吗?

谢谢。

【问题讨论】:

【参考方案1】:

您找到的代码使用 Firebase Admin SDK 发送消息。此 SDK 授予其用户对 Firebase 项目的完全管理权限,因此只能在受信任的环境中使用,例如您的开发机器、您控制的服务器或 Cloud Functions。它不能在您发送给用户的应用中使用。

您将需要一个受信任的环境来将消息发送给用户。有关这方面的更多信息,请参阅:

FCM architecture 上的 Firebase 文档,其中有这个方便的图表 How to send one to one message using Firebase Messaging How to send Device to device notification by using FCM without using XMPP or any other script.?

【讨论】:

感谢上帝,有人回答了这个问题。现在考虑另一个场景:假设我是一个 React Native 应用程序的管理员,该应用程序由 10 个 A、B...J 用户运行。假设管理员(我)想向用户 C 发送通知,那么我将如何获取用户 C 的令牌,以便我可以使用我共享的上述代码向他发送通知?有没有类似的函数:``` const token= firebase.getToken('C'); ```。这可以给我任何特定用户的令牌。 Firebase 文档对此并不清楚。 我对 FCM 有一些误解。我的一位朋友告诉我,FCM 仅适用于推送通知,绝不使用它一个用户可以向另一个用户发送通知。只有管​​理员可以使用它。是真的吗? 您可以让一个用户通过调用您定义的服务器端 API 向另一个用户发送推送通知。然后,在该服务器端代码中,您可以控制他们可以向哪些用户发送哪些消息。 那很好,但假设我是您正在运行的应用程序的管理员(我有 admin SDK),我将如何找到您的唯一令牌以便将通知推送到您的设备?那是我在任何地方都找不到的,甚至在文档中也找不到。我已经搜索了一整天。 您需要创建一个令牌注册表(通常是数据库中的一个表,您可以在其中将令牌与用户或您使用的任何其他定位方法相关联)。这就是这里的代码 sn-ps 中的sendRegistrationToServer 方法应该做的:firebase.google.com/docs/cloud-messaging/android/…

以上是关于基于Firebase的React Native App中的设备-设备通信的主要内容,如果未能解决你的问题,请参考以下文章

使用 React Native Firebase 时如何远程调试 JS

我们可以仅将 react-native-firebase 用于 android 和 IOS 其他由 react-native 提供的 api 吗?

使用 react-native-firebase 创建 Firebase 动态链接失败 - React Native

用 react-native-firebase 编译 react-native

哪个 Firebase javascript 包应该与 React Native 一起使用?常规的“Firebase Web SDK”还是“react-native-firebase”?

@react-native-firebase/admob 的基本用法给出:“TypeError: (0, _admob.default) is not a function”。是不是已弃用?或为啥不起