Protocolos de Comunicação - Aula 2

30
Protocolos de Comunicação para Redes Móveis Gustavo Soares Vieira [email protected] humrum.com

Transcript of Protocolos de Comunicação - Aula 2

Page 1: Protocolos de Comunicação - Aula 2

Protocolos de Comunicação para Redes Móveis

Gustavo Soares [email protected]

Page 2: Protocolos de Comunicação - Aula 2

Agenda• 22 / 10

• Email• SMS (Short Message Service)• XMPP (Extensible Messaging and Presence Protocol)• LBS (Location-Based Services)

• 29 / 10• SIP• PUSH• Projeto

Page 3: Protocolos de Comunicação - Aula 2

Email• O e-mail é provavelmente o serviço mais utilizado

da internet

• Associado a aplicativos de calendário, contatos, endereços e lista de tarefas agrega muito valor aos serviços de software corporativos

• Celulares e smartphones são por natureza dispositivos para acesso a serviços de mensagens

Page 4: Protocolos de Comunicação - Aula 2

Email . Arquitetura

Page 5: Protocolos de Comunicação - Aula 2

Email . Envio (1)

...Intent i = new Intent(android.content.Intent.ACTION_SEND);i.setType("text/html");

i.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{ [email protected] });i.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);i.putExtra(android.content.Intent.EXTRA_TEXT, message);

startActivity(Intent.createChooser(i, "Enviando email..."));

● Vantagens- Abstrai bastante- Não precisa de nenhuma biblioteca externa

● Desvantagens- Não envia o email direto, abre o aplicativo padrão de email

Page 6: Protocolos de Comunicação - Aula 2

Email . Envio (Exercício 1)

• Criar uma aplicação em Android, com um formulário que envie um email.

Page 7: Protocolos de Comunicação - Aula 2

Email . Envio (2)● JavaMail API (mail.jar)● JavaBeans Activation Framework (activation.jar)

● ProviderAdição de permissões

● AuthenticationAutenticação do usuário com servidor SMTP

Page 8: Protocolos de Comunicação - Aula 2

Email . Envio (2)

public final class JSSEProvider extends Provider {public JSSEProvider() {super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");

AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {public Void run() {

put("SSLContext.TLS", "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");

put("Alg.Alias.SSLContext.TLSv1", "TLS");put("KeyManagerFactory.X509",

"org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");put("TrustManagerFactory.X509",

"org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");

return null;}

});}

● Provider

Page 9: Protocolos de Comunicação - Aula 2

Email . Envio (2)

...static {

Security.addProvider(new JSSEProvider()); }

public GmailSender() {Properties props = new Properties();props.setProperty("mail.transport.protocol", "smtp");props.setProperty("mail.host", smtpHost);props.put("mail.smtp.auth", "true");props.put("mail.smtp.port", "465");props.put("mail.smtp.socketFactory.port", "465");props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");props.put("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.smtp.quitwait", "false");

session = Session.getDefaultInstance(props, this);}...

● Authentication

Page 10: Protocolos de Comunicação - Aula 2

Email . Envio (2)

...@Overrideprotected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(user, pwd);}

public synchronized void sendMail(String subject, String body, String recipients) { MimeMessage message = new MimeMessage(session); DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(),

"text/plain")); message.setSender(new InternetAddress(user));message.setSubject(subject); message.setDataHandler(handler); if (recipients.indexOf(',') > 0)

message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(recipients));

else message.setRecipient(Message.RecipientType.TO,

new InternetAddress(recipients)); Transport.send(message);

}

● Authentication

Page 11: Protocolos de Comunicação - Aula 2

Email . Envio (Exercício 2)

• Modificar a aplicação para enviar um email utilizando o segundo modo de envio de email

Page 12: Protocolos de Comunicação - Aula 2

Short Message Service (SMS) • Em 2010, cerca de 6.1 trilhões de SMS foram

enviados

• Tipos:• Texto (160 caracteres de 7-bit)• MMS• Binário

• Aplicações:• Mobile Ticket• Marketing• Alertas e Notificações• Comunicação

MobileTicket

Page 13: Protocolos de Comunicação - Aula 2

SMS . Envio

...SmsManager sms = SmsManager.getDefault();sms.sendTextMessage(number, null, message, null, null);...

<uses-permission android:name="android.permission.SEND_SMS"/>

sendTextMessage(destino, origem, mensagem, sentIntent, deliveryIntent)

Onde: . sentIntent irá monitorar o envio da mensagem. deliveryIntent irá monitorar o recebimento da mensagem

http://mobiforge.com/developing/story/sms-messaging-android

Page 14: Protocolos de Comunicação - Aula 2

SMS . Recebimento

...SmsManager sms = SmsManager.getDefault();sms.sendTextMessage(number, null, message, null, null);...

<uses-permission android:name="android.permission.RECEIVE_SMS">...<receiver android:name="br.com.avaty.sms.receiver.SMSReceiver">

<intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>

Page 15: Protocolos de Comunicação - Aula 2

SMS . Recebimento

...SmsManager sms = SmsManager.getDefault();sms.sendTextMessage(number, null, message, null, null);...

