2

그리고 긴 버전이 있습니다 :안드로이드 애플리케이션에서 firebase-ui를 사용하는 중에 사용자가 이미 계정을 생성했는지 어떻게 알 수 있습니까?

저는 Firebase과 Android Studio에 완전히 익숙하며, 이미 내 앱에 google과 FB로 로그인하는 것과 같은 몇 가지 부분을 작성했습니다. 나는 this tutorial을 따라 갔다.

모든 것이 잘 작동하지만 지금 내가하고 싶은 것은 사용자의 정보를 수집하고 Firebase 데이터베이스에 저장하는 것입니다. (기본 아이디어가 있다고 생각합니다). 그러나 문제는 계정별로 이러한 세부 정보를 한 번만 물어보고 싶기 때문에 사용자가 처음으로 계정을 만드는 경우 알 수있는 방법을 모를 수 있다는 것입니다. 그래서 나는 Auth에서 'User UID'를 사용할 것이라고 생각했습니다. 그런데 내가 만난 문제는 위에서 언급 한 튜토리얼을 사용할 때 사용자가 이미 존재하는지 확인하기 위해 코드를 작성하는 방법과 장소입니다. 데이터베이스 또는 코드 자체의 규칙 섹션에서 수행해야합니까?

나는 튜토리얼을 따라 만든 코드를 게시 할 것이다. 이것이 멍청한 질문이라면 유감이지만 Firebase UI에 대한 경험이없는 개발자는 없습니다. 그래서 나는 그의 것에 대해 물어볼 사람이 정말로 없다. 어떤 도움을 주셔서 감사합니다.

MainActivity.java 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import com.firebase.ui.auth.AuthUI; 
import com.google.firebase.auth.FirebaseAuth; 

public class MainActivity extends AppCompatActivity { 

private static final int RC_SIGN_IN=0; 
private FirebaseAuth auth; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    auth = FirebaseAuth.getInstance(); 
    if(auth.getCurrentUser() != null) { 
     //user already signed in 

     Log.d("AUTH", auth.getCurrentUser().getEmail()); 
     Intent intent = new Intent(this, com.jacob.appdevitae.HomeActivity.class); 
     startActivity(intent); 
     finish(); 
    } 
    else { 
     startActivityForResult(AuthUI.getInstance() 
       .createSignInIntentBuilder() 
       .setProviders(
         AuthUI.FACEBOOK_PROVIDER, 
         AuthUI.GOOGLE_PROVIDER) 
       .build(),RC_SIGN_IN); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == RC_SIGN_IN) { 
     if(resultCode == RESULT_OK) { 
      //User logged in 
      Log.d("AUTH", auth.getCurrentUser().getEmail()); 
      Intent intent = new Intent(this, com.jacob.appdevitae.HomeActivity.class); 
      startActivity(intent); 
      finish(); 
     } 
     else { 
      //User not authenticated 
      Log.d("AUTH", "NOT AUTHENTICATED"); 
     } 
    } 
}} 

답변

1

먼저
Gradle을 com.google.firebase의 응용 프로그램 수준의 dependencie을 추가 중포 기지 데이터베이스 : 9.6.1이

사용자는 당신이 사용자인지 확인 필요 없다, 그래서 한 번 해제에 서명을 가입 한 후 정보를 추가하십시오. 예를 들어

: 나는 '계정 만들기'부분을 수행하는 코드의 어느 부분 식별하는 출력의 다양한 조합을 시도

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
if(requestCode == RC_SIGN_IN) { 
    if(resultCode == RESULT_OK) { 
     //User logged in 
     Log.d("AUTH", auth.getCurrentUser().getEmail()); 
//create the database 
     DatabaseReference mdatabase=FirebaseDatabase.getInstance.getReference.child("User-Information"); 

     //set the information, you can put how much as you want 
     mdatabase.child("user-information1").setValue("User-information1"); 
     mdatabase.child("user-information2").setValue("User-information2") 
      .addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        Log.d(LOG_TAG, "signIn:onComplete:" + task.isSuccessful()); 

        if (task.isSuccessful()) { 
         //success 
        } else { 
         //Error 

        } 
       } 
      });; 

     Intent intent = new Intent(this, com.jacob.appdevitae.HomeActivity.class); 
     startActivity(intent); 
     finish(); 
    } 
    else { 
     //User not authenticated 
     Log.d("AUTH", "NOT AUTHENTICATED"); 
    } 
} 
+0

. 그러나 나는 그것을 이해할 수 없었다. 내가 이것을 시도하자. 고맙습니다. –

+0

왜 com.google.firebase : firebase-database : 9.8.0 대신 com.google.firebase : firebase-database : 9.6.1입니까? 내 모든 다른 종속성은 9.8.0입니다. –

+0

설명서에서 그 중 하나를 발견했습니다. 9.8.0 –

관련 문제