Protocolos de Comunicação - Aula 2
-
Upload
universitas -
Category
Documents
-
view
49 -
download
0
Transcript of Protocolos de Comunicação - Aula 2
Protocolos de Comunicação para Redes Móveis
Gustavo Soares [email protected]
Agenda• 22 / 10
• Email• SMS (Short Message Service)• XMPP (Extensible Messaging and Presence Protocol)• LBS (Location-Based Services)
• 29 / 10• SIP• PUSH• Projeto
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
Email . Arquitetura
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
Email . Envio (Exercício 1)
• Criar uma aplicação em Android, com um formulário que envie um email.
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
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
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
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
Email . Envio (Exercício 2)
• Modificar a aplicação para enviar um email utilizando o segundo modo de envio de email
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
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
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>
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()); }
}}
}
}
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
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
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.
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);
}}
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());}
}}
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) {};
});
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());}
}}
XMPP• Enviar Mensagem
currentChat.sendMessage(msgArea.getText().toString());
conn.disconnect();
• Desconectar
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
Location-Based Services
Aplicações
• Redes Sociais• Navegação• Marketing• Games• Rastreamento• ...
Location-Based Services
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
Location-Based Services
• Cuidados!!
• Consumo de bateria• Precisão
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) { }
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);