Take deserialization outside the methods as it can be reused.

Adding TryCast method improves readability and decreases the code nesting.
One channel per application and js callback functions.

It appears that MPNS opens only one channel per application and defines it by name.
Sometimes the channeluriupdate is called with delay and it looks like the channel has no Uri. Handle this by adding urichangedcallback js function.
Added js error callback to handle errors.
Added error to notify the user if they try to open new channel but already have opened one as this is throwing argument exception.
Extract the js function execution in separate method as it is reused.
Add unregister channel

If user want to open new channel they have to have the option to close the current one.
Update the error text.
Remove the channel field as it is not necessary.
Add unified handling of raw and toast notifications

Add API for showing toast notifications, using the system behaviour.
Expose interface for users to handle raw and toast notifications by js callbacks.
This way they can handle notifications differently than the system
Update readme file

Align correctly tabs.