Saltar para conteúdo


Foto
- - - - -

Dúvida - Notificações GCM


  • Por favor inicie sessão para responder
3 respostas a este tópico

#1 vpbb

vpbb

    Novato

  • Membros
  • Pip
  • 2 mensagens

Mensagem publicada 20 June 2015 - 21:41

Boa noite, 

 

sou principiante na programação, e estou a tentar implementar numa aplicação um chat usando o Google Cloud Messaging (ou seja isto não é a função principal da app, é apenas mais um "extra" para o utilizador), aparentemente está tudo a funcionar como eu quero, só que com um pequeno problema. 

Neste momento eu já consigo trocar mensagens com outros utilizadores, recebo as notificações com as mensagens de cada utilizador, no entanto estas só ficam gravadas na "tela chat" se esta estiver em execução. Por exemplo se eu tiver a app a correr em backgroud, ao receber uma mensagem a notificação aparece, eu clico nela e abre a activity do chat e a mensagem não está lá (não guarda lá).... No entanto se eu enviar uma mensagem e ficar com a "tela chat" aberta como se estivesse a espera da resposta, ao receber a mensagem ela fica lá gravada. Alguém tem alguma ideia do que pode estar a acontecer? e do que eu posso estar a fazer errado? Se alguém me poder ajudar ficaria muito grata. Desde já obrigada  :) 

Não sei se me expliquei bem, também sou principiante em postar dúvidas.  :emo_im_undecided:


Editado por vpbb, 20 June 2015 - 21:42.


#2 xanex

xanex

    Membro

  • Membros
  • PipPip
  • 199 mensagens
  • LocalizaçãoLisboa
  • Nexus 10, Nexus 5x, Nexus 6p

Mensagem publicada 22 June 2015 - 10:51

Olá,

 

Provavelmente estás a meter o texto diretamente no contexto onde está o chat, caso a atividade não esteja aberta o contexto não existe e o chat não é gravado, provavelmente está a dar-te um aviso qualquer no logcat sobre isso.

 

Uma das possives soluções é gravares o chat num content provider ou coisa do genero, e o contexto onde mostra o chat ao utilizador, vai diretamente ao content provider sacar o chat, ficas com um intermediário entre a "tela" do chat e o servidor do chat, nunca podes (podes mas não convem) ter uma ligação direta que pode dar problemas em termos de cache ou memoria.



#3 vpbb

vpbb

    Novato

  • Membros
  • Pip
  • 2 mensagens

Mensagem publicada 23 June 2015 - 13:14

Olá, antes de mais obrigada pelo seu comentário...

eu como nunca tinha feito nada do género, tentei fazer seguindo um tutorial e está da seguinte maneira:


este é o meu receiver

public class GcmBroadcastReceiverII extends WakefulBroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

// Explicitly specify that GcmIntentServiceII will handle the intent.
ComponentName comp = new ComponentName(context.getPackageName(),
GcmIntentServiceII.class.getName());
// Start the service, keeping the device awake while it is launching.
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);

Bundle extras = intent.getExtras();
Intent i = new Intent("CHAT_MESSAGE_RECEIVED");
i.putExtra("message", extras.getString("message"));
i.putExtra("date", extras.getString("date"));
i.putExtra("nickname", extras.getString("nickname"));
i.putExtra("name", extras.getString("name"));
context.sendBroadcast(i);

}
   
}

e depois na chat activity tenho 

	BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {

			Bundle b = intent.getExtras();

			String message3 = b.getString("message");
			String date2 = b.getString("date");
			String nicknamere = b.getString("nickname");
			String namere = b.getString("name");
			if(!nicknamere.equalsIgnoreCase("null")){
				ChatPeople curChatObj = addToChat(nicknamere, message3,
						"Received" + " " + date2);
				addToDB(curChatObj); // adding to db
				
				
			}
			else{ 
				ChatPeople curChatObj = addToChat(namere, message3,
						"Received" + " " + date2);
				addToDB(curChatObj); // adding to db
				
				
			}
			
			

			populateChatMessages();

		}
	};

e chamo no onCreate da seguinte forma 
 

registerReceiver(broadcastReceiver, new IntentFilter(
"CHAT_MESSAGE_RECEIVED"));

não sei se é a melhor forma de se fazer, foi a que percebi ao ver o tutorial, reaproveitando parte do código que lá estava. Como disse estou a aprender ainda e sei muito pouco disto :/
 

Editado por vpbb, 23 June 2015 - 13:29.


#4 xanex

xanex

    Membro

  • Membros
  • PipPip
  • 199 mensagens
  • LocalizaçãoLisboa
  • Nexus 10, Nexus 5x, Nexus 6p

Mensagem publicada 24 June 2015 - 08:45

exprimenta fazer logs no GcmBroadcastReceiverII

ve se é imprimido a string do chat quando o chat não aparece na outra atividade, se for isso quer dizer que o chat se perde pelo meio

 

ou vai fazendo debug com break points e ve onde os dados se perdem