androidpn的一次亲切接触(二)
androidpn的一次亲密接触(二)
因为这个协议比较灵活,但google的c2dm强调的是云,只不过底层使用的xmpp协议罢了。这个协议可扩展性还是比较强的。
简单看了一下源码的实现,这里贴一点个人觉得比叫重要的代码。
XmppManager.java
- 构造方法:
public XmppManager(NotificationService notificationService)
在这里主要是从共享引用中取得xmpp服务器地址和端口号、用户名和密码。
- 内部类
private class ConnectTask implements Runnable
这个内部类主要实现的是连接服务器的操作。通过connection.connect();实现连接服务器。通过如下语句实现发送连接消息。
ProviderManager.getInstance().addIQProvider("notification", "androidpn:iq:notification", new NotificationIQProvider());
最后通过xmppManager.runTask();执行任务队列中的任务。
- 内部类
private class RegisterTask implements Runnable
这个内部类主要实现的是在服务器上注册用户的操作。如果没有注册,随即生成用户名和密码注册到服务器上。同样通过connection.sendPacket(registration);发送消息实现注册功能。
- 内部类
private class LoginTask implements Runnable
这个内部类主要实现的是用户的登录操作。通过注册到服务器上的用户名和密码登录到服务器上。最后通过connection.addPacketListener(packetListener, packetFilter);实现消息的监听。最后一样通过xmppManager.runTask();在消息队列中执行任务(执行这个线程)。这个类就是实现服务器推动的主要类。
上述为客户端的实现。总的来说客户端仍然是通过xmpp协议实现消息的传输。值得注意的是在NotificationService这个类中(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);方法取得了系统的消息的相关服务。主要为类是取得设备的ID,但我在源码中没有看到使用这个设备ID的地方。很是不解,看来还是需要继续深入的研究。
哈哈。到现在为止,总共完成了对openfire开发环境、openfire插件的制作、smack和openfire通信、androidpn的部署方式以及androidpn的使用方法的研究调研工作。对这些方面都是停留在皮毛,希望以后可以通过实际应用可以学到更加深层次的东西。对了,听一位业内人士说,xmpp是很复杂的,希望以后我能更加了解一点。
明天研究写什么呢?明天可能要计划一下怎么把公司现有的工作流做到android上来。
未完待续...
1 楼
wearebug
2011-06-23
Google的C2DM协议也是在XMPP基础上改造的。
2 楼
yangzc106
2011-06-23
wearebug 写道
Google的C2DM协议也是在XMPP基础上改造的。
因为这个协议比较灵活,但google的c2dm强调的是云,只不过底层使用的xmpp协议罢了。这个协议可扩展性还是比较强的。
3 楼
chen5040
2011-07-21
怎么没有继续往下写了呢,我现在也要做这一块的实现,希望可以讨论下。
不知博主对该项目的服务器端的实现是否了解。
不知博主对该项目的服务器端的实现是否了解。
4 楼
zsxsilence
2012-06-21
问一下楼主,openfire 和androidpn是啥关系?有什么区别?