커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
firbase 연결 문제
[왕초보] 나만의 수익성 앱, 앱개발 종합반 v3
기타
북마크
박*수
댓글
3
추천
0
조회수
9
조회수
9
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


오류 대비 코드로 튜터님께서


if (!firebase.apps.length) {

    firebase.initializeApp(firebaseConfig);

}

를 알려주셨는데 계속 오류가 뜨네요....

LoginPage에 소셜로그인 구현 후 파이어베이스로 연동하려는데...잘 안되네요..ㅠㅠ

스파르타 즉문즉답






작성한 코드 및 에러 메세지

<FirebaseConfig>

import { initializeApp } from "firebase/app";

import firebase from "firebase/compat/app";



// 사용할 파이어베이스 서비스 주석을 해제합니다

import "firebase/compat/auth";

import "firebase/compat/database";

import "firebase/compat/firestore";

//import "firebase/compat/functions";

import "firebase/compat/storage";



// Initialize Firebase

//파이어베이스 사이트에서 봤던 연결정보를 여기에 가져옵니다

const firebaseConfig = {

  apiKey: "xxx",

  authDomain: "xxxx",

  databaseURL: "xxxm",

  projectId: "xxx",

  storageBucket: "xxxx",

  messagingSenderId: "xxx",

  appId: "xxx",

};



//사용 방법입니다.

//파이어베이스 연결에 혹시 오류가 있을 경우를 대비한 코드로 알아두면 됩니다.

if (!firebase.apps.length) {

    firebase.initializeApp(firebaseConfig);

}



export const firebase_db = initializeApp(firebaseConfig)



<LoginPage>

import * as React from 'react';

import * as WebBrowser from 'expo-web-browser';

import { ResponseType } from 'expo-auth-session';

import * as Google from 'expo-auth-session/providers/google';

import { initializeApp } from 'firebase/app';

import { getAuth, GoogleAuthProvider, signInWithCredential, onAuthStateChanged } from 'firebase/auth';

import { Button } from 'react-native';

import { firebase_db } from '../auth/FirebaseConfig';

import firebaseConfig from '../auth/FirebaseConfig'



// Initialize Firebase

initializeApp({

  firebase_db

});


WebBrowser.maybeCompleteAuthSession();


export default function LoginPage() {



  const [request, response, promptAsync] = Google.useIdTokenAuthRequest(

    {

      clientId: 'xxx',

    },

  );


  React.useEffect(() => {

    if (response?.type === 'success') {

      const { id_token } = response.params;

      const auth = getAuth();

      const credential = GoogleAuthProvider.credential(id_token);

      signInWithCredential(auth, credential);

    }

  }, [response]);

 

  onAuthStateChanged(auth, async (user) => {

    if (user) {

      const { uid, email, displayName, accessToken } = user;

      console.log("uid :", uid)

      console.log("email :", email)

      console.log("displayName :", displayName)

      console.log("accessToken :", accessToken)

    }

  });

 

  return (

    <Button

      disabled={!request}

      title="Login"

      onPress={() => {

        promptAsync();

      }}

    />

  );

}



<MainPage>

import React, { useEffect, useState } from 'react';

import {View, StyleSheet, Text, Image, TouchableOpacity} from 'react-native';

import highHeel from '../../../assets/highHeel.jpg'

import {AntDesign} from '@expo/vector-icons';

import LoadingPage from '../form/LoadingPage';

import styles from '../../styles/MainPageStyles';

import MyStack from '../stacknavigator/StackNavigator';

import LoginPage from '../form/LoginPage';

import { createStackNavigator } from "@react-navigation/stack";

import { TouchableHighlight } from 'react-native-gesture-handler';

import { SliderBox } from 'react-native-image-slider-box';

import headerImage from '../../../assets/headerImage.jpg'

// import { widthPercentageToDP as wp, heightPercentageToDP as hp } from 'react-native-responsive-screen';

import { firebase_db } from '../auth/FirebaseConfig';






export default function MainPage({navigation}) {

 


    const [ready, setReady] = useState(true)

    useEffect(()=>{

        setTimeout(()=>{

            setReady(false)

        }, 3000)

    })


    state = {

        currentIndex : 1,

        imageList : [

            require('../../../assets/motivation.jpg'),

            require('../../../assets/lion.jpg'),

            require('../../../assets/writting.jpg')]

    }

   


   return ready ? <LoadingPage/> :  (


   


    <View style = {styles.container}>


        <View style = {styles.headerContainer}>


            <View style = {styles.headerImageContainer}>

                <Image source = {headerImage} style ={styles.headerImageStyle}/>

            </View>


            <View style = {styles.upperContainer}>


                <View style = {styles.uppercontainer01}>

                    <Image source = {highHeel}/>

                </View>


                <View style = {styles.upperContainer02}>

                    <Text style = {styles.headerText}>하루, 이틀 그리고 힐링</Text>

                </View>


            </View>


        </View>



        <View style = {styles.secondaryUpperContainer}>


            <View style = {styles.secondaryUpperContainer01}>

                <TouchableOpacity onPress={()=>{navigation.navigate('LoginPage')}}>

                <AntDesign name ="login" size = {24} color="black"/>

                </TouchableOpacity>

            </View>

           


            <View style = {styles.secondaryUpperContainer02}>

                <TouchableHighlight onPress={()=>{navigation.navigate('LoginPage')}} underlayColor = "blue">

                    <View style = {styles.menuContainer}>

                        <Text style = {styles.textStyle}>감동</Text>

                    </View>

                </TouchableHighlight>


                <TouchableOpacity>

                    <View style = {styles.menuContainer}>

                        <Text style = {styles.textStyle}>명언</Text>

                    </View>

                </TouchableOpacity>


                <TouchableOpacity>

                    <View style = {styles.menuContainer}>

                        <Text style = {styles.textStyle}>속담</Text>

                    </View>

                </TouchableOpacity>


                <TouchableOpacity>

                    <View style = {styles.menuContainer}>

                        <Text style = {styles.textStyle}>동기</Text>

                    </View>

                </TouchableOpacity>

            </View>


        </View>



        <View style = {styles.middleContainer}

           

        >


            <SliderBox

                autoplay = {true}

                circleLoop = {true}

                resizeMode = 'cover'

                images = {this.state.imageList}

                dotColor = 'rgba(0, 0, 0, 0)'

                inactiveDotColor = 'rgba(0, 0, 0, 0)'

               

                // ImageComponentStyle = {{width : wp('100%'), height : hp('30%')}}

                // currentImageEmitter = {(imageList) =>

                //         this.setState({currentIndex : index + 1})}

                   

            />


                <View>

                     <Text style = {styles.middleText}>꿈을 이루고자 하는 용기만 있다면 모든 꿈을 이룰 수 있다.</Text>

                     <Text sytle = {styles.middleText01}>-월트 디즈니-</Text>

                </View>


        </View>


       


        <View style = {styles.lowerContainer}>

           

        </View>

    </View>

  )

}

취소
 공유
취소
댓글 0
댓글 알림
나의얼굴