• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

푸시 메시지 추가후 에러 문제

18.05.06 22:12 작성 조회수 146

0

안녕하세요 강의 잘 듣고 있습니다 ㅎㅎ

푸쉬 메시지를 추가하고 나서 에러 구문이 생겨 난 것 같은데 어디가 문제인지 잘 모르겠네요

E/FirebaseInstanceId: Token retrieval failed: SERVICE_NOT_AVAILABLE

이 구문이 주기적으로 생성되고 있었습니다.

그리고 추가적으로 database에도 값들이 올라가지 않게 된 것 같네요 ㅠㅠ

순서대로 manifest, messageActivity, signUpActivity 입니다

'''<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.solive.knuprime031.knurun">

<application

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

<activity android:name=".SplashActivity">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity android:name=".loginActivity" />

<activity android:name=".signUpActivity" />

<activity android:name=".MainActivity" />

<activity android:name=".chat.MessageActivity" />

<!--<activity android:name=".SignUpActivity" />-->

<!--<activity android:name=".RequestCreateActivity" />-->

<activity android:name=".RequestCreateActivity"></activity>

<service android:name=".MyFirebaseMessagingService">

<intent-filter>

<action android:name="com.google.firebase.MESSAGING_EVENT" />

</intent-filter>

</service>

</application>

'''

