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

9 浏览
0 Comments

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

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

我正在使用Firebase制作移动应用程序和使用Node.js的服务器。

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

  1. 如何从外部服务器获取设备令牌?我现在正在使用Firebase admin SDK。
  2. 设备令牌只有在应用连接到fcm服务器时才生成吗?
  3. 当用户第一次运行应用程序并注册FCM服务器时,我应该将令牌保存到另一个数据库中吗?
0
0 Comments

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

问题的出现原因:

- 存储设备令牌似乎是个好主意,直到意识到用户可能有多个设备(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);
}];

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

问题的解决方法:

- 为了更好地保护消息的私密性,可以为每个用户生成自己的令牌,例如使用(n)位的随机字符串(包括字母、数字和特殊字符),将其存储在数据库中,并使用该令牌代替用户ID。

0
0 Comments

问题的出现原因:

Firebase提供了一个设备令牌(device token)来标识每个设备,该令牌在应用程序首次连接时生成,然后必须存储在数据库中,并在分配新令牌时进行替换。然而,某些情况下需要获取所有设备令牌,可能是为了进行推送通知或其他目的。

解决方法:

1. 创建一个继承自FirebaseInstanceIdService的类,例如MyAndroidFirebaseInstanceIdService。

2. 在该类的onTokenRefresh()方法中获取设备令牌,并将其打印出来。

   public class MyAndroidFirebaseInstanceIdService extends FirebaseInstanceIdService {
    private static final String TAG = "MyAndroidFCMIIDService";
    public void onTokenRefresh() {
        //Get hold of the registration token
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        //Log the token
        Log.d(TAG, "Refreshed token: " + refreshedToken);
    }
   }
   

3. 如果需要将设备令牌存储到服务器上,可以实现sendRegistrationToServer()方法,并在其中处理存储逻辑。

相关教程:

可以参考以下教程了解更多关于Firebase云消息传递的内容:Tutorial

0
0 Comments

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

问题的出现原因:

1. 目前还没有API可以从服务器端检索应用程序的所有注册令牌。

2. 开发者需要负责将注册令牌从客户端发送并存储到应用服务器端。

解决方法:

1. 首次启动应用程序时,FCM SDK会为客户端应用程序实例生成一个注册令牌。

2. 开发者应该将注册令牌保存在可以轻松访问的位置以便发送消息。

3. 可以使用Google Instance-ID API将APNS令牌转换为FCM注册令牌,并使用它发送推送通知到iOS设备。但是,在集成Firebase SDK之前,推送功能将无法正常工作。只有在集成了SDK后,该API才会返回正确的FCM令牌,从而可以通过Firebase接收推送通知。因此,需要包括Firebase SDK。

以上是关于如何从Firebase获取所有设备令牌的问题的原因和解决方法的整理。

0