an abstraction layer for dealing with push notification