Hi everyone,
The Mobile Apps Team met to discuss some of the technical aspects of notifications and how they can be served in the apps. This email summarises the technical aspects of the discussion as seen through the lens of product.
Broadly speaking, there are two classes of notifications:
- Local / pull. These are triggered on some kind of schedule or timer (e.g. every X minutes). They may, if they choose to, retrieve (i.e. pull) data from an API call when they are triggered, and present information retrieved from that API to the user. These are "simple" to implement as they have few server-side dependencies. - Remote / push. These notifications hook up to services (e.g. Google Play Services) to retrieve information and only trigger when they information is received (i.e. pushed) to them. The nature of the notifications means they can typically be more personalised. These are "hard" to implement, as there is server infrastructure required to push the information to the device.
From a UI perspective, there is absolutely no difference between a local
and remote notification. This distinction is not presented to the user, so it is totally irrelevant to them.
In terms of evaluating the success of notifications, it is important to consider that there are three interaction patterns that a user can have with a notification:
- Engage. The user taps on the notification and is directed to wherever the notification wants to direct them to. - Dismiss. The user dismisses the notification and it's not shown to them any more. - Languish. The user sees the notification, but neither engages with it nor dismisses it.
So, it is possible to build metrics around notifications. You can say "Of the X users we served this notification to, Y engaged with it, so we have a Y/X engagement rate". However, it's important to take these interaction patterns with a pinch of salt, for a variety of reasons.
- Firstly, do not assume that dismissing a notification means that it was ineffective, as that depends on the intent of the notification; if the notification was a reminder, then dismissing it means the user was successfully reminded! The exact metric used to evaluate the success of a notification will have to be decided on a case by case basis. - Secondly, on iOS, users may heavily customise the way notifications are presented to them which will mould the way they interact with them. - Thirdly, it is difficult on a technical level to distinguish between a "dismiss" and a "languish", and in fact on iOS there is often no distinction between these modes anyway.
That's all I have for now. Our initial discussion was very exploratory. More to come. :-)
Thanks, Dan
On Fri, Oct 10, 2014 at 6:01 AM, Dan Garry dgarry@wikimedia.org wrote:
From a UI perspective, there is absolutely no difference between a local and remote notification. This distinction is not presented to the user, so it is totally irrelevant to them.
While there's no UI difference, there are a couple of UX differences:
1. Server side push messages are 'instant' - client side pull ones will have a 'lag' of X/2 minutes on average, where X is the notification checking period 2. Doing a network request every, say, 10 minutes, is not good for the User's phone battery life.
There's also the other technical distinction of: 1. Client side, you have to pick and choose which notification types you would want to be notified for, since different ones would require different API calls. Does hitting every 10 minutes for a change that rarely happens, but is very important when it does, a good idea? 2. Push is *far* more forgiving on the servers than pull is, since there's no 'empty' hits that still require db scans, etc just to say 'nothing new'
There are also possible *legal* concerns, since push notifications from the server would entail us contacting Google / Apple's servers to send data via them and sending data via that. This can be properly encrypted in a way that Google / Apple can not view it - we just exchange a symmetric key when doing the initial registration from the client side, and everything is encrypted with that afterwards. Still, would need wider consultation.
Also, yay notifications!!1 \o/