'''package com.solive.knuprime031.knurun.chat;

import android.support.annotation.NonNull;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;

import android.widget.Toast;

import com.bumptech.glide.Glide;

import com.bumptech.glide.request.RequestOptions;

import com.google.android.gms.tasks.OnCompleteListener;

import com.google.android.gms.tasks.OnSuccessListener;

import com.google.android.gms.tasks.Task;

import com.google.firebase.auth.FirebaseAuth;

import com.google.firebase.database.DataSnapshot;

import com.google.firebase.database.DatabaseError;

import com.google.firebase.database.FirebaseDatabase;

import com.google.firebase.database.ServerValue;

import com.google.firebase.database.ValueEventListener;

import com.google.gson.Gson;

import com.solive.knuprime031.knurun.R;

import com.solive.knuprime031.knurun.model.ChatModel;

import com.solive.knuprime031.knurun.model.NotificationModel;

import com.solive.knuprime031.knurun.model.UserModel;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.TimeZone;

import okhttp3.Call;

import okhttp3.Callback;

import okhttp3.MediaType;

import okhttp3.OkHttpClient;

import okhttp3.Request;

import okhttp3.RequestBody;

import okhttp3.Response;

public class MessageActivity extends AppCompatActivity {

private String destinationUid;

private Button button;

private EditText editText;

private String uid;

private String chatRoomUid;

private RecyclerView recyclerView;

private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm");

private UserModel destinationUserModel;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_message);

uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

destinationUid = getIntent().getStringExtra("destinationUid");

recyclerView = (RecyclerView)findViewById(R.id.messageActivity_recyclerView);

button = (Button)findViewById(R.id.messageActivity_button);

editText = (EditText)findViewById(R.id.messageActivity_edtiText);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

ChatModel chatModel = new ChatModel();

chatModel.users.put(uid,true);

chatModel.users.put(destinationUid, true);

if(chatRoomUid == null) {

button.setEnabled(false);

Toast.makeText(MessageActivity.this, "Success", Toast.LENGTH_SHORT).show();

FirebaseDatabase.getInstance().getReference().child("chatrooms").push().setValue(chatModel).addOnSuccessListener(new OnSuccessListener<Void>() {

@Override

public void onSuccess(Void aVoid) {

checkChatRoom();

}

});

} else {

ChatModel.Comment comment = new ChatModel.Comment();

comment.uid = uid;

comment.message = editText.getText().toString();

comment.timeStamp = ServerValue.TIMESTAMP;

FirebaseDatabase.getInstance().getReference().child("chatrooms").child(chatRoomUid).child("comments").push().setValue(comment).addOnCompleteListener(new OnCompleteListener<Void>() {

@Override

public void onComplete(@NonNull Task<Void> task) {

sendGcm();

editText.setText("");

}

});

}

}

});

checkChatRoom();

}

void sendGcm() {

Gson gson = new Gson();

String userName = FirebaseAuth.getInstance().getCurrentUser().getDisplayName();

NotificationModel notificationModel = new NotificationModel();

notificationModel.to = destinationUserModel.pushToken;

notificationModel.notification.text = userName;

notificationModel.notification.title = editText.getText().toString();

notificationModel.data.text = userName;

notificationModel.data.title = editText.getText().toString();

RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utp8"), gson.toJson(notificationModel));

Request request = new Request.Builder()

.header("Content-Type","application/json")

.addHeader("Authorization","key=AIzaSyBNM5T3oCs_4gxClchRYvXbBQHdtCnw5Hc")

.url("https://gcm-http.googleapis.com/gcm/send")

.post(requestBody)

.build();

OkHttpClient okHttpClient = new OkHttpClient();

okHttpClient.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) throws IOException {

}

});

}

void checkChatRoom() {

FirebaseDatabase.getInstance().getReference().child("chatrooms").orderByChild("users/"+uid).equalTo(true).addListenerForSingleValueEvent(new ValueEventListener() {

@Override

public void onDataChange(DataSnapshot dataSnapshot) {

for (DataSnapshot item : dataSnapshot.getChildren()) {

ChatModel chatModel = item.getValue(ChatModel.class);

if(chatModel.users.containsKey(destinationUid)) {

chatRoomUid = item.getKey();

button.setEnabled(true);

recyclerView.setLayoutManager(new LinearLayoutManager(MessageActivity.this));

recyclerView.setAdapter(new RecyclerViewAdapter());

}

}

}

@Override

public void onCancelled(DatabaseError databaseError) {

}

});

}

class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

List<ChatModel.Comment> comments;

public RecyclerViewAdapter() {

comments = new ArrayList<>();

FirebaseDatabase.getInstance().getReference().child("users").child(destinationUid).addListenerForSingleValueEvent(new ValueEventListener() {

@Override

public void onDataChange(DataSnapshot dataSnapshot) {

destinationUserModel = dataSnapshot.getValue(UserModel.class);

getMessageList();

}

@Override

public void onCancelled(DatabaseError databaseError) {

}

});

}

void getMessageList() {

FirebaseDatabase.getInstance().getReference().child("chatrooms").child(chatRoomUid).child("comments").addValueEventListener(new ValueEventListener() {

@Override

public void onDataChange(DataSnapshot dataSnapshot) {

comments.clear();

for (DataSnapshot item : dataSnapshot.getChildren()) {

comments.add(item.getValue(ChatModel.Comment.class));

}

notifyDataSetChanged();

recyclerView.scrollToPosition(comments.size()-1);

}

@Override

public void onCancelled(DatabaseError databaseError) {

}

});

}

@NonNull

@Override

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, parent, false);

return new MessageViewHolder(view);

}

@Override

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

MessageViewHolder messageViewHolder = ((MessageViewHolder)holder);

if(comments.get(position).uid.equals(uid)) {

messageViewHolder.textView_message.setText(comments.get(position).message);

messageViewHolder.textView_message.setBackgroundResource(R.drawable.rightbubble);

messageViewHolder.linearLayout_destination.setVisibility(View.INVISIBLE);

messageViewHolder.textView_message.setTextSize(25);

messageViewHolder.linearLayout_main.setGravity(Gravity.RIGHT);

} else {

Glide.with(holder.itemView.getContext())

.load(destinationUserModel.profileImageUrl)

.apply(new RequestOptions().circleCrop())

.into(messageViewHolder.imageView_profile);

messageViewHolder.textView_name.setText(destinationUserModel.userName);

messageViewHolder.linearLayout_destination.setVisibility(View.VISIBLE);

messageViewHolder.textView_message.setBackgroundResource(R.drawable.leftbubble);

messageViewHolder.textView_message.setText(comments.get(position).message);

messageViewHolder.textView_message.setTextSize(25);

messageViewHolder.linearLayout_main.setGravity(Gravity.LEFT);

}

long unixTime = (long)comments.get(position).timeStamp;

Date date = new Date(unixTime);

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Seoul"));

String time = simpleDateFormat.format(date);

messageViewHolder.textView_time_stamp.setText(time);

}

@Override

public int getItemCount() {

return comments.size();

}

private class MessageViewHolder extends RecyclerView.ViewHolder {

public TextView textView_message;

public TextView textView_name;

public ImageView imageView_profile;

public LinearLayout linearLayout_destination;

public LinearLayout linearLayout_main;

public TextView textView_time_stamp;

public MessageViewHolder(View view) {

super(view);

textView_message = (TextView) view.findViewById(R.id.messageItem_textView_message);

textView_name = (TextView)view.findViewById(R.id.messageItem_textView_name);

imageView_profile = (ImageView)view.findViewById(R.id.messageItem_imageView_profile);

linearLayout_destination = (LinearLayout)view.findViewById(R.id.messageItem_linearLayout_destinaiton);

linearLayout_main = (LinearLayout)view.findViewById(R.id.messageItem_linearLayout_main);

textView_time_stamp = (TextView)view.findViewById(R.id.messageItem_textView_timeStamp);

}

}

}

@Override

public void onBackPressed() {

finish();

overridePendingTransition(R.anim.fromleft, R.anim.toright);

}

}

'''

