2017-07-10 37 views
0

我的要求是区分第一次和后来的Google-在我的android应用程序中登录。对于第一次用户谷歌登录,我想将用户重定向到个人资料屏幕,在那里他将填写有关他的联系信息的其他信息。在他第一次谷歌登录后,所有后来的谷歌登录,我希望用户直接导航到主屏幕,而无需再次填写个人资料详细信息。我使用Firebase作为我的后端。我遵循了几个堆栈溢出问题,并提供了下面相同的链接。首次共享首选项及后续Google登录

链接1: Correct code location to check Firebase if a user has been created already?

链接2: How to differentiate between first time google Sign-In and successive google sign-In in an android application?

我能够实现一个简单的错误,我无法弄清楚,我错过了什么我的要求。第一次Google登录指向配置文件屏幕,随后的请求重定向到主屏幕。但是我尝试过,它只发生在用户关闭应用程序之前。如果用户关闭应用程序并再次打开,用户将被重定向到配置文件屏幕,这不应该发生。用户使用Google登录并注册了个人资料后,所有后续请求都应转到主屏幕。

我的错误:当用户关闭应用程序,并再次重新打开,用户被重定向到在谷歌标志分布屏幕下面是我曾尝试

SignInActivity.java

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(SignInActivity.this); 
if (firebaseAuth.getCurrentUser() != null) { 
    if (!sharedPreferences.contains(String.valueOf(Preferences.FIRST_LAUNCH))) { 
     Intent contactDetailsIntent = new Intent(SignInActivity.this, ContactDetailsActivity.class); 
     startActivity(contactDetailsIntent); 
     sharedPreferences.edit().putBoolean(String.valueOf(Preferences.FIRST_LAUNCH), true).commit(); 
    } else { 
     Intent loginIntent = new Intent(SignInActivity.this,MainMenuActivity.class); 
     startActivity(loginIntent); 
     finish(); 
    } 
} 

这是我的喜好类。

public class Preferences { 

    public static final boolean FIRST_LAUNCH = false; 
    public static final String NAME = "fullName"; 
    public static final String EMAIL = "email"; 
    public static final String USERID = "userId"; 
    public static final String USER_TYPE = "userType"; 

} 

我无法弄清楚问题所在。任何帮助表示赞赏

回答

0

要检查用户登录他们的设备上,试试这个Firebase 9.0.0- How to see if user is logged in with AuthStateListener 我已经使用了电子邮件验证,但因为它是链接到用户对firebse帐户,我不认为这将很重要。另外,我建议把它放在onCreate方法中。

要检查用户在其设备上登录的次数,请使用firebase数据库。获取用户的唯一ID使用:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
UserID = user.getUid(); 

然后我会检查数据库,看看是否存在具有该唯一ID的用户。如果不存在,则将该ID存储在数据库中,创建一个“timesLoggedIn”或类似的子项,并将其赋值为0.如果它存在,则增加“timesLoggedIn”。