파이어베이스를 활용한 메신져 만들기 - Android
파이어베이스를 활용한 메신져 만들기 - Android
수강정보
(13개의 수강평)
265명의 수강생
스킬태그 #Firebase, #Android
22,000원
지식공유자 : 신휴창
19회 수업 · 총 10시간 24분 수업
기간 : 평생 무제한 시청
수료증 : 발급 강의
수강 난이도 : 중급이상
박수은 프로필

chat_messgages 생성이 안됩니다. 박수은 2018.07.23
하루 꼬박 강의 몇번반복해도...sendMessage() 메서드 실행시 첫줄의mChatMemeberRef = mFirebaseDb.getReference("chat_members").child(mChatId);이게 작동을 안하는것 같습니다. RealTimeBase를 조회해도chat_membersusers밖에없네요... 뭐가 문제일까요??아래에 수업해주신 ChatActivity 소스코드 입니다.public class ChatActivity extends AppCompatActivity {private String mChatId;@BindView(R.id.senderBtn)ImageView mSenderButton;@BindView(R.id.edtContent)EditText mMessageText;private FirebaseDatabase mFirebaseDb;private FirebaseUser mFirebaseUser;private DatabaseReference mChatRef;private DatabaseReference mChatMemberRef;private DatabaseReference mChatMessageRef;private DatabaseReference mUserRef;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.content_chat);ButterKnife.bind(this);mChatId = getIntent().getStringExtra("chat_id");mFirebaseDb = FirebaseDatabase.getInstance();mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();mUserRef = mFirebaseDb.getReference("users");}@OnClick(R.id.senderBtn)public void onSendEvent(View v) {if (mChatId != null) {sendMessage();Log.d("sendMessgae","센드메시지 실행");} else {createChat();Log.d("createChat","크리트 채팅 실행");}}private void sendMessage() {//메세지 키 생성mChatMessageRef = mFirebaseDb.getReference("chat_messages").child(mChatId);// chat_message > {chat_id} > {message_id} > messageInfoString messageId = mChatMessageRef.push().getKey();Log.d("chat_messages", messageId);String messageText = mMessageText.getText().toString();if (messageText.isEmpty()) { return;}final TextMessage textMessage = new TextMessage();textMessage.setMessageText(messageText);textMessage.setMessageDate(new Date());textMessage.setChatId(mChatId);textMessage.setMessageId(messageId);textMessage.setMessageType(Message.MessageType.TEXT);textMessage.setReadUserList(Arrays.asList(new String[]{mFirebaseUser.getUid()}));String[] uids = getIntent().getStringArrayExtra("uids");if (uids != null) { textMessage.setUnreadCount(uids.length - 1);}mMessageText.setText("");mChatMemberRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(final DataSnapshot dataSnapshot) { //unreadCount 셋팅하기 위한 대화 상대의 수 가져온다. long memberCount = dataSnapshot.getChildrenCount(); textMessage.setUnreadCount((int) memberCount - 1); mChatMemberRef.child(textMessage.getMessageId()).setValue(textMessage, new DatabaseReference.CompletionListener() { @Override public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { Iterator<DataSnapshot> memberIterator = dataSnapshot.getChildren().iterator(); while (memberIterator.hasNext()) { User chatMember = memberIterator.next().getValue(User.class); mUserRef.child(chatMember.getUid()) .child("chats") .child(mChatId) .child("lastMessage") .setValue(textMessage); if (!chatMember.getUid().equals(mFirebaseUser.getUid())) { mUserRef.child(chatMember.getUid()) .child("chats") .child(mChatId) .child("totalUnreadCount") .addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { long totalUnreadCount = dataSnapshot.getValue(long.class); dataSnapshot.getRef().setValue(totalUnreadCount+1); } @Override public void onCancelled(DatabaseError databaseError) { } }); } } } }); } @Override public void onCancelled(DatabaseError databaseError) { }});}private boolean isSentMessage = false;private void createChat() {//<방생성>//0. 방 정보 설정 <-- 기존 방이어야 가능함//1. 대화 상대가 내가 선택한 사람 추가//2. 각 상대별 chats에 방추가//3. 에너지 정보 중 읽은 사람에 내 정보 추가//4. 첫 메세지 전송final Chat chat = new Chat();mChatRef = mFirebaseDb.getReference("users").child(mFirebaseUser.getUid()).child("chats");mChatId = mChatRef.push().getKey();mChatMemberRef = mFirebaseDb.getReference("chat_members").child(mChatId);// mChatId = mChatRef.push() --> users >> uid >> chats >> chat_id 가져옴chat.setChatId(mChatId);chat.setCreateDate(new Date());//1:1 채팅String uid = getIntent().getStringExtra("uid");//1:n 채팅String[] uids = getIntent().getStringArrayExtra("uids");if (uid != null) { //1:1 uids = new String[]{uid};}List<String> uidList = new ArrayList<>(Arrays.asList(uids));uidList.add(mFirebaseUser.getUid());// 방타이틀 == 나를제외한 사용자이름 출력final StringBuffer titleBuffer = new StringBuffer();for (String userId : uidList) { // 유저의 uid >> userInfo mUserRef.child(userId).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(final DataSnapshot dataSnapshot) { User member = dataSnapshot.getValue(User.class); mChatMemberRef.child(member.getUid()) .setValue(member, new DatabaseReference.CompletionListener() { @Override public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { // USERS >> chats >> {chat_id} >> chatinfo dataSnapshot.getRef().child("chats").child(mChatId).setValue(chat); if (!isSentMessage) { Log.d("센드메세지","센드메세지 실행"); sendMessage(); isSentMessage = true; } } }); } @Override public void onCancelled(DatabaseError databaseError) { } });}}}

0
이경준 프로필

언리드카운트가 long형인 이유가 있나요? 이경준 2018.06.29
int형으로 해도 무관하지 않나요?이유가 있나요?

0
You lim 프로필

로그인 기능과 관련하여 You lim 2018.06.28
안녕하세요?로그인 기능을 보면 구글과 연동 하는듯 한데 IRC처럼 비회원이 익명으로 채팅방에 참가 할 수 없는지요?

0
인프러러러런 프로필

sign in 누르고 구글 로그인하면 안넘어가요.. 인프러러러런 2018.04.23
왜그러죠 대체 firebase.google에 다 설정햇는데ㅔ 이러네요

1
MMK MMK 프로필

git hub 오류, 파이어베이스 데이타베이스 설정 MMK MMK 2018.03.22
view > LoginActivity에서 private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {....user.setEmail(firebaseUser.getEmail());user.setName(firebaseUser.getDisplayName());user.setUid(firebaseUser.getUid());받아오는 이메일 이름 아이디 값이 오류가 나오는데어디서 고쳐야 하는것인지 잘 모르겠습니다.파이어베이스에서 데이터베이스를 만드셨는데무료 아이디여도 만드는데 문제는 없는건가요?예제소스대로 따라 가려면 일일히 설명해주시는 구조들을 수강생이 만들어야 하는것인가요?아니면 guthub처럼 파일로 불러올수 있는건가요?

0
Taewoo Jeon 프로필

프로젝트가 정상적으로 안드로이드 스튜디오에서 불러와지지 않습니다. Taewoo Jeon 2018.03.22
아래와 같은 에러가 납니다.Gradle 'firebaseMsg' project refresh failedError: Failed to find build Tools revision 25.0.0위의 툴을 인스톨하고 싱크 프로젝트해도 에러가 사라지지 않네요;;;어떻게 해야하나요?

0
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스