Presence & Message History with the PubNub AngularJS Library

5 min read Michael Carroll on Feb 18, 2014
Try PubNub Today

Free up to 1MM monthly messages. No credit card required.

Subscribe to our newsletter

By submitting this form, you are agreeing to our Terms and Conditions and Privacy Policy.

AngularJS goes real-time with PubNub! In Part 2 of our AngularJS series, we walk you through using our AngularJS SDK with Presence and Storage & Playback.

A couple weeks ago, we posted our using PubNub with AngularJS SDK for Real-time which is a fast-growing and highly productive library for web application development in JavaScript. Since then, there has been no slowing down in the adoption or development of AngularJS or PubNub: AngularJS recently released 1.2.10, and PubNub is up to version 3.5.48. As we’ve been building a bunch of PubNub-enabled AngularJS applications, a number of useful patterns and techniques for AngularJS developers have popped up, for example:

  • an Angular service to inject the data sync PubNub connector into controllers
  • an Angular-friendly mechanism for binding events to the root scope
  • additional bookkeeping functions for providing easy access to collections (such as the presence and channels lists)

We’re continuously updating this library – for example, updated presence API support will be coming soon. We’re also actively exploring more features in this library, such as PubNub-enabled Angular directives and integration with the AngularJS promise framework. So stay tuned and let us know here PubNub AngularJS on GitHub if you have any ideas for future enhancements! The PubNub AngularJS library should look familiar to experienced developers in Angular app development as well as to folks who have explored the PubNub API a bit.

For this blog entry, we’ll presume you are somewhat familiar with the ideas from an earlier PubNub AngularJS SDK Blog, at least enough to get started. If you like what you see here, you can jump right into a live version of the app at or the source code at . Let’s take a look at the contents of, the main entry point for the application.

Quick Recap: Setting Up

You’ll first need to sign up for a PubNub account. Once you sign up, you can get your unique PubNub keys in the PubNub Developer Portal. Once you have, clone the GitHub repository, and enter your unique PubNub keys on the PubNub initialization, for example:

Here are the script includes you’ll need to get started: The web app is Angular-enabled with an ng-app attribute: The code for our app lives in: The app requires a dependency on the PubNub Angular library (pubnub.angular.service, defined in pubnub-angular.js): The code for our controllers lives in: Once that’s set, the PubNub service can be injected into the controller by name!

Quick Recap: Publish and Subscribe

Publishing to channels is trivial – just use the PubNub.ngPublish() method. Subscribing to channels is accomplished by calling the PubNub.ngSubscribe() method. After the channel is subscribed, the app can register root scope message events by calling $rootScope.$on with the “event name” string returned by PubNub.ngMsgEv(channel).

Wiring Up Presence Events into your Application

angularjs presenceThe PubNub Presence API makes it very easy to build presence-aware applications — without the Presence API, you’d have to track all of the join/leave/timeout events yourself on the server side. Which is really tough if you’re building a pure JS web application with no server side! Presence fixes that. To keep things simple, wiring up Presence events using the PubNub AngularJS API is very similar to wiring up Message events. It all boils down to registering an event handler callback for the presence events: In this case, PubNub.ngPrsEv(theChannel) returns the “event name” string that identifies presence events for the specified channel. The presence event payload contains a bunch of useful information for your app: the channel and PubNub event itself. In the case of a single-user event (which you can tell by the presence of the ‘uuid’ field, payload.event contains action (join/leave/timeout), occupancy (number of users in the channel), timestamp, and uuid of the relevant user. In the case of a multi-user event (such as the one triggered by ngHereNow()), the payload.event contains the occupancy count as well as a ‘uuids’ field (note pluralization) which contains the list of current user ids. In addition to the callback-based API, there is also a convenient collection-based API that keeps track of channel membership automatically. To obtain the list of users, just call the ngListPresence() function with the name of the channel you’d like to list. Of course, you’ll want to already be subscribed to the channel and initialized the ‘here now’ status as in the example below. Often times, we combine both approaches to make sure that our Angular views always have the most up-to-date user list: And just like that, your app is wired for presence!

Using the Storage & Playback Functions to Backfill Messages

angularjs storageIn addition to Presence, the PubNub AngularJS API includes some helpers for building real-time message-based applications. One convenient feature we’d like to point out is the History API, which allows applications to retrieve previous messages from PubNub channel storage and fire them as application message events. The history API will require a channel subscription and message event handler as shown below. Once that’s set up, simply call the gHistory() function with the number of messages to retrieve.



When the ngHistory() call executes, the library will cause AngularJS message events to be broadcast on the root scope to all registered listeners. Check out the PubNub Javascript SDK for a more detailed description of the History API v2 features. In addition to the ‘count’ parameter above, it is also possible to do forward and reverse timeline-based iteration! Look up the ‘start’, ‘end’ and ‘reverse’ parameters for details.

Wrapping Up AngularJS

Real-time AngularJSIn this blog post, we had fun showing you a how to integrate your angular app with the PubNub AngularJS library. We hope you find this information to be useful — it is really cool to see the number of PubNub and AngularJS applications growing over the past few weeks!

The PubNub API has many more features we didn’t cover in this blog post, but which are explained in detail in the GitHub API Guide and Reference. The documentation walks you through additional topics which really enhance your real-time-enabled web application. In future blog posts, we’ll cover other features of the PubNub Angular API. In the meantime, please give the AngularJS integration a try, have fun, and reach out if you have ideas visit GitHub pubnub/angular-js. Or, do you need a hand (!

Get Started
Sign up for free and use PubNub to power AngularJS
user detection adn history

More from PubNub

How to Add a Notification Badge to Icons in React Native
Real-time Chat BlogDec 19, 20226 min read

How to Add a Notification Badge to Icons in React Native

Display real-time notification badges with PubNub and React Native to display important information and bring users back to your...

Michael Carroll

Michael Carroll

Digital Twins and the Future of Real-Time Data
InsightsDec 6, 20224 min read

Digital Twins and the Future of Real-Time Data

The concept of Digital Twins has evolved over the last two decades, however, one thing remains the same: the need for real-time...

Michael Carroll

Michael Carroll

How Many Text Characters Fit in a 32KB PubNub Message?
Real-time Chat BlogNov 24, 20224 min read

How Many Text Characters Fit in a 32KB PubNub Message?

Learn the ins-and-outs of PubNub message size and get a better idea of how many text characters fit in a single message.

Michael Carroll

Michael Carroll