묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
애플 로그인 위해 애플 개발자 인증센터는 Developer 프로그램 가입해야 하나요?
안녕하세요?현재까지는 잘 따라오고 있다가 애플 인증센터에서 막혔는데요.강사님과 같은 화면이 나오지 않고 약간 간소화된 화면이 나오는데요.Apple Developer Program 가입 안해서 이런 화면이 나오는거 같은데, 반드시 가입해야 하나요?가입을 하려면 129,000 원 내라고 하던데, 임시로 테스트로 할 수 있는 방안은 없는지요?
-
해결됨[플러터플로우]코딩 없이 한 달 만에 앱 만들기
특정강의 사운드가 한쪽만 들립니다.
다 그런건 아닌것 같구 가장 기본이자 가장 많이 활용하는 Column, Row 강의에서 사운드가 한쪽만 들리는데 저만 그런가 해서요.스피커가 아니라 헤드셋을 써서 강의들 듣다보니 한쪽만 들려요..ㅎㅎ
-
해결됨Flutter로 SNS 앱 만들기
Provider 사용법 질문
저는 원래 Provider를 ChangeNotifier와 함께 사용하여notifyListener()를 통해 필요할 때 빌드호출을 진행하였습니다 이 강의에서는 각 State를 extends하고 LocatorMixin 후read/watch를 통해 상태를 관리하는 것 같습니다 보통 state를 따로 만들어 stateNotifier로 관리하는 게 더욱 표준적인 방법일까요?
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
GoogleService-Info.plist > REVERSED_CLIENT_ID 안보입니다.
아무리 찾아봐도 안보이는데 뭐가 잘못된 것일까요?<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>API_KEY</key> <string>AIzaSyDrx2zMhB0rjE20rHntX6p1qG2Ya5y39JA</string> <key>GCM_SENDER_ID</key> <string>914949717898</string> <key>PLIST_VERSION</key> <string>1</string> <key>BUNDLE_ID</key> <string>com.archy712.bookreviewhome01.bookreviewHome01</string> <key>PROJECT_ID</key> <string>bookreview-home-01</string> <key>STORAGE_BUCKET</key> <string>bookreview-home-01.appspot.com</string> <key>IS_ADS_ENABLED</key> <false></false> <key>IS_ANALYTICS_ENABLED</key> <false></false> <key>IS_APPINVITE_ENABLED</key> <true></true> <key>IS_GCM_ENABLED</key> <true></true> <key>IS_SIGNIN_ENABLED</key> <true></true> <key>GOOGLE_APP_ID</key> <string>1:914949717898:ios:66b1d2b693a784b6029273</string> </dict> </plist>
-
해결됨Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
bookmark 목록 불러오는 중 Error: No such document 발생하였습니다.
북마크 강의에서 실행 하였을때 잘 작동하였으나, 막바지 배포 전 페이지 기능 확인 중에 오류 발견하였습니다. 아래는 도큐먼트이름과, 에러코드, 작성한 코드입니다. 선생님의 코드와 비교를 하고 복붙도 해보았으나 에러가 잡히지않았습니다. 도큐먼트 이름도 틀린 점이 없어 난항을 겪고 있습니다.답변 주시면 감사하겠습니다.createAt 오타 아닙니다!ㅠㅠ//post.js export async function getUserBookmarks(uid) { const q = query( collection(db, 'users', uid, 'bookmarks'), orderBy('createAt', 'desc'), limit(5), ); const querySnapshot = await getDocs(q); // 게시글 상세페이지 함수를 이용해 정보가져오기 return Promise.all( querySnapshot.docs.map(bookmarkDoc => getPost(bookmarkDoc.id)), ) .then(result => console.log(result)) .catch(e => console.error(e)); } //bookmark.vue<template> <PostList :items="items" /> {{ items }} </template> <script setup> import { useAsyncState } from '@vueuse/core'; import { getUserBookmarks } from 'src/services'; import { useAuthStore } from 'src/stores/auth'; import PostList from 'src/components/apps/post/PostList.vue'; const authStore = useAuthStore(); const { state: items } = useAsyncState(() => getUserBookmarks(authStore.uid)); </script> <style lang="scss" scoped></style>
-
해결됨Flutter로 SNS 앱 만들기
Firebase
Firebase로 배포까지 가능한가용 .?
-
미해결
onSnapshot 함수 unsubscribe 에 대해서 질문이 있습니다
제가 궁금한건 다른 페이지에 있을 때에도 스냅샷 함수를 가동시켜 비용이 계속해서 발생하는 것을 막기위해 온스냅샷 함수를 unsubscribe, 구독취소하는 코드인데요어째서 제가 읽기에는 unsubscribe = ~ 온스냅샷함수 ~...return () => unsubscribe함수 실행useEffect cleanup기능으로 언마운트시 온스냅샷함수를 정지하려는데 다시 온스냅샷함수를 실행? 제가 어떻게 잘못 이해하는건지 모르겠어요 .. ㅠㅠexport default function Timeline() { const [tweets, setTweet] = useState<ITweet[]>([]); let unsubscribe: Unsubscribe | null = null; const fetchTweets = async () => { const tweetsQuery = query( collection(db, "tweets"), orderBy("createdAt", "desc"), limit(25) ); unsubscribe = await onSnapshot(tweetsQuery, (snapshot) => { const tweets = snapshot.docs.map((doc) => { const { tweet, createdAt, userId, username, photo } = doc.data(); return { tweet, createdAt, userId, username, photo, id: doc.id, }; }); setTweet(tweets); }); }; useEffect(() => { fetchTweets(); return () => { unsubscribe && unsubscribe(); }; }, []); }
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
강의 "데이터바인딩 gradle 설정에서 오류가 난다면?"에 잘못된 정보가 있습니다
와 같이 build.gradle에 작성을 했을 때 에러가 난다면dataBinding { enabled = true }이렇게 시도해보세요 :)라고 되어있는데 다음과 같이 수정하였으면 좋겠습니다.와 같이 build.gradle에 작성을 했을 때 에러가 난다면dataBinding { enable = true }이렇게 시도해보세요 :)(enabled = true -> enable = true로 수정을 해야 잘 작동하는 것으로 확인하였습니다 수정 부탁드립니다. 감사합니다 :) )
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
Binding
안녕하세요, ‘데이터 바인딩 설명’강의를 보고 따라하다가 MainActivity에 영상에 나온데로binding = DataBindingUtil.setContentView를 쳤는데 영상과 다르게 괄호가 두개 나와서요. 어떻게해야 할까요?
-
해결됨Flutter로 SNS 앱 만들기
flutter 프로젝트와 firebase연동
확인차 문의 드려요. 새 프로젝트 할때 마다 강의 내용처럼 매번 설치 해야 되는거죠.npm install -g firebase-toolsdart pub global activate flutterfire_cli..
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
파이어베이스 회원가입 구현 부분에서 emailArea 와 passwordArea, passwordArea2 이 부분이 빨간색이에요
파이어베이스 회원가입 구현 부분에서 emailArea 와 passwordArea, passwordArea2 이 부분이 빨간색이며 Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResourcesRunnable이런 오류가 나요. ㅜㅜ 그리고 package com.juwon.mysolelife.auth import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import androidx.databinding.DataBindingUtil import com.google.firebase.Firebase import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.auth import com.juwon.mysolelife.R import com.juwon.mysolelife.databinding.ActivityIntroBinding class JoinActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth private lateinit var binding: ActivityIntroBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_join) setContentView(R.layout.activity_join) binding.joinBtn.setOnClickListener { val email = binding.emailArea.text.toString() val password1 = binding.passwordArea.text.toString() val password2 = binding.passwordArea2.text.toString() if(email.isEmpty()) { Toast.makeText(this, "이메일을 입력 해 주세요", Toast.LENGTH_LONG).show() } } auth = Firebase.auth // auth.createUserWithEmailAndPassword(email, password) auth.createUserWithEmailAndPassword("sjw9179@kakao.com", "tlswndnjs1!") .addOnCompleteListener(this) { task -> if (task.isSuccessful) { Toast.makeText(this, "성공", Toast.LENGTH_LONG).show() } else { Toast.makeText(this, "실패", Toast.LENGTH_LONG).show() } } } }이런식으로 코드가 짜여있습니다.
-
해결됨풀스택 리액트 라이브코딩 - 간단한 쇼핑몰 만들기
장바구니 담기 버튼 누르면 404에러가 뜹니다
강의 여러번 돌려보고 커뮤니티 질문에도 찾아보고 구글링도 해봤는데 어디서 뭐가 잘못된 건지도 모르겠어서 질문 올립니다! 대체 어디서 잘못 된 걸까요,,,queryClient.tsimport request, { RequestDocument } from "graphql-request"; import { useQuery, useMutation, useQueryClient, QueryClient, QueryClientProvider, } from "react-query"; // any 타입 미리 만들어줌 type AnyOBJ = { [key: string]: any }; // Create a client export const getClient = (() => { let client: QueryClient | null = null; return () => { if (!client) client = new QueryClient({ defaultOptions: { queries: { // 캐시타임 : 이 시간 안에는 다시 상세페이지 들어가도 요청 안 함 cacheTime: 1000 * 60 * 60 * 24, staleTime: 1000 * 60, refetchOnMount: false, refetchOnReconnect: false, refetchOnWindowFocus: false, }, }, }); return client; }; })(); // 기본 url const BASE_URL = "/"; // restFetcher async로 요청 export const restFetcher = async ({ method, path, body, params, }: { // 메소드 타입 정의 method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH"; // url대신 path를 받음 path: string; // post나 put의 경우엔 body가 필요하므로 body?: AnyOBJ; // 파라미터 params?: AnyOBJ; }) => { try { // 기본 url + path let url = `${BASE_URL}${path}`; // RequestInit은 node에 기본적으로 정의되어 있음 const fetchOptions: RequestInit = { method, headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": BASE_URL, }, }; // param이 오면 if (params) { const searchParams = new URLSearchParams(params); url += "?" + searchParams.toString(); } // body가 오면 if (body) fetchOptions.body = JSON.stringify(body); // url와 옵션들 요청 // 메서드와 path를 받아서 완성 const res = await fetch(url, fetchOptions); // 받은 것을 json으로 바꾸기 const json = await res.json(); return json; // 에러 출력 } catch (err) { console.error(err); } }; // graphqlFetcher export const graphqlFetcher = <T>(query: RequestDocument, variables = {}) => request<T>(BASE_URL, query, variables); // 쿼리 키 만들기 export const QueryKeys = { PRODUCTS: "PRODUCTS", CART: "CART", }; product/item.tsx 컴포넌트import { Link } from "react-router-dom"; import { Product } from "../../../graphql/products"; import { useMutation } from "react-query"; import { graphqlFetcher } from "../../../queryClient"; import { ADD_CART, Cart } from "../../../graphql/cart"; const ProductItem = ({ imageUrl, price, title, id }: Product) => { const { mutate: addCart } = useMutation(({ id }: { id: string }) => graphqlFetcher(ADD_CART, { id }) ); return ( <li className="products-item"> <Link to={`/products/${id}`}> <p className="products-item__title">{title}</p> <img className="products-item__image" src={imageUrl} /> <span className="products-item__price">${price}</span> </Link> <button className="product-item__add-cart" onClick={() => { addCart({ id }); }} > 장바구니 담기 </button> </li> ); }; export default ProductItem; 콘솔에 뜨는 오류나는 파일 올려드립니다..
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
파이어베이스 SDK 구정이 또 달라져서 보라고 주신 문서들에도 안 나와있습니다.
파이어베이스 SDK 구정이 또 달라져서 보라고 주신 문서들에도 안 나와있습니다.
-
해결됨Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
firebase 설정시 문제가 생겨요
Failed to load resource: net::ERR_BLOCKED_BY_CLIENTclient-entry.js:144 [Quasar] boot error: TypeError: Failed to fetch dynamically imported module: http://localhost:9000/src/boot/firebase.js(anonymous) @ client-entry.js:144 quasar.config.js 에서 boot: ['firebase'] 설정시 위와 같은 console.error가 발생합니다!구글로그인 단계로 넘어가지 못하고 있는데, 방법을 모르겠어요 ㅠㅠ
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
트와이스 사진첩 강의에서
원래 기기에 따라 이미지가 찌그러져 나오는 경우도 있나요?
-
미해결Flutter로 SNS 앱 만들기
저는 키보드 동작이 안돼는데 원래 그런가요.
저는 키보드 동작이 안돼는데요 원래 그런가요.에뮬레이터로 테스트 하는데 이상은 없지만 불편해서요.
-
해결됨Flutter로 SNS 앱 만들기
Firebase StreamBuilder 사용은 왜 안 하나요?
댓글 불러오는 과정을 보고 있는데, 지금까지 각 모델(feed, comment) 전부 Firebase에서 전체 document 받아와서 list로 변환 후, update 하고나면 Firebase에 업로드하는데 그와 동시에 screen에 반영하기 위해 새로 get하여 list를 만들어서 표시해주는 것 같습니다. Firebase StreamBuilder를 사용하면 실시간으로 모든 변화들이 바로 업데이트 되어서 기존에 많이 썼는데, 혹시 이렇게 하지 않는 이유가 있을까요? (데이터 통신이 불필요하게 많이 일어나서 트래픽/요금 등의 문제가 있다든지 하는 현실적인 이유가 있는지 궁금했습니다)
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
타이틀바
저 앱실행시킬때 타이틀바를 없애는 부분을 보고있는데요. 저는 앱실행시키면 처음부터 타이틀 바가 안나오고 theme.xml도 영상과는 다르게 되어 있는데 그럼 굳이 안해도 상관 없는건가요?버전은 androidstudio hedgehog입니다.
-
해결됨Flutter로 SNS 앱 만들기
저는 왜 signUp함수가 안나와요.
(사진)
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
if문 중복 안하는 방법
선생님이 알려주시는 대로 한번 코드를 작성하고,어떻게하면 조금 더 간편하고 읽기 쉬운 코드를 만들수있을까고민해 봤습니다. if문을 통한 것 보다 when절이 나을꺼같아 해봤는데 앱은 잘 작동하는데 이런식으로 써도 될지요~?? 남은 강의도 열심히 잘 들어볼께요! package com.example.twice import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.ImageView class ImageInsideActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_image_inside) val getData = intent.getStringExtra("data") val memberImage = findViewById<ImageView>(R.id.memberImageArea) when(getData){ "1" -> memberImage.setImageResource(R.drawable.member_1) "2" -> memberImage.setImageResource(R.drawable.member_2) "3" -> memberImage.setImageResource(R.drawable.member_3) "4" -> memberImage.setImageResource(R.drawable.member_4) "5" -> memberImage.setImageResource(R.drawable.member_5) "6" -> memberImage.setImageResource(R.drawable.member_6) "7" -> memberImage.setImageResource(R.drawable.member_7) "8" -> memberImage.setImageResource(R.drawable.member_8) "9" -> memberImage.setImageResource(R.drawable.member_9) } } }