When the application goes to the background it still keeps the SIP registration with the server, so when there is an inbound call or inbound message the app should be able to receive them. In some cases however the application may be closed by the system, for example when there is not enough resources to perform tasks with higher priorities. This happen quite often on iOS. Also the application may crash although it should be very rare as we strive to test it thoroughly. And the last option is that a user closes the app by tapping on the “log out” button in Settings menu.
When the app is closed, for whatever reason, the PUSH framework is used to deliver incoming communication from the server. PUSH is a general term for a notifications handled by the operating system which is responsible for connectivity with appropriate PUSH platform. Its implementation differs for iOS and Android but the flow is similar. When the application starts it contacts the PUSH platform and receives a unique token associated with this particular device. The token is then uploaded to the RCS platform.
Incoming calls notification
When there is an inbound call to a user who is not registered at the moment, the system puts the call on parking and sends the PUSH notification to the called party. The notification carries relevant information about the call such as the caller ID, caller display name and some other details which allow the application to pick up the parked call.
The PUSH notification on iOS is presented as a standard system notification. When PUSH arrives a popup is shown and a ringtone played from a file stored on the device. The name of the file comes with the PUSH. The limitation is that the file can be played only once, its duration is set arbitrary to 15 seconds.
A user can only select either OK or NO. When OK is chosen the system wakes up the application and passes the data conveyed in notification. The dialer immediately calls the server and requests connection with the parked call.
When the iPhone or iPad is in locked mode you have to first unlock it and only then the PUSH can be accepted.
On Android we have more control as the PUSH notification is first passed to the dialer which can process it and display own “incoming call” view which makes it looks as if it was a regular inbound call (not through PUSH). This approach provides better user experience.
Calls established using PUSH supports all the calling features including ICE.
When the call ended before a user answered the server sends additional “missed call” notification.
Chats and voicemail notifications
Instant messages are stored into a user’s inbox. When a user is offline the server sends a PUSH notification with information about new message. The notification carries information about the sender such as his callerd ID and display name. In addition it contains part of the message’s body truncated to fit the maximum size allowed for PUSH payload. When a user clicks on the notification popup the dialer wakes up and registers to the server. On registration all new messages are downloaded.
PUSH notifications are also used for new voicemails.