当用户尝试登录/注册时,正确的方式将firebase令牌发送到服务器



我在我的Android应用中使用FCM(Firebase Cloud Messaging(。我需要下一个:

  1. 用户打开的应用程序和如果
  2. 应用程序获取登录和MD5密码,然后尝试登录
  3. 如果登录成功 - 用户进入MainAttivity else
  4. 如果登录错误 - 用户进入登录屏幕
  5. 用户输入登录和密码,然后按登录按钮
  6. 如果成功 - 用户进入Main Activity,login and Login and Password(MD5(存储在共享流程中。否则用户会看到错误,并且可以登录更多

  1. 用户可以打开注册屏幕并创建一个新的配置文件,并使用新的登录和密码
  2. 用户试图注册,如果成功 - 用户进入MainAttivity,登录和密码(MD5(存储在SharedPreferences中。否则用户会出错

它是Android应用程序的典型逻辑。但是我不明白如何将firebase添加到此逻辑中。

当我的应用启动时,我没有FirebaseInstanceId,我只能在onTokenRefresh(async(中进行。但是,当用户尝试登录时,我需要将此ID(令牌(传递给服务器。我有一些方法:

  1. 用户打开应用程序时 - 我等待一段时间,然后获得令牌并发送登录和密码 - 我认为这是非常糟糕的练习。

  2. 我将令牌TosharedPreferens保存在onTokenRefresh中。当我尝试登录时,我会检查这个令牌。如果令牌为空 - 我投掷异常并打开登录屏幕((。到这个时候,令牌将进入设备,用户将尝试再次登录。 - 我认为这也是不良的习惯。

  3. 当用户尝试登录时,我仅向服务器发送登录和密码。当我获得令牌时 - 我将其发送到另一个请求中的服务器。 - 我不喜欢那是两个请求。

怎么做?

很多时候,我都使用了这种方法(当全部使用GSM时(:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);
    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    CloudMessaging.getInstance(this).retrieveRegistrationId(new CloudMessaging.RegistrationListener() {
        @Override
        public void onRegistrationReceive(String registrationId) {
            savePushToken(registrationId);
            //open activity
                }
            });
        }
    });
}

当我得到令牌和打开活动之后,我一直在等待。但是在firebase中 - 一切都不同

现在我做到了:

@Override
    public void onTokenRefresh() {
        String token = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "FCM Token: " + token);
        utils.saveToken(token);
    FirebaseMessaging.getInstance().subscribeToTopic(FRIENDLY_ENGAGE_TOPIC);  
    }

当用户尝试登录时 - 我从存储中获得令牌,并使用登录和密码发送到服务器。

更新:

我不太了解最后一段。现在我看到了这样的逻辑。

1-我打开应用程序,然后转到屏幕输入登录和密码。在这一点上,我不知道我有一个令牌还是无效。

因此,我尝试在任何情况下输入。如果成功登录 - 我会在共享流程中检查是否有令牌,然后将其发送到服务器。如果不是 - 那么他将从另一个地方发送(从Ontokenrefresh方法(。在OntokenRefresh方法中,当我获得新的令牌时 - 我将其保存到共享流程中并检查Authtoken。如果authtoken不是null(这意味着我登录( - 我将新令牌发送到服务器,而仅保存到共享Preferences。并在登录成功后发送。成功签署。

但是,只要您将其保存到正确的共享偏好中,它不应为null。无效的唯一方法是,如果您的应用程序中设置的FCM存在问题,这不应该限制您的用户登录FCM短时间...

很常见的是,FCM令牌是在单独的请求中发送的。从这里开始,它指出令牌是在初始启动时生成的。

也与您的问题无关的另一点,如果您在设备上存储了用户密码的MD5哈希,则还应该放哈片并在到达服务器时使用盐。您没有提及此事,但是当您说有关将用户的密码存储在设备上时,它向我提出了旗帜。

如果您真的很想了解有关安全性的更多信息,请查看JSON Web令牌。

当我的应用程序启动时,我没有FirebaseInstanceID,并且我只在OntokenRefresh(async(中获得OT。

如果我正确理解这一点,您期望将令牌仅在onTokenRefresh()中生成。在大多数情况下都是如此,但是行为是,一旦您致电getToken() - 大概是在您的主activity中,将有两种情况:它立即返回令牌,或者它返回null。

对于第一种情况,您可以立即将令牌发送到首选的应用程序服务器。如果是null,则onTokenRefresh()然后触发,为您提供随意发送的选项。

onTokenRefresh()仅在检测到有一个新的令牌时(在您的用例中,您当前拥有的实际上是通常的方法(的单独请求,以发送用户详细信息和令牌 - 在大多数情况下,不应保持相同的重要性。即签名凭证至关重要。

从firebase文档中您获得注册令牌:

当注册令牌可能会更改:

- 应用程序删除实例ID

- 在新设备上还原该应用

- 用户卸载/重新安装应用

- 用户清除应用数据。

相关内容

  • 没有找到相关文章

最新更新