2017-07-10 79 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」。