On 20 October 2014 03:18, Shijun Sun <shij...@microsoft.com> wrote:

> What I'd like to get across is when the "push client" can handle generic
> actions already, such as posting a toast notifications, waking up the
> browser (or a subset of it) and let service workers to display each
> notification might not be the best practice from performance perspective,
>

Things I guess you'd do as a result of a push message:

* Update caches
* Show a notification
* Focus a tab & tell it to do something

Updating caches should be common, and it's something most native apps get
very wrong. Take Twitter for example, I can tap a notification that shows a
partial tweet, but I have poor/no connectivity so the full tweet doesn't
load. The notification is now gone, so I'm left with less information than
I had before I tapped the notification. Twitter should download and cache
the full tweet before showing the notification.

On top of that, there are conditions that could mean I don't want to show a
notification, or hide an existing one:

* User already has relevant content focused & visible
* User reads the content elsewhere (a push message would trigger the hiding
of the current notification)

Also, if the user dismisses the notification, I may wish to send that info
back to the server, and push a message that hides the notification on other
devices. When you multiply that all together, we've got a large API, and
we've probably done the appcache thing and forgotten about particular
use-cases.

In terms of RTC, let's imagine we receive a "Jeff's calling" push message.
At this point I'd want to:

* If there isn't a tab open to the calling app, open one
* Else use the existing one
* Focus it (forcing it over any lock screen - we don't have a way to do
this yet)
* postMessage the page telling it who's calling
* If a call is already in progress, show a small overlay indicating the new
call, with handling options
* Else show a full screen "Jeff's calling" message with handling options,
play ringtone until handled

If the call is answered on a particular device, you'll want to push to
other devices to stop "ringing".

That's a rough design for what I think should happen, other people may have
better ideas. I don't think now's the time to give a particular design a
high-level API. I'd rather follow the extensible web model and expose the
primitives, then build higher level bits based on common patterns that are
observed.

Reply via email to