Você está na página 1de 30

Protocolos de Comunicao para Redes Mveis

Gustavo Soares Vieira gugasv@gmail.com humrum.com

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 servio mais utilizado da internet Associado a aplicativos de calendrio, contatos, endereos e lista de tarefas agrega muito valor aos servios de software corporativos Celulares e smartphones so por natureza dispositivos para acesso a servios 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[]{ fulano@a.com }); 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 - No precisa de nenhuma biblioteca externa

Desvantagens
- No envia o email direto, abre o aplicativo padro de email

Email . Envio (Exerccio 1)

Criar uma aplicao em Android, com um formulrio que envie um email.

Email . Envio (2)


JavaMail API (mail.jar) JavaBeans Activation Framework (activation.jar)

Provider
Adio de permisses

Authentication
Autenticao do usurio com servidor SMTP

Email . Envio (2)

Provider

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;

});

Email . Envio (2)

Authentication

... 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);

Email . Envio (2)

Authentication

... @Override protected 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); }

Email . Envio (Exerccio 2)

Modificar a aplicao para enviar um email utilizando o segundo modo de envio de email

Short Message Service (SMS)

Em 2010, cerca de 6.1 trilhes de SMS foram enviados Tipos: Texto (160 caracteres de 7-bit) MMS Binrio Aplicaes:

Mobile Ticket Marketing Alertas e Notificaes Comunicao

MobileTicket

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

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

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
<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>

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

SMS . Recebimento
public class SMSReceiver extends BroadcastReceiver { private static final String SMS = "android.provider.Telephony.SMS_RECEIVED"; @Override public 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];

... } SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(number, null, message, null, null); if (messages.length > -1) { ... Log.i("idez", "Message recieved: " + messages[0].getMessageBody());
} } }

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

} }

SMS . Exerccio

Criar uma aplicao em Android, com um formulrio que envie um SMS para um nmero informado. Possibilitar o usurio da aplicao selecionar um nmero a partir da lista de contatos do telefone

Instant Messaging (IM)

SMS um excelente mecanismo de comunicao atravs de mensagens push. Mas a falta de interoperabilidade com redes TCP/IP limita a sua utilizao IM killer Porm as operadoras ainda relutam, SMS ainda mais lucrativo do que IM Palavra chave: interoperabilidade Precisamos de um protocolo que seja interopervel 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 usurios
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 REASON new MessageListener() { @Override public void processMessage(Chat chat, org.jivesoftware.smack.packet.Message msg) { }; } );

XMPP

Receber Mensagem
isTalking = true; // Accept only messages from friend PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class), new FromContainsFilter(friend)); // Collect these messages PacketCollector 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());

Desconectar
conn.disconnect();

XMPP . Exerccio

Criar um cliente XMPP que ir se conectar ao servidor no ip abaixo

192.168.1.1 Com um formulrio para enviar mensagens para o usurio: idez@localhost

Location-Based Services
Aplicaes

Redes Sociais Navegao Marketing Games Rastreamento ...

Location-Based Services

Location-Based Services
Formas de localizao:

ID de clula

O celular est constantemente se comunicando com as torres de comunicao

Triangulao

Na maior parte do tempo o celular est na faixa de mais de uma torre de celular

GPS

Sistema de posicionamento global por satlite

Location-Based Services

Cuidados!!

Consumo de bateria Preciso

Location-Based Services

LocationListener
... locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 10000, 0, this); ... @Override public void onLocationChanged(Location location) { } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public 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);

Você também pode gostar