페이지

레이블이 Firebase인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Firebase인 게시물을 표시합니다. 모든 게시물 표시

[파이어베이스] DataSnapshot 의 구조 가져오기


파이어베이스 에서 데이터베이스를 불러올경우,
구조에 추가된 데이터를 뽑아낼 때, 순차적으로 DataSnapshot 을 내려가면서 불러올수 있다.

단, 하위 구조의 데이터가 추가되는 것을 인식하지 못하며
하위구조 변경에 따른 데이터를 출력시 다시한번 전체를 불러오게 된다



  @Override
 public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
         Log.i("ALARM_onChildChanged", "main:" + dataSnapshot.getKey());
                for (DataSnapshot MoantSnapshot :  dataSnapshot.getChildren()) {
                    MoantSnapshot.getKey();
                    Log.i("ALARM_onChildChanged", "Monat:" + MoantSnapshot.getValue());
                    for (DataSnapshot DaySnapshot :   MoantSnapshot.getChildren()) {
                        DaySnapshot.getKey();
                        Log.i("ALARM_onChildChanged", "Day:" + DaySnapshot.getValue());
                        for (DataSnapshot TimeSnapshot : DaySnapshot.getChildren()) {
                            DaySnapshot.getKey();
                            Log.i("ALARM_onChildChanged", "Time:" +  DaySnapshot.getValue());
                            textview_Alarm.append("" +TimeSnapshot.getValue() + "\n");
                        }
                    }
                }

       alarm_text_scroll.fullScroll(View.FOCUS_DOWN);
 }

[파이어베이스] user.isEmailVerified() 쓰임새, 이메일 인증

파이어베이스의 이메일 로그인을 구성한 후 해당 이메일 유효한 이메일인지 가입자가 올바른 메일을 사용하고 있는 지 확인할 필요성이 생겼다.

해당 파이어베이스 인증창에서는 이메일이 승인되었는지 알수가 없었다.


검색한 결과, 이메일 인증을 위한 메일 보낸 후 해당 링크를 클릭하게 되면

다음과 같은 인증완료 창을 볼수 있다.

이후 파이어베이스에서 사용자정보를 불러와 user.isEmailVerified() 를 사용하여 메일이 인증되었는지 확인하면 true 또는 false 값으로 반환된다.

  mFirebaseAuth = FirebaseAuth.getInstance();

  final FirebaseUser User = mFirebaseAuth.getCurrentUser();
  if (user.isEmailVerified()) {

                      // 이메일이 인증 되었을 때

  }else{

                    // 이메일 미인증시

  }
인증한 후 다시 사용자정보를 다시 불러와야 하는 데,

mFirebaseAuth.getCurrentUser().reload()

방법으로만은 빠른 응답을 기대하기 어려웠다.
  @Override
    protected void onStart() {
        super.onStart();

        mFirebaseAuth = FirebaseAuth.getInstance();
        final FirebaseUser mFirebaseUser = mFirebaseAuth.getCurrentUser();


        if (mFirebaseUser == null) {  //사용자 없을시 

            Toast.makeText(this, getResources().getString(R.string.login_need), Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(this, Activity_Login.class);
            startActivity(intent);
            finish();

        } else { // 사용자 있을 시 다시 불러옴

            mFirebaseAuth.getCurrentUser().reload().addOnSuccessListener(new OnSuccessListener() {
                @Override
                public void onSuccess(Void aVoid) {
                    updateUI(mFirebaseUser);
                }
            });



        }

    }


onStart() 를 이용하여 다시 화면을 사용할 때마다 다시 사용자정보를 업데이트 하도록 했다.


참고링크






[파이어베이스] 이메일 인증을 위한 메일보내기

이메일 인증을 위해 메일을 보내야 한다면 다음과 같이 진행한다.

 user = mFirebaseAuth.getCurrentUser();

 mFirebaseAuth.useAppLanguage();                //해당기기의 언어 설정

 user.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
   @Override
   public void onComplete(@NonNull Task<Void> task) {
      if (task.isSuccessful()) {                         //해당 이메일에 확인메일을 보냄
             Log.d(TAG, "Email sent.");
             Toast.makeText(Activity_SignUp.this,
                "Verification email sent to " + user.getEmail(),
                Toast.LENGTH_SHORT).show();
      } else {                                             //메일 보내기 실패
              Log.e(TAG, "sendEmailVerification", task.getException());
              Toast.makeText(Activity_SignUp.this,
                "Failed to send verification email.",
                Toast.LENGTH_SHORT).show();
      }
    }
 });
이메일 언어를 설정하기 위해서 언어설정에 관련 명령어


mFirebaseAuth.useAppLanguage();

를 추가하여 사용하는 기기의 언어설정과 동일한 언어의 인증 메일을 보낼수 있다. 또는 다음과 같이 언어코드를 직접  설정하여 보낼 수 있다.

mFirebaseAuth.languageCode = 'de'; //독일어 설정


[파이어베이스] 구글로그인에 이어 페이스북 로그인 오류

파이어베이스를 이용하여 구글로그인을 성공한 후 페이스북을 이용한 로그인 시도 중
로그인은 성공했으나 메인 액티비티에 적용되지 못한채

onAuthStateChanged() 

에 진입하지 못해서 고심하던 중


파이어베이스 인증 창 중 하단의 고급설정에






이메일 주소당 계정 1개
사용자가 다른 인증 제공업체를 통해 동일한 이메일 주소를 사용하여 여러 계정을 만들 수 없습니다.







를 발견..


이것이 문제 였다..

구글로그인 이메일과 페이스북 로그인 이메일이 동일해서 인증받지 못한 점..
이메일 주소당 계정 1개를 비활성 하니까 제대로 작동한다.




[파이어베이스] google 로그인 인증 오류



아무이상 없이 잘 돌아가도 구글 로그인 인증이 에러나면 에러 코드로

statusCode=unknown status code: 12501, resolution=null 를 계속 내뿜는다.



결국 파이어베이스에 등록한 지문 SHA-1 이 맞지 않아서 오류 였다.

다시 키툴을 돌려서 지문을 추가 등록한 바
잘 된다.






[Kotlin] 안드로이드 내부저장소 캐시에 저장하기

안드로이드 내부에 임시적으로 데이터를 저장하기 위해 캐시에 저장한다. 따로 퍼미션이 필요없고 보안이 필요없는 부분에서 잠시 저장할 때 유리하다 내부적으로 저장소가 부족할때 자동으로 지워질수 있다는 경고 private fun saveCache(d...