'''package com.solive.knuprime031.knurun;

import android.content.Intent;

import android.graphics.Color;

import android.net.Uri;

import android.os.Build;

import android.provider.MediaStore;

import android.support.annotation.NonNull;

import android.support.annotation.RequiresApi;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ImageView;

import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;

import com.google.android.gms.tasks.OnSuccessListener;

import com.google.android.gms.tasks.Task;

import com.google.firebase.auth.AuthResult;

import com.google.firebase.auth.FirebaseAuth;

import com.google.firebase.auth.UserProfileChangeRequest;

import com.google.firebase.database.FirebaseDatabase;

import com.google.firebase.remoteconfig.FirebaseRemoteConfig;

import com.google.firebase.storage.FirebaseStorage;

import com.google.firebase.storage.UploadTask;

import com.solive.knuprime031.knurun.model.UserModel;

public class signUpActivity extends AppCompatActivity {

private EditText email;

private EditText name;

private EditText password;

private Button signup;

private String splash_background;

private ImageView profile;

private Uri imageUri;

private static final int PICK_FROM_ALBUM = 10;

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_sign_up);

FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();

splash_background = mFirebaseRemoteConfig.getString(getString(R.string.rc_color));

getWindow().setStatusBarColor(Color.parseColor(splash_background));

profile = (ImageView)findViewById(R.id.signUpActivity_imageView_profile);

profile.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

Intent intent = new Intent(Intent.ACTION_PICK);

intent.setType(MediaStore.Images.Media.CONTENT_TYPE);

startActivityForResult(intent,PICK_FROM_ALBUM);

}

});

email = (EditText)findViewById(R.id.signUpActivity_editText_email);

name = (EditText)findViewById(R.id.signUpActivity_editText_name);

password = (EditText)findViewById(R.id.signUpActivity_editText_password);

signup = (Button)findViewById(R.id.signUpActivity_button_signUp);

signup.setBackgroundColor(Color.parseColor(splash_background));

signup.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

if (email.getText().toString() == null || name.getText().toString() == null

|| password.getText().toString() == null || imageUri == null) {

Toast.makeText(signUpActivity.this, "NULL", Toast.LENGTH_SHORT).show();

return;

}

FirebaseAuth.getInstance().

createUserWithEmailAndPassword(email.getText().toString(), password.getText().toString())

.addOnCompleteListener(signUpActivity.this, new OnCompleteListener<AuthResult>() {

public void onComplete(@NonNull Task<AuthResult> task) {

final String uid = task.getResult().getUser().getUid();

UserProfileChangeRequest userProfileChangeRequest = new UserProfileChangeRequest.Builder().setDisplayName(name.getText().toString()).build();

task.getResult().getUser().updateProfile(userProfileChangeRequest);

FirebaseStorage.getInstance().getReference().child("userImages").child(uid).putFile(imageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {

public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

@SuppressWarnings("VisibleForTests")

String imageUrl = task.getResult().getDownloadUrl().toString();

UserModel userModel = new UserModel();

userModel.userName = name.getText().toString();

userModel.profileImageUrl = imageUrl;

userModel.uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

Toast.makeText(signUpActivity.this, "Try", Toast.LENGTH_SHORT).show();

FirebaseDatabase.getInstance().getReference().child("users").child(uid).setValue(userModel).addOnSuccessListener(new OnSuccessListener<Void>() {

@Override

public void onSuccess(Void aVoid) {

signUpActivity.this.finish();

}

});

}

});

}

});

}

});

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if(requestCode==PICK_FROM_ALBUM && resultCode==RESULT_OK) {

profile.setImageURI(data.getData());

imageUri = data.getData();

}

}

} '''

답변 2

·

답변을 작성해보세요.

0

코드를 통째로 주시면 제가 파악할수가 없습니다; 어떤오류가 어떻게 났는지 말씀해주셔합니다..

0

코드를 통째로 주시면 제가 파악할수가 없습니다; 어떤오류가 어떻게 났는지 말씀해주셔합니다..