如何处理用户在上次运行时已使用 Firebase 登录的应用程序的冷启动 [英] How deal with cold start of an app where user has beeing logged with Firebase at previous run

查看:14
本文介绍了如何处理用户在上次运行时已使用 Firebase 登录的应用程序的冷启动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

感谢 Firebase,用户可以在 G+、Facebook 或 Twitter 的帮助下登录.当它们被记录时,一切都很好.

Thank to Firebase the user can logged with the help of G+, Facebook or Twitter. When they are logged, everything is fine.

当 Android 应用关闭并重新打开时,如何使用 Firebase API 重新启用之前成功登录的用户.应用演示或文档中都没有说明.

When the Android app is closed and re-opened, how to reenable the previous succeed logged user with the Firebase API. It is not explained neither in the app demo or in the documentation.

以 Facebook 为例,sdk 似乎保存了令牌,这就是按钮处于连接状态的原因(表明您可以断开连接).但是 Firebase 和其他身份验证系统呢.

For exemple for Facebook, the sdk seems to save the token, that 's why the button is at connected state (showing that you can disconnect). But what about Firebase and for other authentication systems.

推荐答案

感谢 @Frank-van-Puffelen 的回答,我进行了一些尝试,直到我得到相关的东西(至少对我来说:欢迎评论以改进).

Thanks to the @Frank-van-Puffelen answer, I had some trials until I get something relevant (at least for me : comment are welcome to improve).

我将我的 OAuth 架构分为 3 个主要组件:fdsfds

I have based my OAuth architecture into 3 mains components : fdsfds

  1. 位于应用程序中的一个 AuthStateListener.
  2. 一个处理所有身份验证过程的 Utils Singleton OAuthManager
  3. 一个或多个处理身份验证用户交互(登录按钮等)的活动

应用类

FacebookSdk.sdkInitialize(this);

Firebase.setAndroidContext(this);
Firebase.getDefaultConfig().setLogLevel(Logger.Level.DEBUG);
Firebase.getDefaultConfig().setPersistenceEnabled(true);

Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.addAuthStateListener(new Firebase.AuthStateListener() {
    @Override
    public void onAuthStateChanged(AuthData authData) {
        if (authData != null) {
            // user is logged in
            // create a partialUser from authData
            OAuthManager.getDefault().setAuthenticatedUser(authData);
            // fetch, merge and save back the partialUser with server registerUser.
            OAuthManager.getDefault().startFetchingUserInfo();
        } else {
            // user is not logged in
            // Try to retrieve the user from Facebook SDK             
            // Try to retrieve the user from "Token and Id save in Android Preferences (in case of issue, or cache reset from Firebase))
            // In retrieve is not possible, clean auth data 
            OAuthManager.getDefault().retrieveOAuth(MilleZimU.getInstance());
        }
    }
});

OAuthManager

这是处理身份验证的每个服务(部分已从 Firebase 专用演示活动复制)

Here is every services that deal with authentication (part has been copy from the Firebase dedicated demo activity)

登录活动

这里只保留处理 UI 交互的部分.

Here only remain the part that deal with UI interaction.

正在检索?

我不确定这是否必要,但具体情况(可能是由于应用程序崩溃或更新),身份验证状态与 Firebase|Prefs|FacebookSdk 不同.我会看到的.

I'm not sure this is necessary, but case to case (maybe due to crash or update of the app), authentication status where different from Firebase|Prefs|FacebookSdk. I will see with time.

这篇关于如何处理用户在上次运行时已使用 Firebase 登录的应用程序的冷启动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