Firebase
#39627208
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
Участник
Откуда: г. Курган
Сообщения: 749
|
|
skyANA, спасибо, но я и так запарился тонны интернета рыть. Скуль был последней надеждой :)
Ответ я уже нашел сам. Может, кому пригодится
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88.
/*
Создаем объекты базы данных
параметры инициализации (optinons для initializeApp()):
{
apiKey: "AIza....", // Auth / General Use обязателен
databaseURL: "https://YOUR_APP.firebaseio.com", // Realtime Database необязателен, но см. ниже
authDomain: "YOUR_APP.firebaseapp.com", // Auth with popup/redirect необзательны, если не юзаются сервисы
storageBucket: "YOUR_APP.appspot.com", // Storage
messagingSenderId: "123456789" // Cloud Messaging
}
*/
export let firebaseApp = null; // firebase.app.App
export let db = null; // firebase.database.Database
/*
подключаемся к БД
*/
// читаем файл с параметрами БД
fetch('conf/fbdb.conf')
.then(function(response) {
// парсим файл:
// при отсутствии файла (response.status: 404) или пустом файле (response.status: 200) скакнем в .catch
// с error.message: JSON.parse: unexpected character at line 1 column 1 of the JSON data
// и без error.code (?)
return response.json();
})
.then(function(optinons) {
// получаем firebase.app.App
// при отсутствии в optinons apiKey скакнем в .catch c error.code: "auth/invalid-api-key"
return Firebase.initializeApp(optinons);
})
.then(function(app) {
// Проверять корректность полученного firebase.app.App по Firebase.apps.length, как советуют в интернете,
// не получается, ибо Firebase.apps.length = 1 даже при неправильном apiKey.
// Проверять корректность firebase.app.App будем с помощью фейковой аутентификации
// при неверном apiKey скакнем в .catch, ветку else с error.code: "auth/invalid-api-key"
app.auth()
.signInWithEmailAndPassword('fake@ema.il', 'password')
.catch(function (error) {
if( error.code == "auth/user-not-found" ){
// firebase.app.App инициализировано нормально
firebaseApp = app; // firebase.app.App получили
try { // без этого при отсутствии databaseURL получим ошибку в консоли, но в catch'и не зайдем
let dbt = firebaseApp.database(); // получаем firebase.database.Database
// если отстуствует databaseURL в optinons для initializeApp или он не передан в firebaseApp.database(),
// то мы скакнем в catch с error.message:
// "FIREBASE FATAL ERROR: Can't determine Firebase Database URL. Be sure to include databaseURL option when calling firebase.intializeApp(). "
// и без error.code (?)
// проверять подключение будем делая попытку записи в "sessions"
dbt.ref("sessions").push({
// если databaseURL в optinons для initializeApp правильный, мы скакнем в .push.catch
// с error.code: "PERMISSION_DENIED"
startedAt: Firebase.database.ServerValue.TIMESTAMP
// если databaseURL в optinons для initializeApp поврежден,
// в консоли браузера мы получим разовую ошибку:
// Firefox не может установить соединение с сервером wss://YOUR_APP.firebaseio.coma/...
// и периодические предупреждения:
// Загрузка <script> по адресу «https://YOUR_APP.firebaseio.coma/...» не удалась.
// но в .catch'и мы не уйдем
}) // dbt.ref("sessions").push
.catch(function(error){
// если БД подключена нормально, получим error.code: "PERMISSION_DENIED" здесь
// и можем активировать кнопку логона в приложение
if( error.code == "PERMISSION_DENIED" ) {
db = dbt; // firebase.database.Database получили
eventBus.$emit('firebase-init'); // активировать кнопку логона в приложении
}
}); // db.ref("sessions").push.catch
}
catch(error) {
console.error('Connect to server error: (%s): %s', error.code, error.message);
eventBus.$emit('firebase-init', error.message); // покажем ошибку
}
} // if( error.code == "auth/user-not-found" )
else {
// неверный apiKey
console.error('Connect to server error: (%s): %s', error.code, error.message);
eventBus.$emit('firebase-init', error.message);
}
}); // .signInWithEmailAndPassword('fake@ema.il', 'password').catch
}) // .then(function(app)
.catch(function(error){
console.error('Connect to server error: (%s): %s', error.code, error.message);
eventBus.$emit('firebase-init', error.message);
});
|
|