public class SMSReceiver extends BroadcastReceiver {

private static final String SMS = "android.provider.Telephony.SMS_RECEIVED";

@Overridepublic void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(SMS)) {Bundle b = intent.getExtras();if (b != null) {

Object[] pdus = (Object[]) b.get("pdus");SmsMessage[] messages = new SmsMessage[pdus.length];

for (int i = 0; i < pdus.length; i++) {messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);

}

if (messages.length > -1) { Log.i("idez", "Message recieved: " + messages[0].getMessageBody()); }

}}

}

}

Page 16: Protocolos de Comunicação - Aula 2

SMS . Exercício• Criar uma aplicação em

Android, com um formulário que envie um SMS para um número informado.

• Possibilitar o usuário da aplicação selecionar um número a partir da lista de contatos do telefone

Page 17: Protocolos de Comunicação - Aula 2

Instant Messaging (IM)• SMS é um excelente mecanismo de comunicação

através de mensagens push. Mas a falta de interoperabilidade com redes TCP/IP limita a sua utilização

• IM é killer

• Porém as operadoras ainda relutam, SMS ainda é mais lucrativo do que IM

• Palavra chave: interoperabilidade• Precisamos de um protocolo que seja interoperável

entre os diversos fabricantes e aplicativos

Page 18: Protocolos de Comunicação - Aula 2

XMPP• Extensible Messaging and Presence Protocol

http://xmpp.org/

• API para Android• asmack . http://code.google.com/p/asmack/

• Smack API . http://www.igniterealtime.org/projects/smack/Smack is an Open Source XMPP (Jabber) client library for instant

messaging and presence. A pure Java library, it can be embedded into your applications to create anything from a full XMPP client to simple XMPP integrations such as sending notification messages and presence-enabling devices.

Page 19: Protocolos de Comunicação - Aula 2

XMPP• Conectar

private void connect() {ConnectionConfiguration config = new ConnectionConfiguration(ip,port);config.setSecurityMode(SecurityMode.disabled);config.setSASLAuthenticationEnabled(false);conn = new XMPPConnection(config);

try {conn.connect();conn.login(login, pwd);

} catch (Exception e) {Message msg = new Message();msg.what = XMPP_CONN_ERROR;msg.obj = e.getMessage();handler.sendMessage(msg);

}}

Page 20: Protocolos de Comunicação - Aula 2

XMPP• Listar usuários

private void showUsers() {if (conn != null) {

Roster roster = conn.getRoster();Collection<RosterEntry> entries = roster.getEntries();for (RosterEntry entry : entries) { Log.i("idez", entry.toString());}

}}

Page 21: Protocolos de Comunicação - Aula 2

XMPP• Iniciar Chat

ChatManager chatManager = conn.getChatManager();currentChat = chatManager.createChat(“idez@localhost”,

// THIS CODE NEVER GETS CALLED FOR SOME REASONnew MessageListener() {

@Overridepublic void processMessage(Chat chat,

org.jivesoftware.smack.packet.Message msg) {};

});

Page 22: Protocolos de Comunicação - Aula 2

XMPP• Receber Mensagem

isTalking = true;// Accept only messages from friendPacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class), new

FromContainsFilter(friend));

// Collect these messagesPacketCollector collector = conn.createPacketCollector(filter);

while (isTalking) {Packet packet = collector.nextResult();if (Message) {

Message msg = (Message) packet;if (msg.getBody() != null) {

Log.i(“idez”, msg.getBody());}

}}

Page 23: Protocolos de Comunicação - Aula 2

XMPP• Enviar Mensagem

currentChat.sendMessage(msgArea.getText().toString());

conn.disconnect();

• Desconectar

Page 24: Protocolos de Comunicação - Aula 2

XMPP . Exercício• Criar um cliente XMPP que irá se conectar ao servidor

no ip abaixo

• Com um formulário para enviar mensagens para o usuário: idez@localhost

192.168.1.1

Page 25: Protocolos de Comunicação - Aula 2

Location-Based Services

Aplicações

• Redes Sociais• Navegação• Marketing• Games• Rastreamento• ...

Page 26: Protocolos de Comunicação - Aula 2

Location-Based Services

Page 27: Protocolos de Comunicação - Aula 2

Location-Based Services

Formas de localização:

• ID de célula• O celular está constantemente se comunicando com as torres

de comunicação

• Triangulação• Na maior parte do tempo o celular está na faixa de mais de

uma torre de celular

• GPS• Sistema de posicionamento global por satélite

Page 28: Protocolos de Comunicação - Aula 2

Location-Based Services

• Cuidados!!

• Consumo de bateria• Precisão

Page 29: Protocolos de Comunicação - Aula 2

Location-Based Services• LocationListener

...locationManager = (LocationManager)

getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(

LocationManager.GPS_PROVIDER, 10000, 0, this);...@Overridepublic void onLocationChanged(Location location) { }

@Overridepublic void onProviderDisabled(String provider) { }

@Overridepublic void onProviderEnabled(String provider) { }

@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) { }

Page 30: Protocolos de Comunicação - Aula 2

Location-Based Services• Verificar Status GPS e Redirecionamento

private boolean checkGPSState() {LocationManager locManager = (LocationManager)

getSystemService(LOCATION_SERVICE);return locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

}

Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);

startActivityForResult(gpsOptionsIntent, GPS_REQUEST);