Я схожу с ума здесь ... Я протестировал свое приложение Flutter, использующее Firebase, и все работает отлично. На каждом симуляторе, на реальном устройстве, в TestFlight. Все работает.
НО обозреватель Apple продолжает получать сообщение об ошибке при попытке загрузить что-либо в Firebase, но error
говорит только:
an unknown error occurred please check the server response
Здесь происходит error
:
Future<Memory?> addMemory({
required BuildContext context,
required String title,
required List<String> imageFilePaths,
required DateTime dateTime,
required String? story,
int? sortIndexIfEditing,
}) async {
try {
Year currentYear =
Provider.of<DataProvider>(context, listen: false).getCurrentYear();
Month currentMonth =
Provider.of<DataProvider>(context, listen: false).getCurrentMonth();
int currentMonthIndex = currentMonth.month;
String uid = AuthService.currentUser!.uid;
List<String> imageLocations = [];
for (String path in imageFilePaths) {
String uidForLocation = Uuid().v1();
String imageLocation =
'$uid/${currentYear.id}/${currentMonth.id}/$uidForLocation';
await FirebaseStorage.instance.ref(imageLocation).putFile(
File(path),
);
imageLocations.add(imageLocation);
}
Memory? memoryToReturn = await _addMemoryToDatabse(
context: context,
imageLocations: imageLocations,
currentYear: currentYear,
currentMonthIndex: currentMonthIndex,
title: title,
dateTime: dateTime,
story: story,
sortIndexIfEditing: sortIndexIfEditing,
);
return memoryToReturn;
} on FirebaseException catch (e) {
print('addMemory failed: ' + e.message.toString());
AlertService.showSnackBar(
title: 'Ups, hier ist etwas schiefgelaufen...',
description: e.message.toString(),
isSuccess: false,
);
return null;
}
}
Это не про Security Rules
, уже проверил, что:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
Что еще может означать это error
? Я хотел бы предоставить вам больше информации, но это все, что у меня есть.
Сообщите мне свой адрес электронной почты, если вам нужен доступ к TestFlight, чтобы вы могли протестировать его самостоятельно.
@Монаша, это открыло бы мою Storage
для всех, и тебе определенно не следует этого делать.
На самом деле, я имел в виду изменение прав доступа к «хранилищу» в соответствии с вашими требованиями. Это был просто пример. Иметь множественное совпадение /{document=**} { разрешить чтение, запись: если request.auth != null; } условия, если у вас есть несколько условных путей.
Эта ошибка связана с правилами хранения, которые вы установили в Firebase. Однако вы должны быть в состоянии воспроизвести это, поскольку, насколько я знаю, вы предоставляете учетную запись Apple Reviewer, поэтому вы можете перейти к ней и отладить ее. Кроме того, поскольку вы используете Firebase, включите отчеты о сбоях, и вы будете лучше видеть, что происходит. Честно говоря, я поощряю это во всех запросах, чтобы иметь возможность понять, что происходит с вашим приложением, когда что-то пойдет не так.
Они проверили это с помощью учетной записи, которую я им дал. И все работает так, как ожидалось. Ничего не регистрируется. Это было странно. Но я повторно отправил его сегодня (ничего не изменил в своем приложении), и он был принят. С
Если это происходит только с Apple Reviewer и только при доступе к файлам в облачном хранилище через Firebase, вероятно, проблема возникает и здесь: stackoverflow.com/questions/75573747/…
@FrankvanPuffelen звучит точно так же, как мой случай! Я отмечу это как дубликат.
как предположил Фрэнк, это известная проблема с Firebase Storage.
Это еще один SO-вопрос о том же случае:
Кстати, мое приложение только что приняли. Я изменил свой Security Rules
на allow read, write: if true
, чего делать НЕ ДОЛЖНО. После того, как оно было принято, я изменил его на безопасное правило.
Я не знаю, была ли на самом деле проблема auth
, потому что мой Firebase-Log
не показал отказов.
попробуйте добавить правила в хранилище вот так, rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { разрешить чтение, запись: если правда; } } }