Firebase 存储规则
rules_version = '2';
// service firebase.storage {
// match /b/{bucket}/o {
// match /{allPaths=**} {
// allow read, write: if true;
// }
// }
// }
service firebase.storage {
// Only a user can upload their file, but anyone can view it
match /users/{userId}/{fileName} {
allow read;
allow write: if true;
}
}
登录代码
Future loginUser() async {
{
auth.authStateChanges().listen((User user) {
if (user == null) {
//print('User is currently signed out!');
}
});
isSignedIn = true;
final user = await gSignIn.signIn();
if (user == null) {
isSignedIn = false;
return;
} else {
final googleAuth = await user.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
await auth.signInWithCredential(credential);
print(credential);
isSignedIn = false;
}
}
// saveUserInfoToFireStore();
// await gSignIn
// .signIn()
// .then((gSignInAccount) => controlSignIn(gSignInAccount));
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => HomePage()),
// );
}
压缩图片
String status = '';
String imageUrl;
bool isLoading;
Future compressingImage() async {
final tDirectory = await getTemporaryDirectory();
final path = tDirectory.path;
ImD.Image mImageFile = ImD.decodeImage(eImage.readAsBytesSync());
final compressedImageFile = File('$path/img$postId.jpg')
..writeAsBytesSync(ImD.encodeJpg(mImageFile, quality: 99));
setState(() {
eImage = compressedImageFile;
});
}
将照片上传到 Firebase 存储
Future<String> uploadPhoto(mImageFile) async {
await gCurrentUser.authentication;
final StorageReference reference =
FirebaseStorage.instance.ref().child("Event Banners");
StorageUploadTask mStorageUploadTask =
reference.child("post_$postId.jpg").putFile(mImageFile);
StorageTaskSnapshot storageTaskSnapshot =
await mStorageUploadTask.onComplete;
String downloadUrl = await storageTaskSnapshot.ref.getDownloadURL(); //Getting error here
return downloadUrl;
}
收到错误:存储异常:
E/StorageException(13107): StorageException has occurred.
E/StorageException(13107): User is not authenticated, please authenticate using Firebase Authentication and try again.
E/StorageException(13107): Code: -13020 HttpResult: 401
E/StorageException(13107): The server has terminated the upload session
E/StorageException(13107): java.io.IOException: The server has terminated the upload session
E/StorageException(13107): at com.google.firebase.storage.UploadTask.serverStateValid(UploadTask.java:331)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.shouldContinue(UploadTask.java:300)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.run(UploadTask.java:221)
E/StorageException(13107): at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
E/StorageException(13107): at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
E/StorageException(13107): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(13107): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(13107): at java.lang.Thread.run(Thread.java:923)
E/StorageException(13107): Caused by: java.io.IOException: { "error": { "code": 401, "message": "Firebase App Check token is invalid." }}
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
E/StorageException(13107): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
E/StorageException(13107): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.sendWithRetry(UploadTask.java:467)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.beginResumableUpload(UploadTask.java:268)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.run(UploadTask.java:216)
E/StorageException(13107): ... 5 more
E/StorageException(13107): StorageException has occurred.
E/StorageException(13107): User is not authenticated, please authenticate using Firebase Authentication and try again.
E/StorageException(13107): Code: -13020 HttpResult: 401
E/StorageException(13107): The server has terminated the upload session
E/StorageException(13107): java.io.IOException: The server has terminated the upload session
E/StorageException(13107): at com.google.firebase.storage.UploadTask.serverStateValid(UploadTask.java:331)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.shouldContinue(UploadTask.java:300)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.run(UploadTask.java:221)
E/StorageException(13107): at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
E/StorageException(13107): at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
E/StorageException(13107): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(13107): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(13107): at java.lang.Thread.run(Thread.java:923)
E/StorageException(13107): Caused by: java.io.IOException: { "error": { "code": 401, "message": "Firebase App Check token is invalid." }}
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
E/StorageException(13107): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
E/StorageException(13107): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.sendWithRetry(UploadTask.java:467)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.beginResumableUpload(UploadTask.java:268)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.run(UploadTask.java:216)
E/StorageException(13107): ... 5 more
E/StorageException(13107): StorageException has occurred.
E/StorageException(13107): User is not authenticated, please authenticate using Firebase Authentication and try again.
E/StorageException(13107): Code: -13020 HttpResult: 401
E/StorageException(13107): The server has terminated the upload session
E/StorageException(13107): java.io.IOException: The server has terminated the upload session
E/StorageException(13107): at com.google.firebase.storage.UploadTask.serverStateValid(UploadTask.java:331)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.shouldContinue(UploadTask.java:300)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.run(UploadTask.java:221)
E/StorageException(13107): at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
E/StorageException(13107): at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
E/StorageException(13107): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(13107): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(13107): at java.lang.Thread.run(Thread.java:923)
E/StorageException(13107): Caused by: java.io.IOException: { "error": { "code": 401, "message": "Firebase App Check token is invalid." }}
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
E/StorageException(13107): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
E/StorageException(13107): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.sendWithRetry(UploadTask.java:467)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.beginResumableUpload(UploadTask.java:268)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.run(UploadTask.java:216)
E/StorageException(13107): ... 5 more
E/StorageException(13107): StorageException has occurred.
E/StorageException(13107): User is not authenticated, please authenticate using Firebase Authentication and try again.
E/StorageException(13107): Code: -13020 HttpResult: 401
E/StorageException(13107): The server has terminated the upload session
E/StorageException(13107): java.io.IOException: The server has terminated the upload session
E/StorageException(13107): at com.google.firebase.storage.UploadTask.serverStateValid(UploadTask.java:331)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.shouldContinue(UploadTask.java:300)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.run(UploadTask.java:221)
E/StorageException(13107): at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
E/StorageException(13107): at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
E/StorageException(13107): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(13107): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(13107): at java.lang.Thread.run(Thread.java:923)
E/StorageException(13107): Caused by: java.io.IOException: { "error": { "code": 401, "message": "Firebase App Check token is invalid." }}
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
E/StorageException(13107): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
E/StorageException(13107): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.sendWithRetry(UploadTask.java:467)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.beginResumableUpload(UploadTask.java:268)
E/StorageException(13107): at com.google.firebase.storage.UploadTask.run(UploadTask.java:216)
E/StorageException(13107): ... 5 more
E/StorageException(13107): StorageException has occurred.
E/StorageException(13107): User is not authenticated, please authenticate using Firebase Authentication and try again.
E/StorageException(13107): Code: -13020 HttpResult: 401
E/StorageException(13107): { "error": { "code": 401, "message": "Firebase App Check token is invalid." }}
E/StorageException(13107): java.io.IOException: { "error": { "code": 401, "message": "Firebase App Check token is invalid." }}
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
E/StorageException(13107): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
E/StorageException(13107): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
E/StorageException(13107): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
E/StorageException(13107): at com.google.firebase.storage.GetDownloadUrlTask.run(GetDownloadUrlTask.java:76)
E/StorageException(13107): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/StorageException(13107): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/StorageException(13107): at java.lang.Thread.run(Thread.java:923)
D/ViewRootImpl[MainActivity](13107): windowFocusChanged hasFocus=false inTouchMode=true
W/vent_managemen(13107): Accessing hidden method Ldalvik/system/CloseGuard;->close()V (greylist,core-platform-api, linking, allowed)
Lost connection to device.
Exited (sigterm)
答案 0 :(得分:0)
我也遇到了同样的问题(在Java-Android中),我启用了Firebase App Check/SafetyNet并将验证相关代码添加到Application类中,它开始正常工作。
if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(getApplicationContext())
== ConnectionResult.SUCCESS) {
SafetyNet.getClient(this).attest((Build.DEVICE + System.currentTimeMillis()).getBytes(),
DatabaseConstants.ADV_KEY)
.addOnSuccessListener(
response -> Log.v("ATTEST", "SUCCESSFUL"))
.addOnFailureListener(e -> {
if (e instanceof ApiException) {
// An error with the Google Play services API contains some
// additional details.
ApiException apiException = (ApiException) e;
// You can retrieve the status code using the
// apiException.getStatusCode() method.
Log.v("ATTEST", "ERROR" + apiException.getStatus().getStatusMessage());
} else {
}
Log.v("ATTEST", "ERROR");
});
} else {
Toast.makeText(this, "Update Google Services", Toast.LENGTH_SHORT).show();
}
FirebaseApp.initializeApp(/*context=*/ this);
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
SafetyNetAppCheckProviderFactory.getInstance());