2014-03-31 2 views
2

나는 안드로이드 애플리케이션을 작성하고 firebase 익명 인증을 사용자에게 사용하고 있습니다. 프로그램이 장치에 처음 설치되면 해당 장치에 익명 로그인을 사용하여 고유 ID를 만든 다음 메모리에 저장 한 다음 해당 장치의 고유 사용자 이름으로 항상 고유 ID를 사용합니다. 여기 내 코드는 다음과 같습니다.Firebase 익명 로그인 문제

public String getUserId() { 
    SharedPreferences prefs = getSharedPreferences("USER_ID", 
      Context.MODE_PRIVATE); 
    String id = prefs.getString("USER_ID", "NOT_FOUND"); 
    return id; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    String userId = getUserId(); 
    if (userId.equals("NOT_FOUND")) { 
     if (f == null) { 
      f = new Firebase(
        "https://marketlist.firebaseio.com/sharedlists"); 
     } 

     try { 
      Firebase ref = f.getParent(); 
      SimpleLogin authClient = new SimpleLogin(ref); 

      authClient 
        .loginAnonymously(new SimpleLoginAuthenticatedHandler() { 

         @Override 
         public void authenticated(Error error, User user) { 
          if (error != null) { 
           System.out.println(""); 
          } else { 
           // We are now logged in 
           String id = user.getUid(); 
           SharedPreferences prefs = getSharedPreferences(
             "USER_ID", Context.MODE_PRIVATE); 
           prefs.edit().putString("USER_ID", id) 
             .commit(); 

          } 

         } 
        }); 
      Firebase.goOffline(); 
     } catch (Exception ex) { 
      Firebase.goOffline(); 
     } 

    } 
} 

나는이 ID의 고유성에 대해 우려하고 있습니다. firebase 익명 로그인은 온라인 익명 사용자들 사이에서 고유 ID를 제공합니까, 아니면 응용 프로그램 기반 고유 ID를 제공합니까? 두 개의 장치에 동일한 ID가 부여 될 가능성이 있습니까? 기회가 있다면, 그 id가 존재하는지 어디에서 확인할 수 있습니까? (나는 또한 주어진 id를 firebase 저장소에 저장하고, 그 id가 이전에 주어 졌는지를 확인하기를 원한다).

감사합니다.

답변

4

익명 인증을 위해 생성 된 uid. 본질적으로 고유 한 ID를 제공하기 위해 현재 타임 스탬프와 임의성의 조합을 사용하는 UUIDs (v4)과 매우 유사합니다. 동일한 ID를 가진 다른 사용자가있을 가능성은 매우 낮습니다. 응용 프로그램이 확인하지 않아야하는 부분입니다.

그러나 실제로 확인하려면 Firebase 트랜잭션을 사용하여 클라이언트가 /users/<uid>에 기록하도록하고 다른 클라이언트가 이전에 해당 위치에 기록하지 않았는지 확인하십시오.

+0

답변 해 주셔서 감사합니다. – yrazlik