создание новой пользовательской записи в базе данных Firebase каждый раз, когда пользователь регистрируется в Android - PullRequest
0 голосов
/ 24 мая 2018

В настоящее время я работаю над приложением для викторины, где пользователь регистрируется с помощью электронной почты и pw через firebase.

После регистрации он должен передать псевдоним, который будет использоваться для рекорда.

Поэтому я хочу, чтобы приложение добавляло такую ​​информацию о пользователях каждый раз, когда пользователь регистрируется, как показано на прилагаемом рисунке.

enter image description here

Для достиженияэто я использовал этот код:

public class createNickname extends AppCompatActivity {
    private static final String TAG = "createNickname";

    private FirebaseDatabase mFirebaseDatabase;
    private FirebaseAuth.AuthStateListener mAuthListener;
    private EditText NicknameInput;
    private Button NicknameReg;
    private String Nickname, UserId;
    private FirebaseAuth mAuth;
    private String EmailEntry;
    private DatabaseReference myref = mFirebaseDatabase.getInstance().getReference();

    @Override
    protected void onCreate( Bundle savedInstanceState ) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_nickname);

        NicknameInput = (EditText)findViewById(R.id.etNickname);
        NicknameReg = (Button)findViewById(R.id.btsetNickname);

        mAuth = FirebaseAuth.getInstance();

        myref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange( DataSnapshot dataSnapshot ) {
                String value = dataSnapshot.getValue(String.class);
                Log.d(TAG, "value is: " + value);
            }

            @Override
            public void onCancelled( DatabaseError databaseError ) {
                Log.w(TAG, "Failed to read value.", databaseError.toException());
            }
        });

        NicknameReg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick( View view ) {
                Log.d(TAG, "onClick: Attempting to add object to database.");
                String newNick = NicknameInput.getText().toString();
                if (!newNick.equals("")) {
                    FirebaseUser user = mAuth.getCurrentUser();
                    UserId = user.getUid();
                    EmailEntry = user.getEmail();
                    myref.child("userlist").push().setValue(UserId);
                    myref.child("userlist").child(UserId).push().setValue(EmailEntry);
                    myref.child("userlist").child(UserId).push().setValue(0);

                    startActivity(new Intent(getApplicationContext(), LoginActivity.class));
                }
            }
        });
    }

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
    }
 }

Итак, вопрос сейчас, что я сделал не так?Пользователь создается в окне аутентификации в firebase, но база данных просто не обновляется.

Правильно ли я настроил базу данных?Как вы решили, на какую базу данных вы хотите настроить таргетинг?

Это мои правила безопасности Firebase: {"rules": {".read": false, ".write": false}}

Что касается базы данных, то ничего не происходит, если я все понял правильно.

Я не получаю сообщения об ошибках, что когда-либо.

1 Ответ

0 голосов
/ 24 мая 2018

Сначала я бы посоветовал добавить обратный вызов завершения к вашему коду, чтобы вы знали, когда и если ваши записи в Firebase были неудачными / успешными.

В вашем случае вы получите разрешениеошибка отклонена, потому что ваши правила безопасности установлены на false -> никто не имеет разрешения на чтение / запись в вашу базу данных.Вместо этого вы можете дать каждому пользователю разрешение на запись в свои собственные данные, например:

{
  "rules": {
    "userlist": {
      "$user_id": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($user_id)
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

(см. документацию для получения дополнительной информации)

Для работы вышеупомянутоговам также придется изменить свой код, который вы используете для записи в базу данных.В настоящее время вы используете push().Этот генерирует случайный идентификатор , и вам здесь не нужно (не нужно).Вместо этого вы можете использовать setValue () :

myref.child ("userlist"). Push (). SetValue (UserId);

myref.child("userlist").child(UserId).child("email").setValue(EmailEntry);
myref.child("userlist").child(UserId).child("highscore").setValue(0);

Вы также можете посмотреть мой ответ здесь для получения дополнительной информации по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...