Я работал с firebase, чтобы загружать изображения из базы данных Firebase в реальном времени в RecyclerView
, а затем загружать выбранное изображение в телефон из Firebase Storage.Я не хочу, чтобы каждый мог видеть изображения, только если он вошел в систему с использованием метода анонимного входа в методе, поэтому я создал правила хранения следующим образом:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read : if request.auth != null;
}
}
}
Правила базы данных:
{
"rules": {
".read": true,
".write": false
}
}
Я сделал это, это сработало на моем первом приложении.Я хотел сделать 2-й, поэтому я скопировал все, переименованные имена баз данных и имена хранилищ ... но в журнале я получаю это:
error getting token java.util.concurrent.ExecutionException: com.google.firebase.internal.api.FirebaseNoSignedInUserException: Please sign in before trying to get a token.
E/StorageException: StorageException has occurred.
User does not have permission to access this object.
Code: -13021 HttpResult: 403
Could not open resulting stream.
java.io.IOException: Could not open resulting stream.
Код, который я использовал для анонимного входа:
private void signInAnonymously() {
mAuth.signInAnonymously().addOnSuccessListener(this, new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Log.e("TAG", "success sign");
// do your stuff
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Log.e("TAG", "failed sign");
}
});
}
@Override
protected void onStart() {
super.onStart();
sign();
}
private void sign() {
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
if (user != null) {
Log.e("TAG", "already sign");
} else {
signInAnonymously();
Log.e("TAG", "sign null");
}
//loadIntAdd();
}
Код, который я использовал для загрузки выбранного изображения:
StorageReference sr = mStorageRef.child("images/img" +selected_img_num + ".png");
sr.getBytes(1024 * 1024).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
//I save the image here
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(final_treatement.this, R.string.oper_failed, Toast.LENGTH_LONG).show();
finish();
}
});
Мои зависимости:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-core:16.0.3'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.firebaseui:firebase-ui-database:0.4.0'
implementation 'com.google.android.gms:play-services-ads:15.0.1'
implementation 'com.google.firebase:firebase-storage:16.0.2'
implementation 'com.google.firebase:firebase-auth:16.0.3'
}
apply plugin: 'com.google.gms.google-services'
Мой файл манифеста:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<application
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@drawable/appicon"
android:label="@string/app_name"
android:largeHeap="true"
android:roundIcon="@drawable/appicon"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".choose_image">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".final_treatement"/>
обратите внимание, что я активировал анонимный вход в консоль Firebase
Я не знаю, почему это работало раньше и не удалось здесь
Пожалуйста, ответьте, если что-то отсутствует