如何从Firebase获取所有设备令牌?



如何从Firebase获取设备令牌(FCM注册令牌)?

我正在使用Firebase制作移动应用程序,并使用node.js制作其服务器。

我想从服务器发送push notification消息,但我不知道如何获取设备令牌。

  1. 如何从外部服务器获取设备令牌?我现在使用的是 Firebase 管理员 SDK。

  2. 设备令牌是否仅在应用连接 fcm 服务器时生成?

  3. 当用户首次运行应用并注册 FCM 服务器时,我是否应该将令牌保存到另一个数据库?

1. 如何从外部服务器获取设备令牌?我现在使用的是 Firebase 管理员 SDK。

目前没有用于从服务器端检索应用的所有注册令牌的 API。开发人员(你)有责任将注册令牌发送并存储到应用服务器,该令牌是从客户端应用端生成的。

2. 设备令牌是否仅在应用连接 FCM 服务器时生成?

文档几乎涵盖了这一点(另请参阅我的答案):

在应用首次启动时,FCM SDK 会为客户端应用实例生成注册令牌。

从技术上讲,它不会连接到 FCM 服务器。它连接到 FirebaseInstanceID 服务(通过 SDK),后者又生成注册令牌。

3. 当用户首次运行应用程序并注册 FCM 服务器时,我是否应该将令牌保存到另一个数据库?

正如我在#1中提到的,您应该将其保存在可以轻松访问以发送消息的位置。

设备令牌是在应用首次连接时生成的,然后必须将此令牌存储在数据库中,并在分配了新令牌时替换

public class MyAndroidFirebaseInstanceIdService extends FirebaseInstanceIdService {
private static final String TAG = "MyAndroidFCMIIDService";
@Override
public void onTokenRefresh() {
//Get hold of the registration token
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
//Log the token
Log.d(TAG, "Refreshed token: " + refreshedToken);
}
private void sendRegistrationToServer(String token) {
//Implement this method if you want to store the token on your server
}
}

请参阅以下教程

我建议根本不存储令牌。存储令牌似乎是一个好主意,直到您意识到您的用户拥有多个设备(iOS 设备、android 设备、桌面等)。现在,您必须管理为每个用户存储多个设备令牌,这可能会很快变得混乱。

相反,忽略生成的令牌,只需为每个用户订阅一个主题,例如当用户登录或创建帐户时,请订阅由其用户ID组成的主题

NSString* useridchannel = [NSString stringWithFormat:@"user_%ld", (long)userid];
[[FIRMessaging messaging] subscribeToTopic:useridchannel completion:^(NSError * _Nullable error) {
NSLog(@"Subscribed user to topic %@", useridchannel);
}];

当用户注销时,请确保取消订阅该主题,因为如果他们不再登录您的应用程序,他们可能不希望收到通知

NSString* useridchannel = [NSString stringWithFormat:@"user_%ld", (long)userid];
[[FIRMessaging messaging] unsubscribeFromTopic:useridchannel completion:^(NSError * _Nullable error) {
NSLog(@"Unsubscribed user from %@", useridchanel);
}];

我意识到设备组应该用于此目的,但我不想为存储和管理令牌而烦恼,而且适用于PHP的Firebase Admin SDK不支持向设备组发送消息。通过使用主题,您无需处理设备令牌,您可以轻松地从服务器、应用或 Firebase 控制台向所有用户设备发送消息。

你可以发出一个 get 请求

https://<<your_project_name>>.firebaseio.com/.json?auth=<<your_database_secret_key>>

您在 Firebase 控制台中的选项卡下获取的数据库密钥settings/serviceaccounts/databasesecrets

这将返回一个 JSON 文件,其中包含项目的所有存储数据。

相关内容

  • 没有找到相关文章

最新更新