我的意思是他们是否使用乒乓消息来获取用户连接信息?简而言之,他们如何知道将要来的请求发送到哪里?
3 回答
对于iOS,这些应用程序使用 APNS(Apple 推送通知服务)。
这是 Apple 提供的一项服务,可帮助应用程序在发生某些事情时提醒用户。
简而言之(和简化),它的工作原理是这样的
安装应用程序时,系统会询问用户是否应允许该应用程序向手机发送推送消息。
如果用户接受,应用程序将注册到 APNS 服务器(由 Apple 托管)并注册“设备令牌”。此令牌是一个序列号,可帮助 Apple 服务器跟踪手机。
该应用程序连接到应用程序服务器(例如 Viber 的服务器)并将设备令牌也发送到此服务器。服务器会将其连接到特定用户。
当用户接到电话时,viber 服务器会联系 APNS 服务器,进而提醒用户。
APNS 服务器跟踪用户在他/她的手机上拥有的所有应用程序。它将处理所有通知。iPhone 和 APNS 服务器之间的连接是内置于 iOS 平台的,并且会定期自动进行。
当 viber 服务器告知 APNS 服务器特定设备令牌正在发生某些事情时,APNS 服务器将联系该特定电话并向电话发送消息。在这种情况下,用户将被告知他/她有来自 viber 的来电。
可以在此处找到 APNS 的文档: 本地和推送通知编程指南
说到Android,有一个等效的服务,C2DM 我猜这些应用程序在使用此服务的 Android 上以类似的方式工作。
如果您在开始使用 Push 时需要一点帮助,有一项名为Urban Airship的很棒的服务可以让事情变得更容易,它同时支持 iOS、Android 和其他平台。
编辑:在应用程序已经打开的情况下,连接可以使用套接字连接保持打开状态,或者可以通过轮询刷新内容。这取决于应用程序的时间紧迫性。
在此类应用程序中,用户是基于 Android 设备唯一 ID 进行跟踪的。
import android.provider.Settings.Secure;
private String android_id = Secure.getString(getContext().getContentResolver(),
Secure.ANDROID_ID);
这些应用程序都连接到提供商的服务器并保持连接打开。因此服务器能够判断客户端是否已连接。从此,就只是正常的网络通信:
- 客户端 #1 将消息连同目标信息一起发送到服务器
- 服务器向目标客户端发送新消息可用的通知
- 客户端 #2 在收到通知后从服务器检索消息